微信业务架构图 & 学生管理系统
一、微信业务架构设计图
二、学生管理系统架构设计
需求:
假设今年学校毕业设计要求提升,要求做真正可运行的学生管理系统,学院对毕设的具体要求如下:
要求可以通过公网域名访问;
要求至少 3 人合作完成;
能够支撑管理 1000 个学生;
答辩的时候会根据架构方案来进行打分,不推荐太简单和太复杂的方案。
你找了 2 个好朋友一起来做这个项目,你们的基本情况如下:
大家都会 Java,但是有一个是 PHP 高手;
大家经济条件一般。
作业要求:
对照面向复杂度架构设计方法论,构思 2 个以上的备选架构方案。
使用 PPT 来画出你的备选架构方案,并说明方案的优缺点。
给出你选择的最终方案以及选择理由。
设计架构
使用面向复杂度架构设计方法论
第一步:判断复杂度
根据复杂度的主要来源进行判断:
高性能:通过需求可知,不需要十分高的性能。
高可用:服务虽说不需要高可用,但是数据由于是可能需要人员录入,所以不能全部丢失,不然工作量有点大,需要做到一般的数据高可用。
可扩展:由于像教务管理,选课等业务还是有一定的复杂度,需要可扩展性。
成本:大家经济条件一般肯定是越节省成本越好。
安全:没有特别的安全要求。
第二步:设计备选方案
方案一
架构描述: 采用 Java web 的单应用架构,DNS 做负载均衡,数据库用 MySQL 做简单的主备复制。
设计依据: 由复杂度分析可知,系统不需要高性能和高可用,只需要业务可扩展性和数据一定的高可用,并依据架构设计三原则进行设计指导:
合适原则:团队 3 个人都会 Java,所以采用 Java 技术栈更合适,针对一般的数据高可用,采用 MySQL 的主备复制就可以满足要求。
简单原则:该系统对性能和服务的高可用不高,使用简单的 Java 单体应用架构即可。
演变原则:由于系统需求相对固定,所以可以暂时不考虑演变。
方案二
架构描述: 采用前后端分离架构,Java 作为后端 API 开发语言,PHP 作为前端开发语言,使用 nginx 做反向代理和负载均衡,数据库用 MySQL 做简单的主备复制。
设计依据: 由复杂度分析可知,系统不需要高性能和高可用,只需要业务可扩展性和数据一定的高可用,并依据架构设计三原则进行设计指导:
合适原则:团队 3 个人都会 Java,所以采用 Java 做后端语言合适,与此同时有一个人精通 PHP 所以可以放心的使用其作为前端的开发语言。nginx 作为反向代理和负载均衡服务器,可以很好的利用其功能,并能减少成本。针对一般的数据高可用,采用 MySQL 的主备复制就可以满足要求。
简单原则:该系统对性能和服务的高可用不高,并且配合团队资源,可以放心的进行前后端分离。
演变原则:进行前后端分离之后,可以拥有更好的可扩展性,以便以后进行多个前端平台的扩展,并加强后端服务 API 的复用。
方案三
架构描述: 将系统简单拆分为三个子系统,Java 作为开发语言,使用 nginx 做反向代理和负载均衡,数据库用 MySQL 做简单的主备复制。
设计依据: 由复杂度分析可知,系统不需要高性能和高可用,只需要业务可扩展性和数据一定的高可用,并依据架构设计三原则进行设计指导:
合适原则:团队 3 个人都会 Java,所以采用 Java 技术栈更合适,针对一般的数据高可用,采用 MySQL 的主备复制就可以满足要求。
简单原则:该系统对性能和服务的高可用不高,并且配合团队资源,每人可以负责一个简单的 Java 单体应用架构子系统。
演变原则:拆分成子系统业务扩展性强,服务职责分明,能支持精准的水平扩容。
第三步:选择方案
利用架构设计三原则,选择备选方案一 。
合适原则:
符合团队技术水平和积累;
开发成本低;
系统运维成本低;
经济成本低。
简单原则:
不进行系统拆分,部署维护简单;
Java 单体应用开发简单。
演化原则:
一次性交付,无需考虑太多后期演化;
学校的学生数量不会发生很大的变化,系统架构够用多年。
评论