架构实战营 - 模块 3- 作业
前言
作业-外包学生管理系统的架构文档
1. 业务背景
该系统是面向学校的学生信息管理系统。总体业务目标是实现学生信息管理的系统化、规范化和自动化。
2. 约束和限制
项目服务于单所学校,师生人数大致在 1000 人左右。
数据存储需要做到稳定可靠。
对于外包项目,在满足系统稳定的同时,需要尽可能考虑低成本和高效交付。
3. 总体架构
3.1 架构分析
3.1.1 高性能
日均最高 UV 预估为 1000,日均 PV 预估大致在 1W 左右。
基于以上的流量预估,以及预期学校的师生规模,峰值流量初步确定在 200QPS 以内。
本系统非实时交互系统,只要系统不宕机,可正常提供服务即可
基于以上,单应用服务器可满足需要,无需部署集群环境。
3.1.2 高可用
因为是学校使用的管理系统,在确保系统稳定的前提下,该系统对于服务高可用的要求较低,基本保证在正常教学时间内系统可用即可。
该系统对于数据的可靠性要求很高,需要确保数据安全存储,不丢失。
基于以上,需要考虑数据高可用需求,故数据库服务器采用主备架构。
3.1.3 可扩展
外包系统,在短期内,暂时对扩展性要求更高。
3.1.4 安全
因为是学校内部系统,可考虑进行内网部署,降低安全风险。
3.2 总体架构
1、Nginx 实现负载均衡和流量分发。
2、按照业务拆分为三个子系统:学生子系统、课程子系统和权限子系统。
3、数据库使用 MySQL,采用主备架构,出现问题时,可紧急进行主备切换,确保数据不丢失。
4. 详细设计
4.1 核心功能
4.1.1 账号注册
学生在注册页面填入基本信息:学号、姓名、密码、邮箱、手机号等
创建新账户,发送邮件或短信验证邮箱、手机号的有效性
管理员对学生提交的注册信息进行审核
审核通过后,账号激活并通知学生
4.1.2 登陆
学生在登陆页输入学号和密码
权限子系统对密码进行验证
权限子系统验证通过后创建 session 等
4.1.3 发布新课程
管理员通过课程子系统录入课程,信息包括时间、人数、地点、任课老师等
课程信息确认无误后进行发布
4.1.4 选课
学生登陆后,通过课程子系统查询可选课程
学生选择一门课并提交
课程子系统对提交的选课信息进行必要的校验(如课程该学生是否可选,课程库存是否有剩余等),确认无误后,将学生加入课程对应的班级信息中
4.1.5 发布考试
教师登陆系统,课程子系统列出该教师正在教授的课程列表
教师挑选一门课程,提交进行考试处理
课程子系统检索题库,并自动生成试卷
教师确认试卷内容,并打印
4.1.6 评分判定
管理员将学生试卷扫描入管理系统
老师针对学生试卷进行打分
打分结果存入学生成绩表中
4.2 关键设计
4.2.1 MySQL 主备机制
数据处理只针对 MySQL 主库进行操作
通过数据库主备数据同步机制,进行数据的主备库同步
一旦主库出现问题,可由系统或人工进行主备库的切换
4.3 设计规范
业务子系统采用 Spring Boot 作为开发框架;
子系统间消息交互采用 HTTPS 协议,数据采用 JSON 格式
MySQL 使用 Innodb 存储引擎
5. 质量设计
5.1
核心服务均需提交单元测试
数据可做全链路监控
完备的日志记录,便于问题定位
关键节点具备完备的告警处理逻辑
5.2 成本
6 台服务器:3 台业务服务器+2 台 MySQL 服务器+1 台 Nginx 服务器
公网域名服务
短信服务费等
6. 演进规划
该外包项目目前只签订一期合同,不许考虑后续规划
评论