架构实战营 模块一 为何架构设计能力难以提升
作业一:画出微信的业务架构图
如何画好业务架构图
在 4 种类型的架构(业务架构、应用架构、数据架构、技术架构)中,业务架构居首要位置,它是其他架构的基础,没有业务去谈架构都是空谈。大部分时候聊的架构是偏技术的,用到了什么新技术和哪些中间件,而技术只是一项工具,帮我们解决了一部分问题。如果你学习掌握了业务架构的方法,面对新的业务时能快速上手,就知道怎么构建业务架构。
1. 业务架构方法论 - 三驾马车
本质论: 本质论指做事去抓住本质,只有了解了本质,才能找到对应的方法。像现在很多人一谈性能优化,就说有缓存、用异步消息等等,这些只是手段,并不是问题的本质,没有找到问题的本质,只能是抓瞎,这个在技术架构中会重点讲,高并发、高可用、高扩展、高性能的本质是什么,知道了本质就能推导出来要如何去做。
矛盾论: 矛盾论说的是做事抓住主要的矛盾是什么,每个阶段的矛盾是不一样的,比如刚开始接手一个项目,大量的业务咨询,主要的矛盾是接口提示不明显,工具化弱,经过一轮的优化,答疑量明显下降后,发现做的活重复性工作很多,主要矛盾是复用性低、可扩展性差,这个时候主要矛盾就变化了。把主要矛盾解决了,当前任务的 80% 基本上就解决了。
系统论:系统论让做事把相关性都找出来。我们一般做事情就是线性思维,有一个明显的因果关系,由因能直接推导出结果,但有些事情并不是这么简单,它是非线性的,是有多种因素关联的。这个时候就要运用系统论,把所有影响的因素都找出来,系统考虑。
把上面三个方法论运用在工作中,会解决很多问题,能使你有一种方法思路去处理,不至于像无头的苍蝇。不管是做技术的还是业务的,方法论是相通的,解决问题的思路是一样的,只是运用的工具、表达不一样。后面在技术架构篇单中运用这些方法论去谈技术问题,把平时一些散的点全部会串起来,大部分的人并不是不知道,也积累了很多点,缺少的就是如何把这些点串起来,这也是我写作的最大的目的,不是传递做的技巧,更要传递的是如何去思考,怎么就能想到要用这些方法去实现。
2. 什么是业务架构
业务架构就是指把由多种要素组成的业务有机整体构建出来。业务架构具有以下几个要点
组织性:业务的运转背后是有组织的。
目标性:这项业务的价值是什么。
过程性:业务会划分为一系列的过程。
持续性:大的业务过程一般不会随意变的,至少是相当一段时间内。根据上面的要点,再进行整合
业务架构具有三个特性:
相关利益者:这个是从目标性推导出来的,一项业务一定是有目标和价值的,它也就会涉及到相关的利益者。
业务闭环:这个是从过程性推导出来的,业务有多个过程阶段,这其实就是一个业务闭环,从生产到销售,再到最后的消亡,像一个生命周期一样。
能力分层:这个是系统架构的特性,业务能力一定依赖底层的能力。
3. 业务架构关键
横向"和"纵向"是业务架构的关键,有以下一些方面:
业务流程是怎样的
业务相关利益者有哪些
业务能提供的能力有哪些
业务之下的系统能力有哪些
相关业务有哪些
不管是"横向"还是"纵向",都体现在数据的流动,从数据流动上看,也能看到整个业务流程是怎么进行的。所有的架构最好做到一图胜千言,让大家都能明白它的全局视角,统一认识。
做一项业务一定是有价值的,这个价值体现在对不同利益者的作用,所以分析业务架构是一定先从价值、使命、目标入手,一项一项地往下分解,这个也是符合人的认识的。
微信业务架构图
作业二:“学生管理系统”毕设架构设计
设计要求
假设今年学校毕业设计要求提升,要求做真正可运行的学生管理系统,学院对毕设的具体要求如下:
要求可以通过公网域名访问;
要求至少 3 人合作完成;
能够支撑管理 1000 个学生;
答辩的时候会根据架构方案来进行打分,不推荐太简单和太复杂的方案
你找了 2 个好朋友一起来做这个项目,你们的基本情况如下:
大家都会 Java,但是有一个是 PHP 高手
大家经济条件一般
作业要求:
对照面向复杂度架构设计方法论,构思 2 个以上的备选架构方案。
使用 PPT 来画出你的备选架构方案,并说明方案的优缺点。
给出你选择的最终方案以及选择理由。
架构方案一 (本地架构+容器)
优点:
由于是学校内部架构,很多已经存在的学校设备可以重用,比如说 DNS 服务器,学校的 NFS 的存储系统,甚至一些服务器都可能可以用学校的。图中的备份服务器均可以在预算不足的情况下忽略,但是正式上线部署的时候必须要考虑进去。App 的开发和部署都是采用了容器技术,可以随时进行无缝迁移,非常方便,有很强的扩展性。
缺点:
还是有一定的运维成本在里面,比如数据库的主从备份设计,备份,以及备用服务器的备份。
架构方案二 (云架构)
第二种架构方案是完全云生态的架构,加上现在主流的 K8S 以及容器技术。
缺点:
技术栈比较新,可能需要一定的学习时间
优点:
由于所有的的技术基本都是云原生态的,极大的减少了运维的成本,比如高可用,弹性伸缩,备份恢复等,云原生态的技术都已经有了相关的考虑,所以 3 人小组只需要关注开发即可。考虑到项目的需求,初期上线只需要一个 K8S 的集群加一个 Node,所有的前端和后端容器都可以部署在同一个 node 上面,如果需要扩容,只需要增加 node 以及 replica 的数量就可以。所以从预算的角度应该不会很高。前期一个 K8S 的集群,一个 node 再加上一个云原生态的数据库系统足够了。
由于所采用的技术均为前沿流行技术,可能在学校方面有一个接受问题,以及交接过程的培训问题。
架构方案三 (传统本地架构)
传统本地架构老师已经在课程上进行了讲解,所以不再详细阐述。只是作为一种备选方案,唯一的只需要在 Nginx 之前加上 DNS 服务器即可。
我的推荐
考虑到学生毕业后的就业以及技术发展,还有学校的上云过程推动,我推荐架构方案二。目前已经是 2021 年,容器技术成熟,K8S 技术也趋向于稳定和成熟,并且成为各大 high tech 公司的主要架构方案,从技术革新,个人就业的角度来说,推荐原生态的云架构,加上容器技术,以及 K8S 容器平台。不仅仅让学生在开发过程中减少了服务器的搭建,维护,运维等不必要的过程,同时求知创新,在自己的简历上可以加上这个好项目,对自己的求职也肯定会有帮助。从学校的角度出发,应该也是遵循求知创新的精神,鼓励学生,学校的技术人员开放怀抱,拥抱新的技术。第一套,第二套方案相比,在话费上,如果控制的好的话,有可能云平台更为便宜。但是如果学生技术条件不成熟,时间有限,无法在规定时间内掌握新的技术栈,那么可以退而求其次,选择第一套架构方案。
版权声明: 本文为 InfoQ 作者【9527】的原创文章。
原文链接:【http://xie.infoq.cn/article/dedbb936674d71ed6ddf9c70d】。文章转载请联系作者。
评论