微信及学生管理系统架构分析
![微信及学生管理系统架构分析](https://static001.geekbang.org/infoq/fa/faf8d03465066ee7193c83d083da14e9.png)
对微信的业务进行分析,绘制业务架构图
![](https://static001.geekbang.org/infoq/5b/5bc2dc8d2f7eb2e14a3bcf0e8e1a6740.png)
“学生管理系统”毕设架构
假设今年学校毕业要求提升,要求做真正可运行的学生管理系统,学院对毕社的具体要求如下 :
① 要求可以通过公网域名访问
② 要求不少 3 人合作完成
③ 要够支撑管理 1000 个学生
④ 答辩的时候会根据架构方案来进行打分,不推荐太简单和太复杂的方案。
你找了 2 个好朋友一起来做这个项目,你们的基本情况如下 :
① 大家都会 Java,但是有一个是 PHP 高手
② 大家经济条件一般。
作业要求 :
① 对照面向复杂度架构的方法,构思 2 个以上的备选架构方案。
② 使用 PPT 来画出你的备选架构方案并说明方案的优缺点。
③ 给出你选择的最终方案以及选择理由。
Step1. 首先,分析作为毕设的“学生管理系统”的功能和使用场景,定位复杂度
功能包括:学生登录、登出,学生信息管理,课程管理,成绩管理
用户范围和角色:一个学校的学生、老师、运维(管理)人员
Step2.从性能、可扩展、高可用分析
性能:要够支撑管理 1000 个学生
用户数量很少,系统功能定位决定,对学生信息、课程等管理和查询的使用频率不高,因此性能要求不高。
可扩展
学生管理系统的用户数量不会出现大幅增长,系统功能也相对固定,一般情况下不会产生较高的可扩展要求。
高可用
系统宕机的情况发生,对校园工作影响不大。高可用要求较低,可以不考虑负载均衡或复杂的高可用策略。
数据可靠性有一定要求,如果系统数据库的学生信息全部丢失,在没有其他接口同步的情况下,修复很麻烦。需要考虑数据可靠性策略,考虑通过主备库方案。
成本
建设成本有限,大家的经济条件一般。考虑使用开源 MySQL 数据库,也能够满足性能要求。另外部署可以选择学校的机房服务器,或租赁云上服务器。
Step3. 设计
![](https://static001.geekbang.org/infoq/06/068b05b96f8054ac2ae4c579e506796e.png)
方案 1:单体应用
wei3 人分模块开发,集成在一个 java web 应用,配备主从数据库保证数据可靠性。
优点:
部署运维简单,系统异常处理定位容易
Nginx 可绑定域名
主备数据库,保证数据可靠性
缺点:
作为毕业设计架构过于简单
所有功能集中在一个服务,3 人开发无法发挥各自优势
![](https://static001.geekbang.org/infoq/75/75d2fcc0781c4207048193d05194bcf1.png)
方案 2. 微服务应用
系统划分为多个子系统,按业务分 4 个应用服务,配备主从数据库保证数据可靠性。
优点:
开发分工可按照子服务分配,可采用异构技术栈,发挥 php 高手优势
Nginx 可绑定域名
主备数据库,保证数据可靠性
缺点:
部署运维复杂度高,若不同服务部署在不同主机,成本也会增高
![](https://static001.geekbang.org/infoq/d9/d914e8e735973219203536303b631f8e.png)
方案 3. 前后端分离
系统采用前后端分离的开发模式,部署分前后端两个服务,配备主从数据库保证数据可靠性。
优点:
开发分工可按照前后端分配,php 做前端,后端由 2 个人承担 java 接口开发
Nginx 可绑定域名
主备数据库,保证数据可靠性
缺点:
前端功能的后期运维依赖于少数技术栈人员
结论. 综上选择方案 3,理由如下:
合适原则
符合团队能力,资源平衡分配
具有一定的架构设计,符合毕业设计的要求
服务数量拆分合理,部署运维工作量少
简单原则
根据当前系统需求,不过度拆分业务子系统,只存在前后端交互
无其他中间代理
演化原则
后续产生扩展性要求的话,前后台均可根据需求进行拆分,或扩展
版权声明: 本文为 InfoQ 作者【summer】的原创文章。
原文链接:【http://xie.infoq.cn/article/bb87853308e370481f9e521ec】。文章转载请联系作者。
评论