背景介绍
极客大学业务架构实战营课程作业
作业1 画出微信的业务架构图
作业内容
画出微信的业务架构图
结果展示
作业2 “学生管理系统”毕设架构设计
作业内容
假设今年学校毕业设计要求提升,要求做真正可运行的学生管理系统,学院对毕设的具体要求如下:
- 要求可以通过公网域名访问;
- 要求至少 3 人合作完成;
- 能够支撑管理 1000 个学生;
- 答辩的时候会根据架构方案来进行打分,不推荐太简单和太复杂的方案
你找了 2 个好朋友一起来做这个项目,你们的基本情况如下:
- 大家都会 Java,但是有一个是 PHP 高手
- 大家经济条件一般
作业要求:
- 对照面向复杂度架构设计方法论,构思 2 个以上的备选架构方案。
- 使用 PPT 来画出你的备选架构方案,并说明方案的优缺点。
- 给出你选择的最终方案以及选择理由。
复杂度判断
高性能
- 1000学生,不需要过于考虑,用户量级太小
- 学生同时抢课存在压力,可能需要考虑课程系统的技术实现难度
高可用
- 考虑到学生成本有限,以及学生用户数,加之作为学校系统,可以接受一定程度的不可用
可扩展
- 需要多人协作,后续需求增加需要可维护
成本、安全
- 避免数据丢失,不容易被攻击
- 都是学生,尽量发挥学生优势,降低服务器资源成本
方案一
架构图
方案说明
- 基于阿里云进行部署,可以通过学生优惠购买服务器
- 用阿里云的LVS作为负载均衡,并购买公网域名DNS指向LVS
- 使用两台ECS服务器作为业务服务器
- 使用阿里云的RDS作为MySQL存储,并设置主从节点
- 大家统一使用Java开发
方案分析
- 将服务多机器部署,每台机器都具有完整的业务系统,避免单机器故障
- 统一使用Java作为开发语言,降低沟通成本和后续可维护成本
- 使用主从MySQL作为数据存储服务,保证数据可用性
方案二
架构图
方案说明
- 购买公网域名DNS指向Nginx服务器
- 使用Nginx作为服务转发
- 使用三台服务器分别作为课程子系统、权限子系统、学生子系统
- 其中最复杂的课程子系统由PHP高手开发,权限子系统和学生子系统由另两位同学用Java负责开发
- 除DNS公网域名解析,其它服务使用校内可用资源或自建
方案分析
- 课程子系统日常压力最大,将这部分由PHP高手进行开发,充分发挥其技术优势,降低整体工作完成复杂度
- 将多业务分别于多机器部署,避免子系统相互影响
- 使用主从MySQL作为数据存储服务,保证数据可用性
方案取舍
团队技术水平
- 方案一
- 大家的技术水平类似,同时使用Java作为开发语言,方便大家协作开发,课程子系统可以按模块拆分协作开发
- 方案二
- 充分利用了PHP高手的技术优势,降低技术要求最高的课程子系统的开发时间和提升性能
方案成本
- 方案一
- 基于阿里云开发,但可以使用学生优惠,机器不用购买太好
- 方案二
- 除了公网DNS解析需要购买外部服务,nginx和其它服务器可以考虑使用学校内部资源,成本相对较低
开发周期
- 方案一
- 整体基于阿里云服务进行开发,组件维护开发和维护成本低
- 所有业务在同一台机器部署,多机使用同样的配置部署同样流程,支持快速扩展
- 方案二
- 开发时间瓶颈的课程子系统的开发压力降低
- 基础设施需要自己维护,MySQL需要自己做配置,组件的维护需要时间
对方认可度
- 方案一
- 基于阿里云已有基础组件资源开发,大厂有质量保证
- 使用双机器,并支持负载均衡,稳定性更好
- 使用阿里云数据库,有基本的数据安全保障
- 方案二
- 课程子系统的性能压力大部分被PHP高手解决,降低了一定的服务资源成本
- 多子系统分开部署,方便分子系统模块维护
综合决定
选择方案一
助教评语
作业1
“发现业务”这样的描述直接沿用了APP中的文案,在业务架构图中有点意义不明。
作业2
给出了两个方案,经过分析与取舍选择了方案一。考虑到了数据可用性(主备)、服务可用性(负载均衡)、成本、安全、技术栈的统一,并且分析复杂度时,细分到了模块级别,考虑得非常周全。