写点什么

学生系统架构详细设计

作者:Only
  • 2021 年 12 月 29 日
  • 本文字数:1010 字

    阅读完需:约 3 分钟

前言

设计一个可以减少人力成本,提升学生管理的系统架构。


1. 业务背景

随着学生的数量增加,需要花费老师大量的精力来做学生的数据统计,并且效率很低。开发学生管理系统,来提升学生管理的效率,减少老师资源消耗。以实现,全校全自动化的学生管理。


2. 约束和限制

  • 资金有限

  • 私有化部署

  • 2 个月开发周期

  • 数据持久化


3. 总体架构

3.1 架构分析

  • 高拓展:以后可能会对接图书馆系统,统计学生借书的情况;又可能会接入上课签到的功能,统计学生上课情况

  • 高可用:学校基本上都是同城距离很近,所以单机房,多实例部署即可。数据库,使用备库来备份数据即可

  • 高性能:学校学生数量有限,并且突发流量基本上是选课这种时候,这种情况,只需要保证数据写入不丢失即可,所以接入层限流即可

  • 安全性:物理机房安全不在我们考虑的范围内。数据安全是我们应该考虑的,严格控制,学生,老师,辅导员,等以上个级别的权限。针对改成绩等敏感操作,采用双重校验。


3.2 架构



4. 详细设计

4.1 核心功能时序图



4.2 关键描述

  • 安全性:使用 spring security,管控权限

  • 高拓展:策略模式引入,隔离开不用业务操作流程,实现业务可插拔

  • 高可用:主要是数据层面,使用从库同步 binlog,因为是单机房,所以可以考虑是否能用云备库,如果不能的话,定期做冷备,将数据写入到磁盘或者其他文件系统


4.3 规范设计

  • mysql 使用 innodb 引擎,事务保障

  • 微服务之间的调用通过 dubbo rpc

  • 分布式 traceId 通过 rpc 请求头传递

  • 事务回滚需要处理补偿方案


5. 质量设计

  • 可测试性:使用 dubbo 的 group,路由,直连的形式提高微服务架构的可测试性

  • 可维护性:搭建 dubbo admin,针对微服务集群的维护,包括限流,熔断,隔离,部署

  • 可观测性:因为服务数量少,并且面对的用户是老师和学生,对故障有一定的容忍性,所以前期可以暂时不考虑

  • 成本:选择 dubbo 而不使用 spring cloud,因为 dubbo 自身集成的微服务治理功能较多,spring cloud 还需要部署其他服务。每个服务部署两台服务,减少硬件资源消耗。


6. 演进规划

  • 1.2 因为可观测性的问题,不使用 pinpoint,因为它强依赖 hbase,会增加运维,开发,硬件成本。可以使用 filebeat,将多个服务的日志汇总到一台服务器,不提供 web ui 搜索。使用程序,定时读取汇总日志信息,来推送故障问题(因为在成本的限制下,也不会选择其他 APM)。

  • 1.3 因为 1.2 可能会导致一台机器日志过大,所以开发 dubbo filter 来实现异常收集单独打印日志,然后再用 filebeat 汇总

  • 1.4 针对选课,期末考试,同时请求量过大的情况,尝试使用 k8s 来自动扩容服务

发布于: 刚刚
用户头像

Only

关注

还未添加个人签名 2020.05.27 加入

还未添加个人简介

评论

发布
暂无评论
学生系统架构详细设计