在线教育平台服务端基于Spring Boot构建,采用Spring Cloud微服务框架。
持久层:MySQL、MongoDB、Redis、ElasticSearch
数据访问层:使用Spring Data JPA 、Mybatis、Spring Data Mongodb等
业务层:Spring IOC、Aop事务控制、Spring Task任务调度、Feign、Ribbon、Spring AMQP、Spring Data Redis等。
控制层:Spring MVC、FastJSON、RestTemplate、Spring Security Oauth2+JWT等
微服务治理:Eureka、Zuul、Hystrix、Spring Cloud Config等
1.1 CMS页面管理微服务( xc-service-manage-cms,xc-service-manage-cms-client )
CMS(Content Management System)即内容管理系统,本项目对CMS系统的定位是对各各网站(子站点)页面的管理,本项目的CMS系统不去管理每个子网站的全部资源,比如:图片、CSS、html页面等,主要管理由于运营需要而经常变动的页面,从而满足根据运营需要快速开发、上线的需求。
功能包括:
1、站点管理,站点就是本项目各各子网站,站点信息包括:站点名称、站点域名、端口、服务器物理路径等。 2、模板管理,由于要对页面进行静态化,使用freemarker引擎技术,所以需要定义模板。 3、页面管理,包括:页面添加、页面修改、页面删除等操作。 4、页面预览,对页面静态化,在浏览器预览页面静态化内容。 5、页面发布,将页面静态化后发布到所属站点服务器,通过rabbitmq实现页面的解耦发布。
1.2 媒资管理微服务( xc-service-manage-media , xc-service-manage-media-processor )
功能需求
每个教学机构都可以在媒资系统管理自己的教学资源,包括:视频、教案等文件。
-
媒资管理的主要管理对象是课程录播视频,包括:媒资文件的查询、视频上传、视频删除、视频处理等。
- 媒资查询:教学机构查询自己所拥有的媒体文件。
- 视频上传:将用户线下录制的教学视频上传到媒资系统。
- 视频处理:视频上传成功,系统自动对视频进行编码处理。
- 视频删除 :如果该视频已不再使用,可以从媒资系统删除
-
本项目采用 HLS 技术实现视频点播
1、使用FFmpeg对视频进行编码处理,生成m3u8文件及ts文件
2、使用Nginx作为媒体服务器
3、客户端使用video.js播放视频
1.3搜索微服务( xc-service-search )
1.4 文件上传微服务( xc-service-oss-filesystem )
使用阿里云oss服务实现图片上传的需求
1.5 网关微服务( xc-govern-gateway )
架构图
不管是来自于客户端(PC或移动端)的请求,还是服务内部调用。一切对服务的请求都会经过Zuul这个网关,然后再由网关来实现 鉴权、动态路由等等操作。Zuul就是我们服务的统一入口。
服务网关是微服务架构中一个不可或缺的部分。通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由、均衡负载功能之外,它还具备了权限控制
等功能。为微服务架构提供了前门保护的作用,同时将权限控制这些较重的非业务逻辑内容迁移到服务路由层面,使得服务集群主体能够具备更高的可复用性和可测试性。
主要功能
身份认证与安全:识别每个资源的验证要求,并拒绝那些与要求不相符的请求。(对jwt鉴权)
动态路由:动态地将请求路由到不同的后端集群。
负载均衡(loadBalance)
1.6 授权中心微服务( xc-service-ucenter-auth )
Spring security + Oauth2完成用户认证及用户授权
认证授权流程如下: 1、用户请求认证服务完成身份认证。 2、认证服务下发用户身份令牌和JWT令牌,拥有身份令牌表示身份合法,Jwt令牌用于完成授权。 3、用户携带jwt令牌请求资源服务。 4、网关校验用户身份令牌的合法,不合法表示用户没有登录,如果合法则放行继续访问。 5、资源服务获取jwt令牌,根据jwt令牌完成授权
1.7 注册中心( xc-govern-center )
基本架构
- Eureka:就是服务注册中心(可以是一个集群),对外暴露自己的地址
- 提供者:启动后向Eureka注册自己信息(地址,提供什么服务)
- 消费者:向Eureka订阅服务,Eureka会将对应服务的所有提供者地址列表发送给消费者,并且定期更新
- 心跳(续约):提供者定期通过http方式向Eureka刷新自己的状态
主要功能就是对各种服务进行管理。
在虚拟机中通过docker进行以下中间件与数据库的配置:
- ES:搜索
- nginx:反向代理
- Rabbitmq:数据同步,消息中间件
- Redis:缓存
- mongodb:后端数据库
并将配置文件中所有和虚拟机相关的ip进行修改
本机中需要的配置:
- nginx:前端所有请求统一代理到网关,域名的反向代理
- host:实现域名访问
封存在config文件夹下,包括项目中最终版本的nginx.conf,以及本项目所配套的完整mongodb和mysql数据库