本在线教育平台采用微服务架构,将系统拆分为用户服务、课程服务、订单服务、学习服务、教师服务等独立部署的微服务模块。各服务通过轻量级通信协议交互,支持独立开发、测试与部署。
项目遵循以下设计原则:
java
// 依赖反转示例:订单服务依赖支付接口public class OrderService {
private final PaymentService paymentService; // 依赖抽象接口而非实现类
public OrderService(PaymentService paymentService) {
this.paymentService = paymentService;
}
public void createOrder(OrderRequest request) {
// 订单创建逻辑
paymentService.processPayment(request.getPaymentInfo()); // 调用支付接口
}}
架构类型 |
特点 |
适用场景 |
单体架构 |
所有功能打包为单一应用 |
小型教育平台(用户量 < 1 万)、快速原型开发 |
SOA |
基于服务总线(ESB)的集中式架构 |
中型企业教育系统,需集成 legacy 系统 |
微服务 |
去中心化,服务独立部署 |
大型在线教育平台(用户量 > 100 万),需高扩展性与迭代效率 |
维度 |
单体架构 |
SOA |
微服务 |
模块划分 |
单一代码库 |
基于 ESB 的服务组件 |
独立服务进程 |
通信方式 |
进程内调用 |
重量级协议(SOAP) |
轻量级协议(REST / 消息队列) |
部署复杂度 |
简单 |
中等 |
高(需 Docker/K8s) |
运维成本 |
低 |
中 |
高(需分布式监控) |
plaintext
+----------------+ +----------------+ +----------------+
| 学生用户 | | 教师用户 | | 系统管理员 |
+----------------+ +----------------+ +----------------+
| | | | | | | | |
| | | | | | | | |
v v v v v v v v v
+----------------+ +----------------+ +----------------+
| 浏览课程 | | 发布课程 | | 审核教师 |
+----------------+ +----------------+ +----------------+
| 购买课程 | | 布置作业 | | 管理系统配置 |
+----------------+ +----------------+ +----------------+
| 观看课程 | | 批改作业 | | 监控系统状态 |
+----------------+ +----------------+ +----------------+
| 提交作业 | | 查看收益 | | |
+----------------+ +----------------+ +----------------+
图 1-1 在线教育平台用例图
plaintext
在线教育平台
├── 用户端功能
│ ├── 课程浏览
│ ├── 课程购买
│ ├── 学习中心
│ └── 个人中心
├── 教师端功能
│ ├── 课程管理
│ ├── 作业管理
│ ├── 学生管理
│ └── 收益管理
└── 管理端功能
├── 用户管理
├── 教师审核
├── 课程审核
└── 数据监控
图 2-1 系统功能结构图
plaintext
+---------------------+ +---------------------+ +---------------------+
| 前端层 | | 网关层 | | 服务层 |
| (Vue.js + Nuxt.js) |<--->| (Spring Cloud Gateway)|<--->| - 用户服务 |
+---------------------+ +----------+----------+ | - 课程服务 |
| - 教师服务 |
+---------------------+ | - 认证授权 | | - 订单服务 |
| 数据层 |<--->+---------------------+ | - 运营服务 |
| (MySQL + Redis) | +---------------------+
+---------------------+ | | |
v v v
+---------------------+
| 中间件层 |
| - Nacos(注册/配置) |
| - RabbitMQ(消息) |
| - Redis(缓存) |
+---------------------+
图 2-2 系统架构设计图
字段名 |
类型 |
主外键 |
说明 |
user_id |
bigint |
主键 |
用户唯一标识 |
username |
varchar(50) |
用户名 |
|
password |
varchar(100) |
加密密码 |
|
|
varchar(50) |
邮箱 |
|
role |
tinyint |
角色(1 - 学生,2 - 教师,3 - 管理员) |
字段名 |
类型 |
主外键 |
说明 |
course_id |
bigint |
主键 |
课程唯一标识 |
course_name |
varchar(100) |
课程名称 |
|
teacher_id |
bigint |
外键 |
教师 ID(关联 user 表) |
price |
decimal(10,2) |
课程价格 |
|
category |
varchar(50) |
课程分类 |
字段名 |
类型 |
主外键 |
说明 |
order_id |
bigint |
主键 |
订单唯一标识 |
user_id |
bigint |
外键 |
用户 ID(关联 user 表) |
course_id |
bigint |
外键 |
课程 ID(关联 course 表) |
order_time |
datetime |
下单时间 |
|
status |
tinyint |
订单状态(1 - 已支付,2 - 已退款) |
plaintext
+----------------+ +----------------+ +----------------+
| user | | course | | order |
+----------------+ +----------------+ +----------------+
| - user_id: bigint | | - course_id: bigint | | - order_id: bigint |
| - username: varchar| | - course_name: varchar| | - user_id: bigint |
| - role: tinyint | | - teacher_id: bigint | | - course_id: bigint|
| | | - price: decimal | | - order_time: datetime|
+----------------+ +----------------+ +----------------+
^ ^ ^
| | |
+-----------------------+-----------------------+
| |
+---------------------------------+
|
1 M
user ---------- order
M 1
course -------- order
图 3-1 系统实体关系图
[1] 周志明。深入理解 Java 虚拟机:JVM 高级特性与最佳实践 [M]. 机械工业出版社,2019.
[2] Newman S. 微服务架构设计模式 [M]. 人民邮电出版社,2016.
[3] 王宏博,等。基于 Spring Cloud 的微服务架构实践 [J]. 计算机应用,2020, 40 (5):1-8.
[4] 李艳鹏。微服务架构在在线教育平台中的应用 [J]. 软件导刊,2021, 20 (3):102-106.
[5] 中华人民共和国国家标准化管理委员会. GB/T 7714-2015 信息与文献 参考文献著录规则 [S]. 北京:中国标准出版社,2015.
[6] 刘军。分布式系统原理与范型 [M]. 机械工业出版社,2017.
[7] 阿里巴巴中间件团队. Spring Cloud Alibaba 微服务开发从入门到精通 [M]. 电子工业出版社,2020.
[8] 王健宗,等。微服务治理:体系、架构及实践 [M]. 机械工业出版社,2021.