写点什么

架构实战营模块 3 课后作业

用户头像
hello
关注
发布于: 3 小时前
架构实战营模块 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 外包学生管理系统二期

着重去完善系统中的弹性能力:熔断、限流、降级。

完善测试的可观测性:可以从用户体验监控、业务监控、应用监控、中间件监控、基础平台监控各个维度去完善细化监控项。

用户头像

hello

关注

还未添加个人签名 2019.03.18 加入

还未添加个人简介

评论

发布
暂无评论
架构实战营模块 3 课后作业