架构实战营 模块三 作业
写出外包学生管理系统的架构文档
【作业要求】
1. 基于模块 1 第 5 课 P15 页的外包学生管理系统备选架构 1(见下 1 页),写出完整的架构设计文档;
2. 注意不是备选架构文档,而是最终落地的详细架构设计文档;
3. 无需考虑数据库表设计,因为表设计是方案设计阶段做的,不是架构设计阶段做的;
---------------------------------------------------------------------
1. 业务背景
随着学校的规模的不断扩大,学生数量的增加,需要处理的信息也日趋增大。不仅花费大量的教师资源,处理效率也十分低下。
为提高学生管理的管理水平,优化资源,尽可能降低管理成本,学校决定制作一个学生管理系统。
学生管理系统是从学生管理现状出发,根据学生管理的新要求进行开发设计的,它需要解决学生信息管理数据信息量大修改不方便,对一系列数据进行分析时花费时间长等问题,帮助学生管理人员有效管理学生信息。
因此学生信息管理系统可以通过系统规范化地管理、科学性统计和快速查询、修改、增加、删除等,提高信息的准确度以及日常管理的工作效率。
本系统主要是应用于学生各类信息的管理,总体任务是实现学生信息关系的系统化、规范化、自动化,其主要任务是统计学生各类信息进行日常管理,如查询、修改、增加、删除、以及学生选课、成绩的查询等功能设计的管理系统。
2. 约束和限制
学校经费有限,只能提供 4 台服务器。(1 台 nginx,1 台应用服务器,2 台数据库)
学校经费有限,只能有限的预算,经过核算,约 3-4 人,1 季度的开发周期。
学校约有 4000 的在校学生。
3. 总体架构
3.1 架构分析
高性能:不需要考虑,由于在校学生只有 4000 人左右,算上教职人员,一共 4000 到 4300 左右。每秒 QPS 基本可以忽略不计。
高可用:不需要考虑,学生和老师不会每时每刻在使用这个系统,真发生宕机了,对于恢复时间的容忍度应该是很高的。
高可靠:录入的数据需要有一定的可靠性,不能容忍全部丢失,因此需要对数据有备份。因此,设计了 mysql 的主备架构。
3.2 总体架构
数据库采用 mysql 主备架构。一台主 MySQL 和一台备 MySQL。备机正常情况下不对外服务。
业务模块由 3 个子系统组成,课程子系统、学生子系统、权限子系统,全部部署到一台业务服务器上。
Nginx 作为反向代理,http 缓存服务器。负责把请求的路径映射到对应的业务子系统上,并对一些静态页面做缓存。
4. 详细设计
4.1 核心功能
4.1.1 权限子系统
包含账号分配、系统登录、权限管理功能。
mysql 负责存储用户的账户信息包括密码,身份信息,权限信息。
由权限子系统的 API 服务层负责增删查改这些信息。并针对整个系统的所有请求进行身份验证及权限校验,会使用应用内本地缓存,来提高校验速度。
4.1.2 课程子系统
包含课程管理、考试管理功能。
mysql 负责存储课程信息包括教材信息,课程排课信息,课程的考试信息,平时成绩,以及学生的考试成绩。
由课程子系统的 API 提供相关的增删查改功能。
4.1.3 学生子系统
包含学生选课、学生上传、下载文件功能。
mysql 负责存储学生的选课信息,学生上传的文件路径,具体文件直接存储在业务服务器上。
通过权限子系统识别用户是否有权限去选课等。
通过调用课程子系统的 API 来得到课程和考试的基础信息。
4.2 关键设计
由于学生管理系统属于常见系统,并且不涉及特别业务,所以无关键设计,每个模块的实现参考市面上的常规产品级实践。
4.3 设计规范
使用 Spring MVC 作为主要开发框架,MyBatis 作为 mysql 的 DAO 层, 以 Restful API 规范来设计对外暴露的 API 路径和管理后台的路径。
5. 质量设计
可测试性:系统异常都要捕获,并且使用 Log 记录异常日志。
可维护性: 不需要考虑,由于不是大型互联网系统,不用专门设计运维工具,直接起停服务器即可。
可观测性:增加用户操作日志模块,用于查看所有人员的重要操作记录。
6. 演进规划
第 2 期,当有更多师生在系统上使用更多功能时,考虑使系统支持高可用。
第 3 期,当要把该系统 saas 化后,则需要考虑使系统支持高性能。
版权声明: 本文为 InfoQ 作者【一雄】的原创文章。
原文链接:【http://xie.infoq.cn/article/42cbeeb9737c090c16210678b】。文章转载请联系作者。
评论