架构的缘起与目标
肉眼品世界
共 4115字,需浏览 9分钟
·
2021-03-25 22:47
不要气馁,平常心,其实人人都是架构师,可能你做的任一一件事已无形中用到了架构。
1 架构的背景
1.1 机器语言
1000100111011000
面对上面的1&0的字符串,不用多说,程序员心里肯定会万马奔腾吧,更别说输入错误要去定位问题,求程序员的心里阴影面积?
太难写、太难读、太难改!
1.2 汇编语言
mov ax,bx
汇编语言需要针对不同 CPU 的汇编指令和结构,代码编写多份。
1.3 高级语言
(+ 4 6)
1.4 两次软件危机
第一次软件危机与结构化程序设计 高级语言的出现,解放了程序员,但好景不长,随着软件的规模和复杂度的大大增加,软件质量低下,质量把控难度高,项目无法如期完成,严重超支等现象。例如,1963 年美国的 水手一号火箭发射失败事故,就是因为一行 FORTRAN 代码错误导致的。 所以,为了解决上面的问题,针对性的提出了解决方法“软件工程”,虽然“软件工程”提出之后也曾被视为软件领域的银弹,但后来事实证明,软件工程同样无法根除软件危机,只能在一定程度上缓解软件危机。 差不多同一时间,“结构化程序设计” 作为另外一种解决软件危机的方案被提了出来。结构化程序设计的主要特点是抛弃 goto 语句,采取“自顶向下、逐步细化、模块化”的指导思想。 结构化程序设计本质上还是一种面向过程的设计思想,但通过“自顶向下、逐步细化、模块化”的方法,将软件的复杂度控制在一定范围内,从而从整体上降低了软件开发的复杂度。 第二次软件危机与面向对象 结构化编程的风靡在一定程度上缓解了软件危机,然而随着硬件的快速发展,业务需求越来越复杂,以及编程应用领域越来越广泛,第二次软件危机很快就到来了。 第二次软件危机的根本原因还是 在于软件生产力远远跟不上硬件和业务的发展。 第一次软件危机的根源在于 软件的“逻辑”变得非常复杂; 第二次软件危机主要体现在 软件的“扩展”变的非常复杂; 结构化程序设计虽然能够缓解软件逻辑的复杂性,但是对于业务变化带来的软件扩展却无能为力。软件领域迫切希望找到新的银弹来解决软件危机,在这种背景下,面向对象的思想开始流行起来。 虽然面向对象开始也被当做解决软件危机的银弹,在一定程度上解决了软件“扩展”带来的复杂性。但事实证明,和软件工程、结构化程度设计一样,面向对象也不是银弹,而只是一种新的软件方法而已。
1.5 软件架构的产生
系统规模庞大,内部耦合严重,开发效率低; 系统耦合严重,牵一发动全身,后续修改和扩展困难; 系统逻辑复杂,容易出问题,出问题后很难排查和修复;
“模块”、“对象”和“组件”本质上都是对达到一定规模的软件进行拆分,差别只是在于随着软件的复杂度不断增加,拆分的粒度越来越粗,拆分的层次越来越高。
2 架构指什么
2.1 系统与子系统
系统泛指由一群 有关联 的个体组成,根据某种 规则运作,能完成 个别元件不能单独完成的工作的群体。它的意思是“总体”、“整体”或“联盟”。
关联:系统是由一群有关联的个体组成的,没有关联的个体堆在一起不能成为一个系统,例如:把一个发动机和一台PC放在一起不能称之为一个系统,把发动机、底盘、轮胎、车架组合起来才能成为一台汽车。 规则:系统内的个体需要按照指定的规则运作,而不是单个个体各自为政。规则规定了系统内个体分工和协作的方式。例如:汽车发动机负责产生动力,然后通过变速器和传动轴,将动力输出到轮胎上,从而驱动汽车前进。 能力:系统能力和个体能力有本质的差别,系统能力也不是个体能力之和,而是产生了新的能力。例如:汽车能够载重前进,而发动机、变速器、传动轴、车轮本身都不具备这样的能力。
子系统也是由一群有关联的个体所组成的系统,多半会是更大系统中的一部分。
微信本身是一个系统,包含聊天、登录、支付、朋友圈等子系统; 朋友圈这个系统又包括动态、评论、点赞等子系统; 评论这个系统可能又包括防刷子系统、审核子系统、发布子系统、存储子系统等; 评论审核子系统不再包含业务意义上的子系统,而是包括各个模块或者组件,这些模块或者组件本身也是另外一个维度上的系统,例如:MySQL、Redis等存储系统,但不是业务子系统。
2.2 模块与组件
2.3 框架与架构
从业务逻辑的角度分解,“学生管理系统”的架构 “学生管理系统”的架构 从物理部署的角度分解,“学生管理系统”的架构 “学生管理系统”的架构 从开发结构的角度分解,“学生管理系统”的架构 “学生管理系统”的架构
2.4 重新定义架构
软件架构指软件系统的顶层结构。
3. 架构的目标
推荐阅读:
不是你需要中台,而是一名合格的架构师(附各大厂中台建设PPT)
评论