基于Spring Cloud的系统设计与优化
2021-11-30廖梓洋曾玉林
廖梓洋,曾玉林
(四川大学锦城学院 计算机与软件学院,四川 成都 611731)
随着互联网的飞速发展,数字经济时代,大众学习的个性化需求不断增强,时间碎片化问题逐渐增多,为在线教育提供了广阔的发展前景。特别是遭遇近些年的突发状况,学校以及培训机构无法进行线下教学,助推了教育行业的线上转变。但也正是由于大量增长的用户来使用在线学习服务,导致许多传统的单体架构的学习系统无法承载突然增长的用户数量,从而导致了服务器瘫痪。因此,随着微服务的风靡,我们考虑设计一种微服务架构的在线学习系统。微服务架构具有独立部署、动态扩展、快速迭代等优势,可使开发者短时间内构建高可部署性,高可扩展性的应用。
1.微服务架构概述
微服务是一个具有高并发、高扩展、独立部署等特性的应用,它将复杂的应用系统按照业务划分,以独立业务模块的形式拆解成多个服务单元。微服务架构的出现是互联网飞速发展的必然结果,是将传统的单服务架构垂直拆分为若干个微服务,每个微服务都是单独的模块,拥有单独的数据库与配置等等,并且由于spring Cloud 能异构支持多种语言开发,所以能够将系统不同的模块分配交给最佳的技术团队去完成,然后每个微服务通过Nacos 的注册中心进行协助,完成一个完整的功能,极大提高了系统完成的效率和质量。
2.系统的设计与实现
2.1 系统的总体框架
在线视频学习系统是采用Spring Cloud 微服务框架,并且是前后端完全分离式进行开发。该学习系统前端采用Vue.js、Node.js、Element UI、Axios 等技术进行开发环境搭建以及页面的开发。而后端框架采用的是Spring Cloud、Spring Boot、Mybatis-plus、Swagger、Nacos 等关键技术开发。
存储方面则是运用到了Mysql 数据库、Redis 缓存、阿里云OSS 以及系统日志等技术来完成,同时可采用Hystrix 断路器来解决服务响应超时的问题。使用阿里巴巴的Nacos 技术来完成微服务注册中心、配置中心持久化。随着前后端都相继完成开发,最后则是可通过Nginx 反向代理以及Gate Away 网关技术来完成交互。
2.2 系统的功能模块设计
2.2.1 前台用户学习模块
在线视频学习系统的前台学习模块是面向广大用户设计的浏览器客户端,它提供在线视频播放、相关文章查看、导师问答、留言互动、用户中心、微信支付与登录等等服务。同时在性能方面,考虑到浏览器客户端的访问次数可能会因为运营推广而日益增加导致服务器压力过大的情况,可以采取分布式集群部署的方式,引入缓存、负载均衡来解决。
用户通过微信或者手机号进行注册,注册后系统会默认为普通用户,在使用该系统时会封锁一些会员功能。当然,用户可以通过多种途径来进行升级,一是根据在线学习的时长,二是根据留言互动中正确解答问题的次数,三是直接通过在线充值进行快速升级,而当用户成为会员时,就会解锁一系列权限,从而得到更好的用户体验。
2.2.2 后台运营管理模块
该系统的后端运营管理模块则是为系统的后台运营维护人员而设计的,它为运营维护人员提供了如下功能:用户管理、权限设置、导师管理、数据统计、课程管理、视频管理、文章资源、问答管理、帮助中心、短信服务、系统消息等等。
后台运营维护人员通过获取权限的管理账户成功登录进后台管理系统后,可以根据数据统计中各个视频、导师、课程的点击率以及热度来对前台用户页面的相关内容进行优化,把最近热度最高的视频、导师、课程排版到最首页,从而通过优质的资源来吸引更多的用户。
通过后台系统的路由导航可以进入不同功能的管理模块,可以查看各个模块的具体内容,也可以通过精准查询或者模糊匹配来完成相关目标的查找,从而进行相应的更改。
2.3 数据库设计
在线视频学习系统使用目前较为流行的关系型数据库MySQl 进行存储,采用多张表对相关的内容进行存储,部分表之间存在一对多、多对多等关系,对部分关键的数据表设计如下。
前台用户user 表用来存储用户的相关信息,具体的字段名包括用户id、电话mobileid、密码password、昵称name、性别(1 女,0 男)sex、用户头像photo、用户签名sign、用户创建时间time_create、用户更新时间time_modified。课程course 表用来存储前台展示课程的相关视频以及资料,具体的字段包括课程id、课程讲师teacher_id、课程专业subject_id、课程标题title、课程总课时lessom_time、课程封面图片路径cover、浏览数量view_count、课程发布状态course_status。视频video 表用来存储学习视频的资源地址、播放次数等等,具体的字段包括视频id、课程course_id、节点名称title、云端视频资源video_sourse_id、播放字数play_count、是否可以免费听(0 收费,1免费)is_free、视频时长video_time、视频资源大小size。数据统计data_statistics 表用来存储每日的新增课程和视频数,记录登录注册的用户数量,具体的字段包括数据统计主键id、统计日期data_time、注册人数user_register、登录人数user_login、每日视频新增数video_add、每日视频播放数video_view。订单pay 表存储了订单的金额数量以及支付状态等等,具体的字段包括订单号id、订单支付完成时间pay_time、支付金额fee、支付状态status、订单创建时间pay_create、视频更新时间pay_modified。
3.系统的性能优化构思
3.1 容器技术
该系统采用的微服务框架技术,相对于传统的单体服务架构系统的一台机器完成部署,现在构想可以将众多模块的微服务分配到成百上千台服务器完成部署,只是在进行部署时需要多节点有序发布,这时就需要容器技术(docker、k8s),用来瞬间完成对服务器的成百上千的节点扩容;这样一来,假若明天是活动日需要容纳更多用户的高频访问,那么这些扩容的节点会自动接入我们的微服务集群,注册到Nacos 的注册中心,那么注册中心的注册表也会及时地自动更新并同步到各个微服务的本地注册表中,就能实现新增微服务之间的协助,从而瞬间完成对外提供高性能的服务;当活动日过去之后,可以将这些容器去掉,恢复到以前满足日常访问的性能即可。
3.2 分布式集群部署
关于微服务架构、分布式架构、集群架构,通常认为微服务架构是分布式架构的实现方式,下面举个系统实例来解释分布式架构的概念。例如该系统的一个完整视频播放服务是由视频获取、视频播放、视频时长统计等不同的微服务分开来共同通讯协作完成,这就构成了分布式部署。那么,如果将其中的某一个微服务例如视频播放部署成多个相同的微服务,它们之间配置相同,但是互相不协助,这时假如突然出现大量的用户进行视频播放,那么就可以通过多层均衡负载,将这些微服务请求合理地分散到各个集群式部署的相关视频播放微服务上去,这样就能有效减缓单个服务器的压力,那么每个分布式部署的微服务都采用这样的集群式部署,系统的性能会得到提高,并且提高了系统的容错率。
3.3 均衡负载
均衡负载是指将工作按照一定的规则分配给多个处理单元共同完成整改任务的一种协同工作方式,根据实现的方式不同可以分为硬件负载均衡和软件负载均衡。相较于类似F5 等硬件均衡负载,反向代理Nginx、LVS 等软件均衡负载具备价格更优惠、部署更方便等等优点,因此大多还是采用软件均衡负载。当然,我们为了性能更加优化,可以采取多层均衡负载的手段,例如可以在底层利用反向代理Nginx 实现对Tomcat 容器的均衡负载。利用LVS 或F5 实现对反向代理Nginx 的负载均衡。DNS 配置实现多机房均衡负载。这样高可用的负载均衡可使系统在未来面对庞大的客户端入口高并发时能选择通过以上手段得到解决,从而到达到高并发情况下系统维持高性能的正常运转。
4.系统的测试成果概述
选取此系统的几个核心功能进行测试。在启动前后端的服务后,对视频的上传与下载能正常进行。并且通过前台系统的视频播放,发现后台管理系统的数据统计中视频播放数量正常增加,并且查看后端的日志显示该功能的响应时间在500 ms内。至此说明了此系统无论是在协同前台系统服务调用方面,还是服务响应时间上都成功完成测试。
5.结语
复杂系统微服务化是各种系统提高性能的一种选择发展方向。本文介绍了该系统的前后端部分功能服务的开发技术和操作步骤,概述了微服务对于系统性能提升的优点,同时基于SpringCloud 微服务框架完成了在线视频学习系统的开发。相较于传统的单体服务架构的学习系统,该采用微服务架构的系统部署更灵活,响应更迅速,维运更方便,具有更稳定的性能。但是,由于缺少更大用户数量的高并发测试,系统还需更多资源来进一步完善性能以及功能业务的开发。