架构顾名思义,就是解决业务问题的框架结构。 其有两个主体特征:
1
支撑系统主要业务
2
从主业务视角看,架构功能足够内聚单一
支撑主业务流程比较好理解,可以从两个方面考虑:
首先业务的主工作量都要在架构上体现,即架构抽象了主业务流程内的重复并提供一种设计构造让这些主业务流程复用;否则就很可能就是架构设计抽象的广度不够或者深度不够。
其次就是刚开始设计架构的时候,先考虑业务的主要方面,一些细节旁支可以先不用考虑,架构的本质就是抽象和组织,过早考虑细节和旁支会干扰主架构抽象的清晰程度;否则就会犯架构面面俱到的问题。
孙子兵法云:备前则后寡,备后则前寡;备左则右寡,备右则左寡;无所不备,则无所不寡。讲的就是克服架构设计中的贪心和侥幸心理,想面面俱到,其实就是面面都不俱到。
能够抓住主要问题,解决透彻就很成功了
架构的功能内聚、单一是架构另一个重要特征。比如人们有居住的需求,需要房屋,从用户需求分析,对房屋墙壁来说,要能起到遮风挡雨、采光通风、坚固宽敞等作用。
转换为业务需求就是要墙壁具备支撑、屏蔽等功能。对于普通的砖房,墙壁占据了主体功能的相当比重,满足架构特征1,但是墙壁同时混杂了支撑和屏蔽两项功能,不满足架构特征2,这样调整屏蔽功能时(像改变门窗的位置以改善采光通风等)就会影响承重支撑功能,带来安全隐患。
而对于钢筋混凝土结构的建筑,其支撑功能通过柱子和梁实现,屏蔽功能通过空心砖实现,
绝大部分墙壁仅是遮蔽不提供承重支撑,承重的支撑功能和屏蔽功能各自内聚后,同时具备了架构特征1和特征2。装修时就可以就很容易改变装饰墙的布局,可以用代价更小的应对需求变化。
架构的本质就是抽象
其目的通过抽取内部的相似性内聚成框架从而实现自身内部主业务逻辑间的复用。
比如电信领域核心网很多业务的处理,都是消息的收发以及消息收到后的逻辑处理,经过观察可以发现,逻辑处理功能边界比较清晰,可以抽象成执行器;仅是收到消息后执行器不同的执行顺序不同而已,这些执行顺序可以定位为关系,这些关系可以抽象为sequence(顺序执行)、optional(选择)、and(同时成功)、or(任一成功)等,通过这些关系把执行器连接起来。
同时这些关系组合后还具有原子性,组合后的东东还可以和其他关系组合,进而把整体业务流程串接起来并定义好,然后调用通用执行器(数据驱动)和少量自定义执行器就可以完成不同的业务流程。
其本质就是公共处理流程通过框架实现,特异部分通过回调实现定制。
之所以要强调架构的内聚单一,主要从以下几点考虑:
1
架构的可理解性
架构是系统成败的关键,只有内聚单一的架构才能足够的简单(简单非容易,一个繁杂的事情如果天天做,也会变得容易,但这件繁杂事情的本事很可能不是简单,之所以繁杂,很大程度是存在很多部分重复,没有抽象归并),这样系统就变得更容易理解,才能更好保证架构的正确性。架构的正确性是设计出来的,而不是测试出来的。
如果设计时候架构不够内聚单一,可理解性就不是很强,而是单单靠功能测试来验证架构的正确性,就会出现海森堡的测不准原理带来的问题,即潜在问题无法预知。
出现很多重大隐患。比如在一个高吞吐流量处理的场景下,设计一个无锁架构,如果架构不能完全看懂,仅通过测试去保证正确性几乎不可能,测试时是无法穷尽所有场景的。
2
抽象的程度
不易理解的架构一般都是复杂耦合的内部组成从而带来的晦涩性,往往都是架构抽象的广度和深度不足导致的。对问题的本质缺乏足够理解。
如果抽象层次不够,就会对业务中重复的部分没有消重合并,造成架构不够清晰。比如我们描述物体的运动,抽象为直线运动、抛物运动、圆周运动。。。,这里虽然进行了 抽象,但抽象程度还不够,直线运动、抛物运动、圆周运动还可以进一步抽象为牛顿运动定律。
当然架构一步抽象到位很难,实际是一个演进的过程。实际上我们也推崇架构持续演进,很多时候一个实实在在的架构摆在那里,往往更容易激发出其新的抽象思路,凭空想象一般很难。
综上,抽象程度的不足也会影响架构的可理解性,从而影响架构的内聚单一特征。
3
架构的扩展性
架构足够内聚单一以后,扩张性也会得到大幅提升。从功能组合看,由于内聚单一,架构要素之间耦合小,互相独立扩张,波及影响较小,比如钢筋混凝块架构,要改善装饰墙的布局就比较容易,也不容易带来安全隐患。
另一方面,从自身功能强化上看,架构里某一设计构造单体可以很容易沿着设计方向往更高、更快、更强方面纵向扩展。
单点突破总容易碰到瓶颈,能够很容易横向扩展就变得很有意义了,设计构造单体之间形成部分-整体的递归串接关系,定义好恰当的接口,沿着设计方向扩展时产生链式传播效果,从而大幅提升扩展的幅度。
这些好处都是架构足够内聚单一带来的效应。
对于砖房来说,由于砖块承重,高度会很容易碰到一个天花板,或者达到一个极致高度时候,砖块用量带来的代价不可接受;而钢筋混凝土架构承重靠内聚单一的架构,在一定成本上,造摩天大楼就变得相对容易。
综上,架构本质就是抽象,把相似性进行归并,从而得到足够内聚单一的设计构造,实现主业务功能支撑和核心非功能需求。
土鳖抗铁牛(to be)
声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/213234.html