架构训练营模块 3 作业
外包学生管理系统架构设计
前言
本文是针对公司新接学生管理系统做的新系统架构。
1. 业务背景
学生数量增多,需要处理的信息越来越大,花费了教师大量时间,单处理效率低下,投资方要求管理系统可以规范管理,提升效率,科学性的统计信息及保证信息的准确度。
系统主要解决学生信息关系的系统化,规范化,自动化,并能够管理学生信息,实现学生选课,成绩查询等功能。
性能问题:学校的学生人数大致上几年内是不会有太大变化的,当前只需要能够支持所有学生使用即可,未来可以通过水平扩展进行性能扩展。
基于以上背景我们设计了以 nginx 做反向代理,业务功能按学生系统,课程系统,权限系统拆分,数据库使用 Mysql 主备的形式。
2. 约束和限制
1.投资方投入资金不多
2.系统尽快上线
3.数据库使用 mysql 主备
4.使用 nginx 做反向代理负载均衡
3. 总体架构
3.1 架构分析
高可用:系统高可用要求不高
高性能:学生人数固定,系统的瞬时并发并不高,不需要太高的性能。
3.2 总体架构
1.采用数据集中架构,使用 mysql 主备架构,主备数据增强半同步复制。
2.正常情况下主 mysql 复制读写。
3.采用 nginx 根据 url(如学生为/students/)指定路由和负载均衡,nginx 使用单点部署。
4.学生子系统,课程子系统,权限子系统分别部署集群服务器,
5.子系统之间通过 http 协议进行交互,采用 json 数据格式。
4. 详细设计
4.1 核心功能
4.1.1 权限管理流程:高权限者为低权限者分配账号和角色,高权限者为低权限者对角色分配权限。
4.1.2 鉴权流程:用户操作判断角色,判断角色是否具有该权限,有则可继续执行,否则不允许执行。
4.1.3 个人信息管理:高权限者可以管理低权限者信息(如修改成绩),低权限者只能管理自己的个人信息(修改头像,上传文件等)
4.1.4 课程录入管理:教师可以录入自己课目,学生可以观看对应的课目。
4.1.5 排课功能:教师可以排自己的课程时间
4.1.6 选课功能:学生可以预约可选教师的课程
4.1.7 教材选择:管理员可以指定教师授课使用的教材
4.1.8 题库管理:教师可以录入题库,生成试卷并下载
4.2 关键设计
数据可靠性:数据都存储在 mysql 且使用主备增强半同步复制不存在数据可靠性问题。
系统高可用:系统不需要保证高可用
系统扩展性:数据系统可以用过分库分表进行扩展,应用系统可以通过集群增加机器的方式扩展。
系统安全:内网系统,通过鉴权和防火墙可以保证系统安全
系统运维:监控数据库及应用宕机即可。
4.3 设计规范
1.服务使用 springboot 开发,使用 json 通过 http 协议传输
2.mysql 使用 innodb,事务隔离级别为默认等级
3.数据格式为{head{},body{},common{}},其中 head 放置访问硬件之类的数据, common 放置用户信息及系统信息,body 放置具体的数据
4.定制系统异常类,系统异常统一处理
5. 质量设计
1. 系统成本:低
2. 系统可测试性:中
3. 系统可维护性:高
4. 系统可观测性:
6. 演进规划
1.系统一期:实现权限子系统
2.系统二期:实现学生子系统
3.系统三期:实现课程子系统
4.系统四期:部署上线
版权声明: 本文为 InfoQ 作者【慕溶枫】的原创文章。
原文链接:【http://xie.infoq.cn/article/6e4326e3d53d08ecd94e946a5】。未经作者许可,禁止转载。
评论