前言
此项目基于学生管理系统的现有需求,按照已有的架构设计规范来制定完整的详细的架构设计方案,以备后期方案设计筹划作为参考依据。
词汇表
Reactor: 网络编程模式
Netty: 开源的网络编程框架
Nginx:是一款自由的、开源的、高性能的 HTTP 服务器和反向代理服务器;同时也是一个 IMAP、POP3、SMTP 代理服务器;Nginx 可以作为一个 HTTP 服务器进行网站的发布处理,另外 Nginx 可以作为反向代理进行负载均衡的实现。
Redis:是最受欢迎的 NoSQL 数据库之一,它是一个 key-value 存储系统,及内存高速缓存数据库。
MySQL:是一个数据库管理系统,也是一个关系数据库。
MongoDB:是一个基于分布式文件存储、面向文档的 NoSQL 数据库,由 C++编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系型数据库的,它支持的数据结构非常松散,是一种类似 json 的 BSON 格式。
负载均衡:是高可用网络基础架构的关键组件,通常用于将工作负载分布到多个服务器来提高网站、应用、数据库或其他服务的性能和可靠性
主备机制:一种数据同步备份机制,通常主机支持读写操作,备机只进行读操作,且在主机发生故障时,备机可以切换为主机,实现主机的读写操作功能。
1. 业务背景
随着学校的规模的不断扩大,学生数量的增加,需要处理的信息也日趋增大。不仅花费大量的教师资源,处理效率也十分低下。在此背景下,为了提高学生管理的管理水平,优化资源,尽可能降低管理成本成为学生管理的新课题,因此我们针对性的开发设计出一套学生管理系统,该系统主要实现如下目标:
1)从学生管理现状和新要求出发,解决学生信息管理数据信息量大修改不方便,对一系列数据进行分析时花费时间长等问题,帮助学生管理人员有效管理学生信息。
2)可以通过系统规范化地管理、科学性统计和快速查询、修改、增加、删除等,提高信息的准确度以及日常管理的工作效率。
3)总体任务是实现学生信息关系的系统化、规范化、自动化,其主要任务是统计学生各类信息进行日常管理,如查询、修改、增加、删除、以及学生选课、成绩的查询等功能设计的管理系统。
2. 约束和限制
1)开发语言选择 C#
2) 成本限制在 XXX 元以内
3)开发周期在 XX 年 XX 月 XX 日完成发布上线
4)数据库限制使用 SqlServer
5)开发方式采用敏捷开发方式推进
6)系统数据不能丢失
3. 总体架构
系统架构黑盒图
系统架构图
3.1 架构分析
3.1.1 高可用
对于学生管理系统来说,如果消息丢了,出现学生相关信息没有了,会导致学生信息关键数据丢失,无法正常实现考试、学籍和课程相关业务的开展,情况还是比较严重的,因此该系统的设计需要考虑高可用性,数据设计需要有备份机制,数据丢失后可以进行恢复。
3.1.2 高性能
学生管理系统在正常运营使用过程中,一般不会出现太大的同时高并发高性能方面的业务特性,因此在计算高性能和存储高性能上可以暂不用考虑。满足一定高峰期数据并发处理的业务情况就行,比如开学某阶段的选课、考试结束后集中时间段查成绩等等。
3.1.3 可扩展
学生管理系统在可扩展方面,没有过多的需求,当前系统架构即可支持上千量的学生使用,如果后续要扩展直接进行服务器的升级即可。
综合来看,学生管理系统需要高可用性,包括消息写入、消息存储、消息读取都需要保证高可用性。
3.2 总体架构
1)采用数据分散集群的架构,集群中的服务器进行分组,每个分组存储一部分消息数据。
2)每个分组包含一台主 SqlServer 和一台备 SqlServer ,分组内主备数据复制,分组间数据不同步。
3)正常情况下,分组内的主服务器对外提供消息写入和消息读取服务,备服务器不对外提供服务;主服务 4)器宕机的情况下,备服务器对外提供消息读取的服务。
5)客户端采取轮询的策略写入和读取消息。
4. 详细设计
客户端 Role 设计
1. 客户端采用 C#语言开发,基于 Nacy 实现与服务端交互
客户端和服务器的 Relation 设计
1. 客户端与服务端采用 TCP 连接,采用 JSON 传递数据。
2. 为了兼容非 windows 系统,服务端同时提供 HTTP 接口。
服务器 Role 设计
1. 服务器基于 Nacy 开发,采用 Nacy 通信网络模型。
2. 两台服务器组成一个 sharding,整个系统可以多个 sharding,每个 sharding 包含一主一从两台服务器(可以对比 MongoDB shard)。
3. 主服务器提供消息读写操作,从服务器只提供消息读取操作。4. 服务器基于 ZooKeeper 进行主从切换。
MySQL 的 Role 和 Relation 设计
1. 采用 SqlServer 主从同步。
2. 每个消息队列对应一个表。
3. 消息表最多存储 30 天内的消息,过期的自动清除。
4. 直接用 SqlServer 的主从复制来实现数据复制
4.1 核心功能
4.1.1 学生注册流程
1)学生通过 WEB 端输入关键注册信息
2) 数据通过负载均衡分发到对应的服务器
3)数据通过 HTTP 方式进行发送传输
4)数据写入主机数据库中
5)主机数据库将数据同步到备机数据库
4.1.2 选课管理设计
1)学生账号进入选课管理页面
2) 选择对应的课程加入到我的课程里,并点击提交
3)数据在选课管理系统运行处理后返回,处理结果,课程选取成功
4) 对应的数据写入主机数据库中,并与学生账号进行关联
5)主机数据库将数据同步到备机数据库
4.1.3 权限管理设计
1)系统使用者有学生、教师、管理员、辅导员,每个角色有不同的权限功能。
2)学生、教师、辅导员可以注册、登录、修改自己的信息,但注册信息需要管理员审核通过。
3)学生只能查看自己的成绩,教师可以修改学生的成绩。
4)辅导员可以查看学生的信息,可以设置学生的奖惩信息。
5)教师可以上传考试试题,学生可以做题。
4.2 关键设计
学生管理系统的关键设计在数据的高可用,既要保证数据的存储可靠性,也要保证数据的读取可靠性:
1)数据存储在 SqlServer 中,分别有一主一备两台 SqlServer 服务器,SqlServer 服务器之间复制消息以保证消息存储高可用。如果主备间出现复制延迟,恰好此时 SqlServer 主服务器宕机导致数据无法恢复,则部分消息会永久丢失,这种情况不做针对性设计,DBA 需要对主备间的复制延迟进行监控,当复制延迟超过 30 秒的时候需要及时告警并进行处理。
2)当主机在运营过程中,出现宕机的情况,导致数据无法读写,则系统会自动启用备机进行恢复数据的读取,但是此时不能对数据库进行写操作,满足在业务端的读操作。
4.3 设计规范
1)负责均衡:Nginx 反向代理
2)访问缓存:Redis 缓存
3)交互协议:https 通信协议
4) 数据格式:JSON 格式
5) java:标准开发语言
6)技术框架:使用 Spring Boot 来开发,实现机制前后端分离
7)数据存储:Mysql 关系型数据库
8)数据同步:主备机制
5. 质量设计
5.1 可测试性
系统实现后首先通过内部的自测,保证系统整体功能的可用性的前提下,再让业务方试运营一段时间后,以试代测试,出现问题快速修复。
5.2 可维护性
可让外包人员保证基础的功能维护,定期对数据及安全性进行维护。
5.3 可观测性
系统监控设计要考虑,报考日志监控,操作监控
5.4 成本
成本结合项目预算进行合理的配置
6. 演进规划
1、第一期采用单机系统服务进行私有化部署,实现整体功能的可用性。
2、第二期业务壮大后,可以采用多机集群或云平台的方式来提高系统的性能和服务功能。