对于「架构」这个词你应该不会陌生,如果你在企业内部,那应该听说过「组织架构」;而如果你从事软件行业,那架构这个词应该就再熟悉不过了,什么「企业架构」、「业务架构」、「软件架构」、「系统架构」、「数据架构」、「安全架构」等等等等。
那这些架构分别表示什么意思呢?如果你去网上寻求答案,你会发现答案千差万别。
本文将尝试回答这个问题。
软件架构
先从我们比较熟悉的「软件架构」说起。在「什么是软件架构 」一文中,我们先给架构下了个定义:
架构是特定约束下决策的结果,并且这是一个循环递进的过程。
然后基于这个定义,分别对「约束」、「决策」和「结果」进行具象化:
- 约束
- 功能性需求
- 非功能性需求
- ......
- 决策
- 技术选型
- 规范
- 系统切分
- 组件之间的关系
- ......
- 结果
- 满足约束的软件系统
- 相关文档
- 用例图
- 决策过程文档(各个方案优缺点,选择该方案的原因)
- 架构视图
- ......
- 备选方案
- ......
我们得到了「软件架构」的定义:「软件架构定义了一组组件以及这些组件之间的通信方式(决策结果),以完成目标功能(约束)。」
实际上,对「约束」、「决策」和「结果」的界定范围的不同,我们就可以对上述的各种架构类型进行定义。
系统架构
「系统」是个很抽象的词,可大可小:
- 铅笔是个系统
- 人体是个系统
- 公司是个系统
- 地球是个系统
- 宇宙是个系统
- ......
但是,无论是哪种系统,都是由一组单元(Unit)及其之间的关系组成,以完成特定的功能:
- 铅笔由笔芯、笔杆组成,用于完成写字、绘画等功能
- 人体由头部、身体、四肢等组成,可以吃喝玩乐......
- 公司由各个部门组成,可以从事商业活动
- 地球由大气层、地壳、地核等组成,提供可供人类、动植物生活的场所
- 宇宙由行星、恒星、黑洞等组成,提供各种星球所能正常运行的空间
- ......
所以,「系统架构」可以这么定义:「系统架构定义了一组单元/元素(Unit/Element)以及这些单元/元素之间的通信方式(决策结果),以完成目标功能(约束)」。
其它架构类型
上面我们从「软件架构」的定义出发,向上抽象出了「系统架构」的定义,基于「系统架构」的定义,我们可以向下细化出其它架构的定义。
- 组织架构:定义了一系列的部门以及部门与部门之间的关系,以完成整个公司的运作
- 企业架构:基于业务,定义了组成企业的所有不同要素,以及它们之间如何相互联系(如何作用)。一般企业架构又会拆分为业务架构、IT架构
- 业务架构:定义了一系列的业务结构及其之间的关系,以提供业务能力完成对应的业务目标
- IT架构:定义了一系列的IT组件及其之间的关系,以完成业务功能
- 应用架构:定义了一系列的系统、子系统、模块及其之间的关系,以完成业务功能
- 数据架构:定义了一系列的数据结构及其之间的关系,对业务及应用系统提供数据支撑
- 安全架构:定义了一系列的安全控制模块及其之间的关系,以对目标系统提供安全保障功能
架构视图
架构视图是对于从某一视角或某一点上看到的系统所做的简化描述,描述中涵盖了系统的某一特定方面,而省略了于此方面无关的实体。
比较出名的视图模型是由Rational软件公司的P.Kruchten提出的"4+1"模型,具体可参见「4+1架构视图 」:
- 逻辑视图:设计的对象模型(使用面向对象的设计方法时)。这是一个静态视图,描绘的是系统的静态逻辑结构。论文中使用的是对象模型,不过并不是强制的,只要能表达出意图即可。
- 过程视图:捕捉设计的并发和同步特征。这是一个流程图,通过对进程的描述,将系统中的各个组件串联到一起。和上面的逻辑视图结合,可以得到一个相对动态的系统结构。
- 物理视图:描述了软件到硬件的映射,反映了分布式特性。这是一个静态视图,表示系统的各个组件、子系统是如何部署的。
- 开发视图:描述了在开发环境中软件的静态组织结构。这也是一个静态视图,表示系统在代码层面的结构。
- 场景:整合上述四个视图。通过一个个的用例流程将系统组件串联到一起。既可用于完善上面的各个视图,也可以用于验证上面的视图意图。
架构类型与架构视图
在「什么是架构模式和架构风格 」一文中,我们讨论了架构模式和架构风格的区别:
- 架构模式:针对某个特定上下文的某类问题的解决方案
- 架构风格:就是一个解决方案
乍看之下区别不是很大,不过细究起来还是有比较大的差别的,架构模式有场景、有问题,而架构风格没有。
而架构类型和架构视图乍看之下区别也不大,实际细究起来,区别也不是很大。上面的各种架构类型实际都可以看成是真实系统的一个视图:
- 组织架构:从组织视角来看系统
- 企业架构:从企业视角来看系统
- 业务架构:从业务视角来看系统
- IT架构:从软件视角来看系统
- 应用架构:从应用视角来看系统
- 数据架构:从数据视角来看系统
- 安全架构:从安全视角来看系统
和上面的4+1视图的区别主要就是视角上的差异,还有就是范围上的差异。上述的各架构类型之间的关系大致如下图所示:
- 系统架构是最抽象的一层,其中包含了组织架构、人体架构、地球架构、宇宙架构、企业架构等
- 企业架构又可以拆分为业务架构、IT架构
- 其中业务架构可以分为组织架构、业务策略和业务流程架构
- 而IT架构又可以分为应用架构、技术架构、数据架构、安全架构等,上述架构均包含了软件架构和硬件架构
架构类型间的包含关系并不是完全如上图所示的,也分场景。比如:数据架构可能并不一定是属于IT架构的,可能是和企业架构、IT架构同级的,甚至是和企业架构同级的
总结
本文是个人对架构类型和架构视图的梳理和理解。总结一句话,万物都有多面性,要多维度的观察分析。
参考资料
- System Architecture(https://en.wikipedia.org/wiki/Systems_architecture)
- Applications architecture(https://en.wikipedia.org/wiki/Applications_architecture)
本文暂时没有评论,来添加一个吧(●'◡'●)