写点什么

架构实战营 - 模块 3 - 作业

用户头像
Vincent
关注
发布于: 2 小时前

学生管理系统架构设计

前言

本文主要是学生管理系统的架构设计,用于指导后续开发、测试、运维。

 

词汇表

Netty: 开源的网络编程框架

Json:一种轻量级的数据交换格式

REST: 一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性

1. 业务背景

出于内部学生信息管理信息化的需求,我们需要构建一套学生管理系统。它可以用于后续学生个人信息、课程信息等进行管理。这个系统将有效提高学生信息查询的效率,减少不必要的人力成本。

 

2. 约束和限制

1. 支持公网域名访问

2. 能够支撑 1000 个学生

3. 成本有限,尽量控制

 

3. 总体架构

 


3.1 架构分析

3.1.1 高可用分析

学生系统不需要计算高可用,但需要保证数据高可用。整体预算有限。

因此,业务服务暂时不需要做集群,Mysql 存储需要做主备。

 

3.1.2 高性能分析

预计服务 1000 人,峰值 QPS、TPS 也不会太高,因此不需要过度考虑性能。

 

3.1.3 扩展性分析

考虑到目前的业务复杂度,暂时拆分为:学生子系统、课程子系统和权限子系统。保证了扩展性的同时又不带来过高的外部复杂度。

 

3.2 总体架构

1) 服务整体作为一个集群,后续如果有更多学生人数的需求可以按学生 ID 做分片集群管理。

2) 一个服务集群对应一台主 Mysql 和一台备 Mysql 数据库,采取主从结构。

3) Nginx 用于做外网请求的转发,后续有需求还可以做负载均衡。

4) 服务间使用 Netty 进行通信,提供 REST HTTP 接口,数据协议使用 Json。

 

4. 详细设计

 

4.1 核心功能

4.1.1 个人信息管理

个人信息由学生系统记录主要信息,操作权限由权限系统管理。

 

4.1.2 学生课程信息管理

学生的课程信息主要由课程系统管理,通过学生 ID 与学生关联。

 

4.1.3 教师排课管理

课程信息由课程系统管理,权限由权限系统检查控制。

 

4.2 关键设计

1) 主备 Mysql 需要部署在两台服务器上,确保信息不会因为硬盘损耗丢失。

2) Nginx 需要做限流处理,防止突发流量或恶意流量影响系统运行。

3) 学生密码的存储需要单向哈希加密。

 

4.3 设计规范

1) 服务器设计采用 Spring Boot+Netty

2) 服务接口采取 REST 风格 HTTP 接口,字段值使用 Json 协议传入

3) Mysql 使用 Innodb 引擎,各个表根据学生 ID 建立索引

4) Mysql 数据每月进行一次离线备份

5. 质量设计

5.1 可测试性

接口测试使用 Postman 建立测试计划,进行系统集成测试。后续开发修改,确保原有测试计划能够正常执行即可。

 

5.2 可维护性

目前系统只有 3 个子系统+主备 Mysql,维护成本较低。

 

5.3 成本

Nginx 和 3 个子服务前期可部署在一台机器上,后续有需求可将 Nginx 单独部署,3 个子服务作为集群水平部署多台机器上。

主备 Mysql 需要两台机器。

前期可以采用云服务器,根据存储和计算需求选择对应配置。成本相对较低。

 

6. 演进规划

6.1 学生信息系统,可注册、登录,查看个人信息

6.2 课程系统,可注册课程、选课、排课

 

用户头像

Vincent

关注

还未添加个人签名 2019.04.24 加入

还未添加个人简介

评论

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