写点什么

架构训练营 week3 作业

作者:红莲疾风
  • 2021 年 12 月 20 日
  • 本文字数:1468 字

    阅读完需:约 5 分钟

1. 业务背景

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

处理效率也十分低下。主要有以下几个问题:

  1. 学生信息管理数据信息量大,查询、修改、删除等不方便

  2. 学生信息维护是纯手工的,维护不规范

  3. 学生选课过程操作繁杂,效率低下

  4. 大量工作需要人工进行操作,费时费力

  5. 对一系列数据进行分析时花费时间长

  6. 成绩查询还是通过打印成绩单的方式,浪费人力物力


基于以上问题,我们要引入学生管理系统来帮助学生管理人员有效管理学生信息,帮助学生更好的进行成绩的查询和课程的选择。


2. 约束和限制

  1. 学生、课程、考试数据不能发生大量丢失(多于 100 条)的情况

  2. 有较好的可扩展性,因为学校方面的技术人员会介入后续的开发和维护工作

  3. 系统需要支持 2000 人同时在线选课

  4. 系统为内部系统,仅在学校内部可以访问,不对公网开放

  5. 开发人员全体熟悉 java,熟悉 mysql,开发人员一共 3 人

  6. 3 个月内完成开发、测试和上线


3. 总体架构

3.1 架构分析

  1. 高可用:因为约束中要求不能大量丢失学生、课程、考试信息,所以至少需要做数据库层面的高可用,使用 MySQL 主备结构来处理这方面的问题。主数据库负责数据库的写入和读取,备数据库负责将数据从主数据库复制过来,以便在主数据库崩溃或者数据丢失的时候,可以及时地恢复数据或者干脆将备库切为主库

  2. 可扩展:因为从需求看,业务还有些复杂度,并且之后要交给校方的技术人员维护,那么在可扩展方面就有一定的要求。将系统拆分为 3 个系统,子系统间用接口相互调用,可以降低每个模块的内部复杂度,以便于分别进行单个子系统的开发工作。

3.2 总体架构

  1. 系统入口处用 nginx 进行请求的分发,根据访问路径分发到不同的子系统。同时用复杂均衡的算法选择一个子系统的实例进行请求

  2. 学生子系统主要负责学生个人信息、履历的增删改查等操作

  3. 课程子系统主要负责课程的增删改查、学生选课、成绩信息、考试安排等功能

  4. 权限子系统主要负责学生、老师、管理员的登录,以及登录之后操作的权限控制等功能

  5. 三个子系统可以各自用两个子系统实例保证一定的可用性

  6. 数据库采用主备的模式,主数据库接受读写,备服务器仅仅作为备份,不对外提供服务,从数据库复制数据。当主数据库宕机的时候,被数据库切换成为主数据库,继续提供数据读写服务。


4. 详细设计

4.1 核心功能

用户注册、登录


学生选课、查看成绩


辅导员维护学生信息


教师上传试题、修改成绩


4.2 关键设计

  1. 数据库的高可用:使用 MySQL 主备来实现数据库的高可用。平时主数据库提供读写服务,备数据库只是复制主数据库的数据信息,万一主数据库发生崩溃等异常,备数据库就会转为主数据库,继续提供服务。这样可以有效避免数据的丢失或者数据库写服务异常。

  2. 系统的可扩展:将整个系统拆分为 3 个子系统,分模块进行开发,实现了一定程度的业务解耦,每个子系统内部逻辑更加高内聚,更容易理解以及后续的维护


4.3 设计规范

  1. 业务子系统使用 Spring Boot、Spring Cloud 进行开发

  2. 子系统的配置和服务注册与发现用 nacos 进行统一管理

  3. 子系统之间的相互调用使用阿里的 dubbo 实现

  4. MySQL 使用 Innodb 存储引擎

  5. 子系统的日志使用 ELK 进行管理

5. 质量设计

  1. 所有的日志通过 ELK 进行管理,可以在测试和进行问题定位的时候,在 kibana 界面进行关键字搜索,保证了可观测性、可测试性、可维护性

  2. 如果要降低成本,每个子系统可以只有一个服务实例,因为学生管理系统对于系统整体可用性要求并不是这么高,即使宕机一小时,也不会有非常大的影响


6. 演进规划

  1. 第一期:实现课程、学生基础信息维护、学生选课、系统排课、权限管理功能

  2. 第二期:实现教材选择、考试管理、成绩查看等功能

  3. 第三期:实现例如自动排课,自动生成试卷等自动化功能

发布于: 58 分钟前阅读数: 4
用户头像

红莲疾风

关注

还未添加个人签名 2021.07.28 加入

还未添加个人简介

评论

发布
暂无评论
架构训练营 week3 作业