架构实战营模块 3 课后作业
前言
本文是外包学生管理系统架构设计文档,用于指导外包学生管理系统的开发、测试及运维。
词汇表
1. 业务背景
随着学校规模的不断扩大,学生数量的增加,需要处理的信息也日趋增大。不仅花费大量的老师资源,处理效率也十分低下。
为提高学生管理的管理水平,优化资源,尽可能降低管理成本成为学生管理的新课题,学生管理系统是从学生管理现状出发,根据学生管理的新要求进行开发设计的,它需要解决学生信息管理数据信息量大修改不方便,对一系列数据进行分析时花费时间长等问题,帮助学生管理人员有效管理学生信息。
因此学生信息管理系统可以通过系统规范地管理、科学性统计和快速查询、修改、增加、删除等,提高信息的准确度以及日常管理的工作效率。
本系统主要是应用于学生各类信息的管理,总体任务是实现学生信息关系的系统化、规范化、自动化、其主要任务是统计学生各类信息进行日常管理、如查询、修改、增加、删除、以及学生选课、成绩的查询等功能设计的管理系统。
2. 约束和限制
1、必须在 2021.09.30 号完成
2、成本不能超过 10 万
3、数据库采用 MySQL
4、必须使用 JAVA 语言
5、必须前后端分离
6、系统必须要无状态能支持横向扩展
3. 总体架构
3.1 架构分析
3.1.1、高可用
对于学生管理系统,不能让数据丢失,所以在存储层做一个主备近实时同步,保证数据有两份,一份数据丢失时,还有另一份可用的数据,同时在主宕机时,拉起从数据库,尽可能快速恢复,对外提供服务。
3.1.2 可观测
随着系统微服务化,拆出不同的子系统,同时各子系统又支持横向扩展,在这种情况下需要加强系统的可观测性,从三个方面:1、日志收集,将系统日志统一收集在一处,通过界面去查询,如 ELK。2、链路追踪,可跟踪每一次调用链,当出现问题时,通过请求能快速定位到是哪个子系统出问题,或者哪个子系统所关联的存储系统或第三方出现问题。3、度量,针对虚机的常规指标进行监控,如:硬盘、CPU、内存、网络吞吐等等。
3.2 总体架构
1、入口通过 Nginx 做负载均衡,分发到不同的子系统。
2、采用微服务架构,拆分不同的子系统:学生子系统、权限子系统、课程子系统。
3、各子系统设计成无状态,能横向扩展。
4、存储层使用 MySQL 数据库,MySQL 数据库使用主备模式。
4. 详细设计
4.1 关键设计
1、系统可扩展
根据业务特点将外包学生管理系统拆分成:学生子系统、权限子系统、课程子系统。
2、系统高可用
各子系统设计成无状态的,将子系统中有状态的数据转移给第三方系统,如 MySQL 中,子系统没有状态,可以很方便地进行横向扩展,避免系统单点,同时提高系统的吞吐。
3、存储高可用
每个子系统一个对应的数据库:学生子系统数据库、权限子系统数据库、课程子系统数据库,考虑到硬件成本问题,前期可将三个数据库放至两台物理服务器上,一台用于主数据库,一台用于备数据库。主从考虑异步复制,提升系统的可用性及响应时间。
4、系统高并发
考虑到学生管理系统对并发要求不是特别高,在应用层面考虑可横向扩展即可。
5、系统的可观测
日志收集,将系统日志统一收集在一处,通过界面去查询,如 ELK。当各子系统中的一些错误即可通过 Kibana 查询展示。
链路追踪,可跟踪每一次调用链,当出现问题时,通过请求能快速定位到是哪个子系统出问题,或者哪个子系统所关联的存储系统或第三方出现问题。
度量,针对虚机的常规指标进行监控,配置相应的阀值,当达到阀值时可触发报警邮件、微信或短信等第一时间通知运维人员进行相关处理。
6、安全性
从 PC 至 Nginx 负载均衡该通信链路使用通信通道加密,确保网络传输环境数据的安全。内网环境各子系统间的则没必要通信通道加密。
密码的存储尽可能避免明文存储,使用 密码+动态盐值 然后 SHA256 算法计算后存储密文。如果想防彩虹撞库这种,可以将哈希函数改为慢哈希函数,通过控制调用次数来防止暴力撞库。
4.3 设计规范
1、各子系统使用 Spring Boot 、Spring Cloud 组件开发。
2、网关使用 Spring Cloud Gateway。
3、配置注册中心使用 nacos。
4、对于定时任务使用 xxx-job。
5、各子系统间的调用根据实际业务需求满足:隔离、重试、幂等、超时、补偿、熔断、限流、降级使系统具备弹性。
6、MySQL 使用 Innodb 存储引擎。
7、针对通知使用 webSocket。
8、兜底策略:熔断、限流、降级使用 Sentinel。
9、日志收集系统 ELK。
10、链路追踪使用 Poinpoint。
11、度量系统使用 Prometheus。
5. 质量设计
5.1 可测试性
业务简单,开发人员容易上手,测试难度不大。
5.2 可维护性
技术都是使用市面比较流行通用的技术栈,开发人员能很快进入角色。
技术组件用得不复杂,而且子系统拆分不多,运维层工作量也不大。
5.3 可观测性
没有什么新的特殊组件,所以针对外包学生管理系统的日志收集、链路追踪及度量可纳入现有标准运维体系中。
5.4 成本
业务系统比较简单,研发人员实现成本低,测试投入也不会太高,运维相关可纳入现有运维体系,投入不高。
硬件成本:3 台服务器 + 2 台数据库。
6. 演进规划
6.1 外包学生管理系统一期
需要完成三个子系统:学生子系统、权限子系统、课程子系统。
需要完成系统的可观测性:日志收集、链路追踪、度量。
6.2 外包学生管理系统二期
着重去完善系统中的弹性能力:熔断、限流、降级。
完善测试的可观测性:可以从用户体验监控、业务监控、应用监控、中间件监控、基础平台监控各个维度去完善细化监控项。
评论