软件架构的4+1视角模型简介

  4+1视角架构模型(The "4+1" View Model of Software Architecture)一文提出了一种用来描述软件系统体系架构的模型, 这种模型是基于使用者的多个不同视角出发。这种多视角能够解决多个"利益相关者"关心的问题,利益相关者包括:最终用户、开发人员、系统工程师、项目经理等, 能够分别处理功能性和非功能性需求。五个视角中每个都是使用符号进行描述。 这些视角都是使用以架构为中心 场景驱动和迭代开发等方式实现设计的。

  软件架构是针对软件高层结构的实现和设计,它是组织一定数量的架构元素以一定形式来满足系统功能和性能的主要需求,如可靠性、可扩展性、可移植性和可用性。

  软件架构 = {元素, 形式, 原理/约束}

  软件架构是抽象处理的分解和组合的风格和美学。我们使用一个多视图的模型来描述软件体系架构。 为了解决大型的和有挑战性的架构,我们提出的模型是由五个主要的视角:

  1. 逻辑视图
  2. 开发视图
  3. 处理视图
  4. 物理视图
  5. 场景

4+1 view model

对于这四种视图每个视图我们都使用元素组件component, 容器container, 和连接器connector来描述他们。

逻辑视图

  使用面向对象的分解方法,逻辑架构主要支持功能需求,也就是系统应该提供怎样的服务给用户。系统分解为一组关键抽象,如问题域的对象或对象类的形式。利用封装和继承的抽象原则。分解不仅是为了功能分析,也为了识别常见的服务机制和跨系统的设计元素。我们可以使用UML类图和类模板代表逻辑架构的方法。下面类图显示了一组类和它们的逻辑关系:联合association, 组合和继承等。当然以数据驱动的E-R模型也可以表达。DDD领域驱动设计属于面向对象的分解方法。

4+1 logical view

 

处理架构

  处理架构是考虑一些非功能性的需求,例如性能和可用性可扩展性Scalable。它可以解决并发性和分布系统的完整性与容错性等问题,主要指导如何从逻辑视图的抽象融入处理架构之中,比如哪个线程来控制对象的实际执行。

  延迟和吞吐量是衡量处理架构的一对矛盾指标,我们希望获得低延迟和高吞吐量的处理架构。所谓低延迟,也就是用户能感受到的系统响应时间,比如一个网页在几秒内打开,越短表示延迟越低,而吞吐量表示同时有多少用户能够享受到这种低延迟,如果并发用户量很大时,用户感觉网页的打开速度很慢,这意味着处理架构的吞吐量有待提高。

  处理架构可以描述若干个不同的抽象层次,每个层次解决不同的问题。在最高的层次上,处理架构可以被视为一组独立执行通信程序(称为"流程")的逻辑网络,分布在一组硬件资源上,通过局域网或广域网连接。同时可能存在多个逻辑网络,共享相同的物理资源。例如,可以使用独立的逻辑网络中。

  处理是一种分组任务,形成一个个可执行的单元。处理架构在战术上有控制、启动、恢复、重新配置和关闭)等。处理可以复制增加与分布负载,改善可用性。 软件划分为一组独立的任务。一个任务可以是一个单独的线程控制,可以单独安排在一个处理节点上。

  任务分为主要任务和次要任务,主要任务是处理架构元素,能够直接被关注定位,次要任何为了实现细节导入的附加任务,比如循环活动 缓冲 或计时等等,他们都可以轻量的线程来执行。

  主要任务之间通讯是通过一系列内部任务通讯机制:同步或异步,基于消息的通讯服务,远程调用,事件广播等。次要任务主要是通过约定的共享内存通讯。

4+1 process 架构

 

开发架构

  开发架构关注实际的软件开发环境中的软件模块组织。软件打包可以小程序库或子系统等形式,子系统是由一个或少量的开发人员开发的系统。子系统有良好的组织层次结构,每一层都提供了一个狭窄的和良好定义的接口层。开发系统是由模块和子系统的架构组成的,表达了"出口"和"进口"的关系。参考C4模型 干净的架构 

4+1 development

 

物理架构

  物理架构主要考虑系统的非功能性需求,如可用性、可靠性(容错)、性能(吞吐量)和可伸缩性。软件在计算机网络或处理节点上执行,需要确定的各种元素:网络、处理、任务和对象都需要被映射到各个节点。我们预计需要使用几个不同的物理配置:一些在开发和测试阶段,其他在部署阶段配置,  系统的各种网站或为不同的客户。软件的映射节点,因此需要高度灵活以及对源代码本身产生最小的影响的运行平台,云计算和Docker之类的Pass能够满足这样的物理架构。

.Physical

 

场景

  四个视图中的元素通过场景能够一起无缝工作,场景对应着用例,它实现上对应相应的脚本(流程),也就是对象之间的序列交互,使用对象场景图和对象交互图来表示。

  场景作为4+1中的+1视图,承担着在架构设计时驱动发现架构元素的任务,同时也是架构设计完成后进行验证和假设认证的理论测试。

C4模型

分解和组合的抽象方法

你应该知道的四种优秀架构

NoSQL数据建模

软件架构专题

领域事件