写点什么

架构训练营模块一作业

用户头像
Geek_e0c25c
关注
发布于: 2021 年 04 月 07 日

1. 画出微信的业务架构图


2. “学生管理系统”毕设架构设计

需求分析:

  1. 提供学生/课程/考试/权限功能

  2. 要求可以通过公网域名访问

  3. 能够支撑管理 1000 个学生


面向复杂度分析:

  1. 高性能:除了很少的时间段可能会有高访问量,大部分时段访问量不高,因此不需要重点考虑高性能。

  2. 高可用:重点考虑,数据不允许丢失,服务允许短时间停用,不允许长时间停。

  3. 扩展性:不太需要考虑架构扩展性,因为学生人数不会短时间内暴涨。新增功能也不会很复杂。

  4. 成本/安全:公网访问需考虑网络安全,项目团队经济一般因此需考虑成本。


备选方案一:

  1. 公网访问由学校现有 DNS 服务提供转发。

  2. 业务服务器实现学生管理系统的主要业务功能(学生/课程/考试/权限管理),由于大家都会 Java,采用 Java 技术栈开发实现功能,团队成员分模块开发。

  3. 业务服务器配置两台虚拟机实现应用的高可用。

  4. 为保证存储的高可用、数据不丢失,数据库采用虚拟机部署 MySQL 主备节点的方式存储数据。

  5. 为避免在高峰时段,数据库压力过大,采用 Redis 作为缓存减轻数据库压力,提升系统处理能力。同时为了避免 Redis 单点故障,以三台虚拟机配置 Redis 集群。


备选方案二:

  1. 公网访问由学校现有 DNS 服务提供转发。

  2. 业务服务器实现学生管理系统的主要业务功能(学生/课程/考试/权限管理),由于大家都会 Java,采用 Java 技术栈开发实现功能,团队成员分模块开发。

  3. 在业务服务器的功能模块中增加“网关功能”,提供网络安全和限流的功能。系统面向公网提供服务,所以需要考虑网络安全策略。请求会有瞬时高峰,因此可以采用限流策略,一定程度上可以去掉缓存。所有提交到业务服务器的请求都需要先经过网关模块。网关模块不独立部署服务器而集成在业务服务模块,主要是出于部署简单和降低成本的角度考虑

  4. 业务服务器配置两台虚拟机双活实现应用的高可用。

  5. 为保证存储的高可用、数据不丢失,数据库采用虚拟机部署 MySQL 主备节点的方式存储数据。


备选方案三:

  1. 公网访问由学校现有 DNS 服务提供转发。

  2. 前置的独立服务器实现“网关功能”,提供网络安全和限流的功能。系统面向公网提供服务,所以需要考虑网络安全策略。针对瞬时的请求高峰,可以灵活地配置限流策略。所有提交到内部应用区的的请求都需要先经过网关服务器。

  3. 网关功能由 PHP 高手实现,服务器配置两台虚拟机实现高可用。

  4. 被网关允许的请求向后转发给业务服务器处理之前,部署 Ngnix 服务器实现负载均衡,采用 Keepalived 技术部署两台虚拟机实现双活

  5. 业务服务器实现学生管理系统的主要业务功能(学生/课程/考试/权限管理),由团队的另外两位成员以 Java 技术栈分模块开发。

  6. 业务服务器配置两台虚拟机双活实现应用的高可用。

  7. 为保证存储的高可用、数据不丢失,数据库采用虚拟机部署 MySQL 主备节点的方式存储数据。

  8. 为避免在高峰时段,数据库压力过大,采用 Redis 作为缓存减轻数据库压力,提升系统处理能力。同时为了避免 Redis 单点故障,以三台虚拟机配置 Redis 集群。


最终方案:

方案二

分别考虑架构设计三原则:合适、简单、演化。

  1. 合适:团队人员都有 Java 背景,所以虽然有 PHP 高手,还是优先考虑统一使用 Java 技术栈。团队经济条件一般,所以尽量避免采用方案三这种高成本的方案。

  2. 简单:方案三功能最齐全,但是最复杂;方案一和方案二功能差别不大,但方案二的架构更简单,运维压力更小。

  3. 演化:方案二虽然简单,但基本的功能需求都已经满足,且未来如果增加新的组件例如扩充到方案三的复杂程度也很容易,不需要对现有架构进行大改;如果未来没有增加组件的需求,只需要提高系统处理能力也很容易,复制业务服务器虚拟机节点即可。

发布于: 2021 年 04 月 07 日阅读数: 71
用户头像

Geek_e0c25c

关注

还未添加个人签名 2020.09.13 加入

还未添加个人简介

评论

发布
暂无评论
架构训练营模块一作业