微信业务架构和学生管理系统架构
1. 微信业务架构图
2. “学生管理系统”毕业设计
假设今年学校毕业设计要求提升,要求做真正可运行的学生管理系统,学院对毕设的具体要求如下:
1)要求可以通过公网域名访问
2)要求至少 3 人合作完成
3)能够支撑管理 1000 个学生
4)答辩的时候会根据架构方案来进行打分,不推荐太简单和太复杂的方案
你找了 2 个好朋友一起来做这个项目,你们的基本情况如下:
1)大家都会 Java,但是有一个 PHP 高手
2)大家经济条件一般
作业要求:
1)对照面向复杂度架构设计方法论,构思 2 个以上的备选方案
2)使用 PPT 来画出你的备选架构方案,并说明方案的优缺点
3)给出你选择的最终方案以及选择理由
需求分析:
1)公网可访问:申请一个域名即可
2)3 人合作完成,需要有分工,按层或按模块分工合作
3)能够支持 1000 个学生,数据量很少,无需考虑高性能、高并发
4)学生管理系统要求数据高可用,不能全部丢失,可以采用数据库主备方案
5)可扩展有一定的要求
2.1 架构方案一
说明:
1)在阿里云上买一个普通的域名,一年大概 10 几块人民币
2)目前华为、腾讯、百度还有很多小的云厂商等,有些搞活动的可以免费申请用一个月甚至一年,或者可以在阿里云上买 1 核 1GB + 40GB 硬盘,一个月也就 50 元左右,每人买一台,或者 3 个人共买 2 台
3)3 台服务器:其中 1 台部署 Nginx 负载均衡,3 台均部署业务服务,2 台部署 MySQL,一主一备
4)按照模块拆分,每人负责一个或多个模块,用 Java 开发
优点:
部署简单,扩缩容简单
运维简单
可维护性好
用 Java 开发,3 个人可以互为 backup
缺点:
没有做服务拆分,一旦一个模块有问题,改动之后需要全部重新部署
如果一个模块有内存泄露等严重 bug,会影响其他模块的可用性
各个模块不能独立开发部署,开发阶段也会互相影响
2.2 架构方案二
1)整体架构与方案一的不同点在于业务进行了服务拆分
2)这样每个服务可以用不同的语言开发,但是维护性会比较差
3)部署架构上 3 台服务器每台部署不同的服务,或者每个服务部署到不同的 2 台服务器上
优点:
做了服务拆分,各个服务开发语言可以异构,可以发挥 PHP 高手的优势
各个服务可以独立发展,互不影响
各个服务可以独立扩缩容,互不影响
缺点:
路由规则复杂
服务治理成本高
运维成本高
各模块语言异构,导致 3 个人不能互为 backup,一旦 PHP 小伙伴中途退出,其他人很难补上
方案选择
选择方案一:符合简单原则和演进原则
1)合适原则,两个方案都适合作为学生管理系统的架构
2) 简单原则和演进原则,选择方案一,方案一相对简单,而且后续业务发展复杂之后再考虑重构拆分微服务符合演进原则要求
版权声明: 本文为 InfoQ 作者【tjudream】的原创文章。
原文链接:【http://xie.infoq.cn/article/a991b2f9061df5812ef99818a】。
本文遵守【CC BY-NC】协议,转载请保留原文出处及本版权声明。
评论