写点什么

架构实战营模块一作业

用户头像
刁寿钧
关注
发布于: 2021 年 04 月 10 日

模块一作业

题目一

题干

画出微信的业务架构图。

题解


题目二

题干

“学生管理系统”毕设架构设计。


假设今年学校毕业设计要求提升,要求做真正可运行的学生管理系统,学院对毕设的具体要求如下:


要求可以通过公网域名访问;

要求至少 3 人合作完成;

能够支撑管理 1000 个学生;

答辩的时候会根据架构方案来进行打分,不推荐太简单和太复杂的方案


你找了 2 个好朋友一起来做这个项目,你们的基本情况如下:


大家都会 Java,但是有一个是 PHP 高手

大家经济条件一般


作业要求:


对照面向复杂度架构设计方法论,构思 2 个以上的备选架构方案。使用 PPT 来画出你的备选架构方案,并说明方案的优缺点。给出你选择的最终方案以及选择理由。

题解


复杂度分析


  1. 业务逻辑简单。实体很少。

  2. 用户规模小,仅需要支撑 1000 人量级。没有大流量与高并发访问压力。数据量少,数据库读写不会遇到瓶颈。

  3. 时间复杂度:毕业设计时间有限,需要尽快开发部署出来,并尽量减少运维成本。

  4. 公网访问,需要购买公网域名,并进行备案。

  5. 经济条件受限,不可能任性使用高配置机器与高性能高可用组件,也要合理规划存储资源。

  6. 需求明确,并且是一锤子买卖,不需要考虑扩展性。


经过以上分析,得到我们架构设计的明确目标:


  1. 最高优先级保障实现速度。

  2. 次高优先级提升用户使用体验。这一点事关我们的毕设得分。

  3. 不需要在高性能、高可用、灵活扩展等方面花费精力。

备选方案一



方案:

从人员技术栈出发,架构分层。使用云厂商的服务。考虑到域名备案的速度,推荐使用阿里云。

从成本出发,选择低配置主机实例。可选择阿里云轻量应用服务器产品,基础版配置(1c1G)足矣。购买实例时,注意选择学校所在地域。

底层数据库使用阿里云上 MySQL 数据库。

从成本出发,不需要数据库提供很高的性能与可用性。使用主从提供一定程度的容灾能力。

性能无压力,不需要引入缓存组件。

2 名 Java 同学负责逻辑层,即将对学生这一对象的处理作为基础服务。提供 API 供上层调用。

接入层由 PHP 高手负责,一般 PHP 高手会比较熟悉前端页面工作以及 Webserver(Apache/Nginx 等)配置,可将相关工作交由 PHP 高手同学负责。


优点:


  1. 分工明确,约定好接口协议后可并行展开工作。

  2. 架构分层清晰。


缺点:

项目要求简单,架构分层实际上引入了复杂度(需要约定接口协议)与维护成本(服务变多、调用关系多了一层)。

备选方案二



方案:


放弃 PHP,单体服务架构。


同方案一,使用阿里云服务的主机实例与数据库实例。

不同的是,服务是一个大单体。3 名开发同学统一使用 Java 技术栈。

服务内使用 MVC 框架。一般 PHP 高手会比较熟悉前端页面工作,可负责 View 层工作。而另两名同学分别负责 Controller 层与 Model 层。可提前约定好方法接口协议,并行开发。


优点:

架构简单。开发速度快。


缺点:


  1. 架构简单而朴素,在竞争评分时可能不够高大上。

  2. 单体服务代码逻辑容易耦合。

方案选择

如前面“复杂度分析”部分所述,这个项目中,我们的目标是快速完成核心需求(最高优先级)和优化用户体验(次高优先级),高性能、高可用、灵活扩展等方面的考虑属于想太多。


所以选择方案二。

答辩时,可以强调数据库主从,体现具备可用性的考量。另一方面,将节省出的时间可集体优化用户使用界面。(PHP 高手大概率熟悉前端工作,而写前端逻辑时,JavaScript 的语法对 Java 技术栈同学来说,并没有门槛。)以争取评分。

发布于: 2021 年 04 月 10 日阅读数: 34
用户头像

刁寿钧

关注

还未添加个人签名 2018.03.13 加入

还未添加个人简介

评论

发布
暂无评论
架构实战营模块一作业