学生系统架构详细设计
前言
设计一个可以减少人力成本,提升学生管理的系统架构。
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 来自动扩容服务
版权声明: 本文为 InfoQ 作者【Only】的原创文章。
原文链接:【http://xie.infoq.cn/article/6f2a5269932e1b5932826258f】。未经作者许可,禁止转载。
评论