架构实战营模块四作业
前言
本文档是学生管理系统的架构设计,用于指导开发人员后续的开发、测试和运维工作。
词汇表
Reactor:网络编程模型
1. 业务背景
随着学生管理功能的逐渐增多,学生和老师对管理系统的使用日渐频繁,原有的单体架构的学生管理系统出现了性能问题,耦合问题和效率问题。
基于以上原因,项目需要对系统进行功能拆分,将目前个一个服务改为多个服务。
2. 约束和限制
项目需要在三个月内完成,可投入人力为 3 人,需求方对项目质量要求较高,不能出现明显的 bug。
3. 总体架构
3.1 架构分析
高可用:可以每个子系统部署多个服务实例,通过 nginx 进行随机负载均衡,保证在某个服务实例挂掉的情况下,其他服务实例依然能够对外提供服务
可扩展:可以方便的增加其他子系统功能,也可以对已有子系统增加更多的服务实例,整个系统的扩展性好
高性能:将系统拆分为多个子系统后,对每个子系统的访问压力变小,可以提高整个系统的性能
3.2 总体架构
1) 采用数据集中集群的架构,多个子系统复用同一个数据库
2) 包含一台主 MySQL 和一台备 MySQL,主备数据复制
3) 客户端采取轮询的策略写入和读取消息
4. 详细设计
4.1 核心功能
学生子系统负责对学生基本信息的管理
课程子系统负责对课程的管理
权限子系统负责对不同角色不同权限的区分
4.2 关键设计
权限子系统设计:角色分为系统管理员、校长、系主任、授课老师、学生,不同的角色对应不同的数据权限
学生子系统设计:学生子系统仅维护学生的基本信息,包括和授课老师的关联信息,与课程信息的交互通过统一数据库完成
课程子系统设计:课程子系统仅提供课程相关的接口,与学生信息的交互通过统一数据库完成
4.3 设计规范
项目采用 Spring Boot 开发,使用内置 Tomcat 容器,Spring MVC 分层服务
MySQL 使用功能 Innodb 存储银清
请求格式为:xxx
返回格式为:xxx
5. 质量设计
可维护行:提供后台管理页面,方便对角色权限进行管理;
可测试性:方法尽量简短方便单元测试,对外提供标准 Restful API,可以以子系统为单位进行功能测试
可观测性:打印详细日志;增加审计接口
成本考虑:数据库
6. 演进规划
后续可以增加更多的子系统
如果业务量继续增加,可以考虑拆分数据库,每一个子系统一个数据库,但这样会涉及到子系统之间的交互
评论