🚩 写在前面
我为什么要花时间去写这个笔记?
由于在学习该项目的过程中发现了原讲义存在的一些问题,所以该笔记基于「学成在线」微服务项目 PDF
讲义进行编写,并且投入了时间去优化了笔记的格式、代码的高亮、重点的标记等。
以及一些原讲义中所描述的一些知识点使我无法理解的内容,我会对这些内容的表达方式进行修改或者提出一些问题,并且用我自己所理解的一些想法去重新的解释这个问题。
总结一下原 PDF
讲义中已知的一些问题:
- 从
PDF
中复制出来的代码,部分特殊符号的编码有问题,并且不易被发现,例如横杠-
,从PDF直接复制出来的话是无法运行的。 - 有时候一些重复且简单的代码,我们需要直接从讲义中直接复制,而部分
PDF
编辑器复制出来的代码格式可能会变乱,且PDF中没有代码高亮,代码可阅读性差,并且复制出来时会有代码缩进错乱等问题。 - 部分内容是重点但在讲义中只是简单的描述,这并不方便我们后期回顾该课程的知识点,所以我在一些重点的内容上加上了更多的解释。
如有不足的地方,欢迎补充、填坑。
😎 知识点概览
- 本章节将对【学成在线】项目的知识点进行回顾、总结、梳理。
项目代码
后端代码:https://gitee.com/codeyee/xuecheng-project-services
前端代码:https://gitee.com/codeyee/xuecheng-project-ui
完整的数据库文件以及 nginx
配置已上传至后端代码工程内
目录
内容会比较多,小伙伴们可以根据目录进行按需查阅。
文章目录
一、学成在线是一个什么样的项目?
0x01 项目背景
受互联网+概念的催化,当今中国在线教育市场的发展可谓是百花齐放、如火如荼。 按照市场领域细分为:学前教
育、K12教育、高等 育、留学教育、职业教育、语言教育、兴趣教育以及综合平台,其中,职业教育和语言教育
的市场优势突出。
学成在线借鉴了MOOC
(大型开放式网络课程,即MOOC(massive open online courses))的设计思想,是一
个提供IT职业课程在线学习的平台,它为即将和已经加入IT领域的技术人才提供在线学习服务,用户通过在线学
习、在线练习、在线考试等学习内容,最终掌握所学的IT技能,并能在工作中熟练应用。
当前市场的在线教育模式多种多样,包括:B2C
、C2C
、B2B2C
等业务模式,学成在线采用 B2B2C
业务模式,即向企业或个人提供在线教育平台和学生完成教学活动,市场上类似的平台有:网易云课堂、腾讯课堂等,学成在线的特点是IT职业课程在线教学。
0x02 功能模块
学成在线是一个在线教育平台,提供IT职业课程在线学习,平台包括:门户、学习中心、教学管理中心、系统管理
中心、社交系统等子系统。
项目的功能架构如下图:
门户是整个平台的入口,功能包括:
- 门户首页
- 注册/登录
- 课程搜索
- 职业规划
- 客服等
学习中心为用户提供在线学习服务,包括:
- 我的课程
- 视频点播
- 视频直播
- 在线考试
- 在线答疑
- 学习统计等功能
教学管理中心为教育机构或个人讲师提供教学管理功能,包括:
- 课程管理
- 媒资管理
- 考试管理
- 问答管理等功能
系统管理中心提供系统参数配置
- CMS
- 数据字典
- 分类管理等功能
0x03 技术架构
项目采用前后端分离的技术架构,前端采用vue.js构建,服务端采用 Spring Cloud Netflix
微服务架构,系统分为用户层、CDN
、负载均衡、前端UI、微服务层、数据层、接口层 及 DevOps
等部分组成,下图是完整的技术架构图:
业务流程举例:
1、用户可以通过pc、手机等客户端访问系统进行在线学习。
2、 系统应用 CDN
技术,对一些 图片
、CSS样式文件
、视频
等资源从 CDN
调度访问。
3、所有的请求全部经过负载均衡器。
4、对于PC、H5等客户端请求,首先请求UI层,渲染用户界面。
5、客户端UI请求服务层获取进行具体的业务操作。
6、服务层将数据持久化到数据库
下图是技术架构简图:
1、用户层,用户层描述了本系统所支持的客户端用户有哪些,本项目目前为各用户提供服务,包括H5、PC、Android和IOS等。
2、CDN
全称 Content Delivery Network
,即内容分发网络,本系统所有静态资源全部通过 CDN
加速来提高访问速度。系统静态资源包括:html页面、js文件、css文件、image图片、pdf和ppt及doc教学文档、video视频等
3、负载均衡 系统的CDN层、UI层、服务层及数据层均设置了负载均衡服务,系统采用LVS+Nginx实现负载均衡均
衡。
4、UI
层 UI层描述了系统向pc用户、app用户、h5用户提供的产品界面。本项目在 PC
和 H5
端采用vue.js+elementUI
实现。
5、微服务层将系统服务分类三类:前端服务、后端服务及系统服务。 前端服务:主要为学习用户提供学习服务。
后端服务:主要为管理用户提供教学管理服务。 系统服务:公共服务,为系统的所有微服务提供公共服务功能
6、外部系统接口 包括如下接口:
- 第三方登录接口,如QQ、微博、微信等。
- 支付宝、微信支付接口
- 短信接口 (阿里大于)
- 邮件接口,通过smpt邮件服务器对外发送电子邮件。
- 微信公众号
- 点播、直播。
OSS
存储- CDN,使用最阿里云CDN服务加速视频访问速度。
7、DevOps
提供了本系统开发、运营、维护支撑的系统,包括如下内容:
- Eureka 服务治理中心:提供服务治理服务,包括:服务注册、服务获取等。
- Docker 容器化部署服务:将本系统所有服务采用容器化部署方式。
- Maven 项目管理工具:提供管理项目所有的
Java
包依赖、项目工程打包服务。 - Git/GitLab 代码管理服务:提供
git
代码管理服务。 - Spring Boot Admin 服务健康监控:监控微服务的健康状态、会话数量、并发数等
二、项目采用什么技术架构?
0x01 微服务技术栈
所有微服务基于 Spring Boot
、Spring Cloud Netflix
构建
-
控制层
Spring MVC
、Spring Security Oauth2
、Swagger
-
业务层
事务控制:
Spring
任务处理:
Spring Task
数据缓存:
Spring Data Redis
消息队列:
Spring Rabbit Template
搜索:
Elasticsearch
-
持久层
操作 MySQL:
MyBatis
、Druid
连接池、Spring Data JPA
操作MongoDB:
Spring Data Mongodb
-
数据层
采用
MySQL
和MongoDb
存储数据,MySQL
存储用户、课程等系统核心信息,MongoDB
存储cms
、配置信息。等认证模块使用redis
储存用户的令牌信息
0x02 接口定义规范
项目架构设立接口层,接口层使用 swagger
注解描述接口的内容,接口定义规范如下:
请求
GET
请求时,前端请求 key/value 串,SpringMVC采用基本数据类型(String、Integer等)或自定义类型接收。POST
请求时,前端请Form
表单数据(application/x-www-form-urlencoded)和Json
数据(ContentType=application/json)、多部件类型数据(multipart/form-data),对于Json数据SpringMVC使用
@RequestBody
注解解析请求的json
数据。
响应
-
响应结果统一信息为:是否成功、操作代码、提示信息及自定义数据。
-
响应结果统一格式为
json
。
0x03 微服务注册中心
两台 Eureka Server
互相注册,组成高可用。
微服务向 Eureka Server
注册自己,并在远程调用时从微服务发现目标服务地址。