架构实战营模块一作业
模块一作业
题目一
题干
画出微信的业务架构图。
题解
题目二
题干
“学生管理系统”毕设架构设计。
假设今年学校毕业设计要求提升,要求做真正可运行的学生管理系统,学院对毕设的具体要求如下:
要求可以通过公网域名访问;
要求至少 3 人合作完成;
能够支撑管理 1000 个学生;
答辩的时候会根据架构方案来进行打分,不推荐太简单和太复杂的方案
你找了 2 个好朋友一起来做这个项目,你们的基本情况如下:
大家都会 Java,但是有一个是 PHP 高手
大家经济条件一般
作业要求:
对照面向复杂度架构设计方法论,构思 2 个以上的备选架构方案。使用 PPT 来画出你的备选架构方案,并说明方案的优缺点。给出你选择的最终方案以及选择理由。
题解
复杂度分析
业务逻辑简单。实体很少。
用户规模小,仅需要支撑 1000 人量级。没有大流量与高并发访问压力。数据量少,数据库读写不会遇到瓶颈。
时间复杂度:毕业设计时间有限,需要尽快开发部署出来,并尽量减少运维成本。
公网访问,需要购买公网域名,并进行备案。
经济条件受限,不可能任性使用高配置机器与高性能高可用组件,也要合理规划存储资源。
需求明确,并且是一锤子买卖,不需要考虑扩展性。
经过以上分析,得到我们架构设计的明确目标:
最高优先级保障实现速度。
次高优先级提升用户使用体验。这一点事关我们的毕设得分。
不需要在高性能、高可用、灵活扩展等方面花费精力。
备选方案一
方案:
从人员技术栈出发,架构分层。使用云厂商的服务。考虑到域名备案的速度,推荐使用阿里云。
从成本出发,选择低配置主机实例。可选择阿里云轻量应用服务器产品,基础版配置(1c1G)足矣。购买实例时,注意选择学校所在地域。
底层数据库使用阿里云上 MySQL 数据库。
从成本出发,不需要数据库提供很高的性能与可用性。使用主从提供一定程度的容灾能力。
性能无压力,不需要引入缓存组件。
2 名 Java 同学负责逻辑层,即将对学生这一对象的处理作为基础服务。提供 API 供上层调用。
接入层由 PHP 高手负责,一般 PHP 高手会比较熟悉前端页面工作以及 Webserver(Apache/Nginx 等)配置,可将相关工作交由 PHP 高手同学负责。
优点:
分工明确,约定好接口协议后可并行展开工作。
架构分层清晰。
缺点:
项目要求简单,架构分层实际上引入了复杂度(需要约定接口协议)与维护成本(服务变多、调用关系多了一层)。
备选方案二
方案:
放弃 PHP,单体服务架构。
同方案一,使用阿里云服务的主机实例与数据库实例。
不同的是,服务是一个大单体。3 名开发同学统一使用 Java 技术栈。
服务内使用 MVC 框架。一般 PHP 高手会比较熟悉前端页面工作,可负责 View 层工作。而另两名同学分别负责 Controller 层与 Model 层。可提前约定好方法接口协议,并行开发。
优点:
架构简单。开发速度快。
缺点:
架构简单而朴素,在竞争评分时可能不够高大上。
单体服务代码逻辑容易耦合。
方案选择
如前面“复杂度分析”部分所述,这个项目中,我们的目标是快速完成核心需求(最高优先级)和优化用户体验(次高优先级),高性能、高可用、灵活扩展等方面的考虑属于想太多。
所以选择方案二。
答辩时,可以强调数据库主从,体现具备可用性的考量。另一方面,将节省出的时间可集体优化用户使用界面。(PHP 高手大概率熟悉前端工作,而写前端逻辑时,JavaScript 的语法对 Java 技术栈同学来说,并没有门槛。)以争取评分。
版权声明: 本文为 InfoQ 作者【刁寿钧】的原创文章。
原文链接:【http://xie.infoq.cn/article/0ee669b479ac8271e016e007e】。文章转载请联系作者。
评论