1 项目介绍
项目名称为网络在线教育平台,项目后端使用spring cloud微服务框架,前端使用vue,分为后台管理和前台用户登录使用两部分,这里我们就其中主要部分进行分析。
实现:
视频点播
单点登录,(支持微信登录,阿里云短信服务,OSS)基于token实现
热门课程,(课程播放量,购买量)
高并发,(sentinel实现服务降级)
课程评论,
展望:
K8S集群化部署
优化数据库表结构
性能调优
2 软件设计方案
常见系统架构:
单体架构:
单体架构比较初级,典型的三级架构,前端(Web/手机端)+中间业务逻辑层+数据库层。这是一种典型的Java Spring mvc或者Python Drango框架的应用。其架构图如下所示:
特点;
复杂性高
技术债务
部署频率低
可靠性差
扩展能力受限
阻碍技术革新
分布式应用:
中级架构,分布式应用,中间层分布式+数据库分布式,是单体架构的并发扩展,将一个大的系统划分为多个业务模块,业务模块分别部署在不同的服务器上,各个业务模块之间通过接口进行数据交互。数据库也大量采用分布式数据库,如redis、ES、solor等。通过LVS/Nginx代理应用,将用户请求均衡的负载到不同的服务器上。其架构图如下所示:
特点:
降低了耦合度
责任清晰
扩展方便
部署方便
提高代码的复用性
系统交互使用远程通信,接口开发增大工作量
微服务架构:
微服务架构,主要是中间层分解,将系统拆分成很多小应用(微服务),微服务可以部署在不同的服务器上,也可以部署在相同的服务器不同的容器上。当应用的故障不会影响到其他应用,单应用的负载也不会影响到其他应用,其代表框架有Spring cloud、Dubbo等。其架构图如下所示:
特点:
易于维护和开发
单个微服务启动块
局部修改容易部署
数据栈不受限制
运维要求高
分布式固有的复杂性
接口调整成本变高
重复劳动
本项目采用微服务架构,开发框架基于spring cloud alibaba和springboot,前端使用vue,这里列出分布式使用技术栈
Nacos:服务注册中心,服务配置中心,服务总线
OpenFeign:服务调用(负载均衡)
Sentinel:服务降级
Gateway:网关
API接口:
API 定义了客户端与服务端数据交互的基本格式,包括客户端以什么样的格式请求,请求参数,服务端以什么样的格式响应,正确响应与错误响应的不同内容等。项目使用RestFullAPI风格接口,设计,使用技术为swagger,能生成对应的接口测试。在swagger中的接口如下,这里我们仅仅展示部分接口。
3 软件架构的不同试图
架构模式是在给定上下文的软件架构中,针对常发生问题的一种通用、复用的解决方案。架构模式类似于软件设计模式,但是范畴更广。软件架构模型是通过一组关键视图来描述的,同一个软件架构,由于选取的视角(Perspective)和抽象层次不同可以得到不同的视图,这样一组关键视图搭配起来可以完整地描述一个逻辑自洽的软件架构模型。一般来说,我们常用的几种视图有分解视图、依赖视图、泛化视图、执行视图、实现视图、部署视图和工作任务分配视图。
分解视图:
分解是构建软件架构模型的关键步骤,分解视图也是描述软件架构模型的关键视图,一般分解视图呈现为较为明晰的分解结构(breakdown structure)特点。
依赖视图:
依赖视图展现了软件模块之间的依赖关系。项目采用spring cloud alibaba微服务方式部署,网关采用gateway,各个微服务内部采用经典三层架构模式由此花出依赖视图如下
微服务内部三层架构
执行视图:
执行视图展示了系统运行时的时序结构特点,比如流程图、时序图等。执行视图中的每一个执行实体,一般称为组件(Component),都是不同于其他组件的执行实体。我们将每次请求执行流程进行总结如下:
实现视图:
项目结构 和各个模块之间的依赖如下:
父工程总结构
单个微服务结构:
部署视图:
微服务这里我们使用单个部署未对单个微服务进行集群化部署,mysql和redis使用集群化部署(双主双从,读写分离),部署均采用docker进行
数据库设置:
此处我们展示部分主要的内容:
4 运行环境和技术选型:
项目前端:vue
项目后端: spring cloud alibaba微服务架构
项目数据库: redis,mysql
项目部署: docker部署
由于云服务器大小限制,我们仅仅对redis和mysql进行集群化部署,微服务模块使用单一部署
5 项目核心工作机制:
项目前端分为前台和后台两个系统,前台做用户登录,可以在上面买课进行观看,也可以对课程进行评论,支持用户登录(密码或微信),token实现单点登录,等等功能
项目后台系统,支持系统通过权限分配的方式对后台进行管理:主要实现的功能是对课程,讲师的管理,以及对权限的管理。同时可以对前台的数据进行统计分析,这里使用远程调用微服务接口方式实现,前后台数据的联调(实际中数据,不会存储在同一数据库中)。