1.什么是好的架构图?
- 简洁抽象:好的架构图一定是简洁的,表现上简洁有力,能够一眼看上去就经纬分明。有一定的抽象度的,如果一个架构图存在各种飞线环线,那一定是抽象的不够。抽象才有意义,架构里如果存在各种细节,那就是堆砌。
- 可解释:好的架构图一定能够用来解释当前系统的现状和行为。
- 指导行动:好的架构图一定是可以指导行为的,指导行动才是架构图的最大价值。能够预测未来,指导行动。对于某个领域架构图,根据架构图都不知道把某个模块放哪里,那就是失败的。好的架构图应该是对于一个没有经验的人,都能根据架构来做模块划分。
- 可进化:对应于系统的动态性,架构也会随着时间而进化的。不能进化的架构就像花瓶,看着很美,一碰就碎。
2.架构描述
对架构的呈现业界已经存在不同的框架。有4+1视图、C4 模型、TOGAF 提出的企业架构模型等。不管哪种模型,其核心思想都是从不同的维度对软件架构进行描述。下面着重从这几个方面来简述。
2.1 4+1模式
4+1视图由 Philippe Kruchten 提出的对软件工程逻辑架构的描述,目前已经成为事实上的软件结构标准,分别以终端使用者、开发者、系统工程师、软件经理等不同的视角对软件进行描述。如下图所示:
- 逻辑视图(Logic View):终端使用者的视角,从功能角度来描述不同功能组件的层次关系。
- 开发视图(Development View):开发者视角下,从实现层面描述不同代码的包、类、库的构成关系。
- 过程视图(Process View):不同组件之间的行为关系,通常以时序图的形式来表示,有一定的时序延展性。
- 物理视图(Physical View):部署视图,系统所依托的物理视图。
- 场景视图(Scenarios):系统所涉及的不同对象之间的关系。通常以用例图的形式来呈现。
基于这5个视角,可以衍生出5种架构模型。场景、功能、实现、过程、部署,一层层的抽象。4+1架构视图,构建了一个观察了解系统框架。它告诉我们可以从逻辑视图、开发视图、过程视图、物理视图、场景视图这几个层面来对系统进行描述、观察、理解。对于一个系统,这5个视角已经是很完备了。值得注意的是4+1更大的价值是提供了一套分析系统的框架,实际上怎么呈现不同的团队可能有不同的形式。对于一个系统从不同的视角看会得到不同的理解,横看成岭侧成峰。
2.2 C4模型
C4 模型是由 Simon Brown 在2006年至2011年之间创建,在4+1模型的基础上建立( https://c4model.com/ ),实际上就是以下4个单词的缩写:
- 上下文 Context:描述的系统与周边系统、人的关系。重点是该系统与外界的关系。这里的外界包含人、以及其他的系统。
- 容器 Containers:容器是一个功能的单位,是从技术层面来描述,可以是一个服务,也可以是一个技术组件或者一个功能模块。例如一个基金系统会包含交易服务、订单服务、商品服务等。
- 组件 Components:组件是容器的的组成,组件是对容器的放大,例如商品服务里包含 sku 管理、行情数据、衍生指标等。
- 代码 Code:这一层次是代码级别,包含接口、类、对象的继承、组合、包含等。
该模型是对一个系统从宏观到微观逐级展开来描述,犹如拿着放大镜从太空看地球一样。第一层看到的是地球与其星球的环绕、第二层是看到地球上的山川海河,第三层看到的是不同的国家城市,第四层看到的是不同的房子家庭。
C4 模型基于4+1模型,但是也有些差异。如果说4+1重点是横看成岭侧成峰。那 C4 模型则是一窥到底的放大镜。C4 模型告诉我们,不同抽象层次的关注点、挑战点、问题域都是不同的,站在不同的层次就要思考对应的事情。关注点一旦与该层次不匹配就会出现逻辑错乱问题。能分清楚问题域在何种层次其实已经把问题解决一大半了。
有时候,在低层次很难解的问题,上升一个层次就迎刃而解了。有时候,在高层次看不清的问题, 降低一个层次就一目了然了。高层次是低一层的抽象,低层次是高一层的具化。高手应该是能够识别不同的抽象层次,并且可以游刃有余地在不同抽象层次之间穿梭。处于高层次时不应该被低层次的具体牵绊,处于低层次的时候也不应该好高骛远。
2.3 TOGAF-4A 架构
- 业务架构:业务战略,治理,组织和关键业务流程。从企业视角来看,重在价值、信息、协作,关联多部门。
- 应用架构:要部署的各个应用程序的蓝图,其交互以及与组织核心业务流程的关系。
- 数据架构:一个组织的逻辑和物理数据资产和数据管理资源的结构。
- 技术架构:支持部署业务,数据和应用程序服务所需的逻辑软件和硬件功能。这包括IT基础设施,中间件,网络,通信,处理和标准。
TOGAF 认为架构的目的是为了帮助企业实现如下能力:异构到同构(塑造同构 IT)、事后到事先(塑造规划 IT)、离散到统一(塑造统一 IT)、无序到有序(塑造有序 IT)。
2.4 实际模型-互联网模型
实际上,相对于传统的软件系统,互联网行业发展比较快,业务存活周期比较短,就形成了互联网行业特定的架构描述方式。更多是以业务架构、技术架构、部署架构三种形式呈现。
- 业务架构:从业务角度描述系统承载的功能集合、领域边界、各组成部分的逻辑关系。区别于技术架构,业务架构图里避免出现技术类的术语,如 DB、MySQL、CMQ、同步、异步、并发等。
- 技术架构:从技术角度描述系统各组成部件之间的交互关系,技术架构体现的要具有技术特色,例如同步、异步、消息等。
- 部署架构:从物理角度描述系统的部署分布。