写点什么

架构训练营 -- 模块三

作者:LJK
  • 2021 年 12 月 20 日
  • 本文字数:1875 字

    阅读完需:约 6 分钟

前言

外包学生管理系统的架构文档


词汇表

  • Spring Boot: Web 开发框架

  • Nginx: 高性能的 HTTP 和反向代理 web 服务器,在本架构中进行路由转发

  • MySQL: 开源关系型数据库存储,本架构使用主备方案

  • Git: 代码版本控制软件


1. 业务背景

随着学校的规模的不断扩大,学生数量的增加,需要处理的信息也日趋增大。不仅花费大量的教师资源,

处理效率也十分低下。


为提高学生管理的管理水平,优化资源,尽可能降低管理成本成为学生管理的新课题,学生管理系统是从

学生管理现状出发,根据学生管理的新要求进行开发设计的,它需要解决学生信息管理数据信息量大修改

不方便对一系列数据进行分析时花费时间长等问题,帮助学生管理人员有效管理学生信息。

因此学生信息管理系统可以通过系统规范化地管理、科学性统计和快速查询、修改、增加、删除等,提高

信息的准确度以及日常管理的工作效率。


本系统主要是应用于学生各类信息的管理,总体任务是实现学生信息关系的系统化、规范化、自动化,其

主要任务是统计学生各类信息进行日常管理,如查询、修改、增加、删除、以及学生选课、成绩的查询等

功能设计的管理系统。


总结如下:

  • 解决学生信息管理数据信息量大修改不方便

  • 解决对一系列数据进行分析时花费时间长

  • 规范化地管理、科学性统计和快速查询、修改、增加、删除

2. 约束和限制

  • 使用关系型数据库进行数据存储,适当进行 normalization

  • 成本需要严格把控,3-5 万每年

  • 基于 AWS 云进行实现

  • 可支持 3-5 万的教职工使用

  • 数据保证持久化

3. 总体架构

总体来看,基于业务背景,该架构适当放宽对于高性能和高可用性的要求,但是由于业务本身覆盖的内容比较广,同时需要做好后续的可扩展准备,因此对可扩展有一定的要求,同时为了满足数据的灾备,因此采用 MySQL 的主备机方案,确保系统异常时数据的可用性


架构整体分为三层,路由转发,业务系统,及存储系统层

  • 路由转发:由 Nginx 根据请求内容将请求转发给后台服务器,对于比较繁忙的业务,譬如选课等子系统,如有需要可以进行单独的水平扩展

  • 业务系统:业务子系统需要进行拆分,可以通过容器技术或采用 AWS 独立的 EC2 服务器进行隔离,确保单独子系统故障时不会影响到其他子系统。初步拆分为学生子系统,课程子系统,及权限子系统

  • 存储系统:MySQL 主服务器可进行读写请求处理,MySQL 备用服务器仅作为数据备份,不提供读服务

4. 详细设计

架构规范

  • 交互协议:客户端与服务器端通过 HTTP 进行请求与响应

  • 数据格式:客户端与服务器端统一使用 JSON 进行数据交互

  • 开发框架:SSM(Spring+SpringMVC+Mybatis),但也可以根据团队能力确定开发框架

架构质量

  • 可测试性设计:子系统进行模块化开发确保可独立测试部署上线

  • 可维护性设计:通过容器化技术降低系统的迁移成本

  • 可观测性设计:使用 Splunk 进行日志收集及分析

4.1 核心功能

4.1.1 用户登录/注册场景


  • 学生用户登录时进行身份验证,验证通过则展示登录界面

  • 新用户注册需进行学生身份验证

  • 学生信息验证为实时验证,如失败需要通过学院处理,成功则注册新用户信息并展示登录界面

  • 需要确保数据库查询时对于学生身份验证的快速响应

4.1.2 学生信息查询修改


  • 学生信息查询仅展示个人信息

  • 修改需要进行权限验证,同时通过日志记录系统记录修改请求信息

  • 需要确保数据库更新的快速响应

4.1.3 学生查课选课


  • 课程查询及选课与学生信息查询流程相似

  • 权限子系统进行用户验证,课程子系统验证业务逻辑

  • 针对并发引起的选课问题,通过 MySQL 事务进行并发控制

  • 需要确保数据库设计满足课程查询,添加等的快速响应

4.2 关键设计


  • Nginx 根据请求内容进行路由转发,因此对于不同子系统需要在 HTTP 请求 resource 中进行区分,并通过 Nginx 进行配置

  • MySQL 进行主备配置,由于学生系统对高性能要求不高,同时用户数据量不打,因此两个数据库实例应该可以支撑,可以考虑同步复制,牺牲一定的性能的情况下换取数据一致性

  • 采用 Spring Boot 进行模块化开发,便于后期的维护及扩展,以及独立测试等需求

  • 如果采用同步复制,备用服务器可以承接读请求

  • 使用 Git 进行版本控制,使用 CI/CD 进行持续集成部署上线,自动测试

4.3 设计规范

  • 采用 spring boot 开发框架

  • 采用 http 协议进行通讯

  • 采用 json 通讯数据格式

  • 采用 git 进行版本控制

  • 进行单元测试与系统集成测试

5. 质量设计

  • 可测试性:子系统保证独立的测试用力,核心业务逻辑考虑函数式编程增强系统的可测试性

  • 伸缩性:

  • 子系统之间可独立扩展,通过增加服务器数量提升某个特定子系统的计算能力

  • 数据库采用主备,由备用服务器提供读服务,提升系统的读写能力

  • 协作性:各个模块可并行开发

6. 演进规划

  • 前后端分离,优化前后端的并行开发

  • 数据库采用异步复制 + 浏览器缓存,确保数据的一致性的同时提升读写效率

  • 服务注册中心,进一步解耦服务上下线以及配置更新

用户头像

LJK

关注

还未添加个人签名 2018.08.07 加入

还未添加个人简介

评论

发布
暂无评论
架构训练营 -- 模块三