常见软件架构风格

软件架构决策派定义中列举了一系列架构设计阶段需要完成的决策,其中包括“确定架构风格”,那么什么是架构风格?都有哪些常见的架构风格呢?

定义

架构风格定义了一组可以使用的元素类型(比如模块、组件、连接器等),还定义了一组如何使用这些类型的约束,比如系统的实时拓扑结构、模块之间的依赖及组件之间的可视性等。

其实架构风格就和设计模式类似,都是定义了组件及组件之间的关系,不过抽象层次不同而已,因此他们的作用也很类似。

作用

  • 一致性和可理解性:遵循同一个风格得到的结果是一个好主意被彻底的贯彻实施了,而不是一堆随意的、不同的好主意都被实现了。
  • 沟通
  • 设计重用
  • 确保质量属性

常见架构风格列表

《恰如其分的软件架构》一书中给了一个常见架构风格列表。

  • 分层风格:分层架构是最常见的架构,例如常见的对外接口层、业务逻辑层、数据存取层的三层架构,需要注意的是,分层架构是逻辑架构视图的风格。分层架构的元素是层,关系是使用关系,约束是一个层仅仅使用它的下一层,带来的好处是可修改性、可重用性和可移植性的提升。
  • 管道-过滤器风格:在此风格中,数据从管道流向过滤器,过滤器对数据进行处理,这是运行架构视图的风格。管道-过滤器架构风格的元素包括管道、过滤器、读端口和写端口,过滤器从读端口读取数据,进行处理,然后写入到写端口;管道将写端口和读端口连接起来,相当于将两个过滤器连接起来。约束有两个:(1)过滤器独立,过滤器之间无交互。(2)过滤器增量的读、处理和写。典型例子是Linux操作系统的管道+各种可执行命令。带来的好处是可重用性(过滤器可被重用),可修改性和再配置型(可使用管道将多个过滤器连接起来形成灵活的功能)。
  • 以模型为中心的风格:所有组件仅与一个中心模型(也叫数据存储或数据仓库)交互,也被叫做仓库风格、共享数据风格或以数据为中心的风格,这是运行架构视图风格。元素包括一个模型、一个或多个视图、控制器。好处包括:(1)可修改性,这来自于信息生产者和消费者之间的解耦;(2)可扩展性:模型固定后,可方便的添加视图和控制器。典型示例是现代的集成开发环境,中心模型代表了被编辑程序的状态,包括源代码和已被解析的表现形式,这个模型呈现给许多视图和控制器,视图和控制器组件之间是相互独立的,但全部依赖于中心模型组件。
  • 分发-订阅风格:又称基于事件的风格,分发事件和订阅事件的组件是独立的,运行架构视图风格。元素包括分发端口、订阅端口和一个事件总线。通过解耦事件的生产者和消费者,得到了更好的可维护性和可扩展性,不足是可能带来性能损害,因为引入了额外的事件总线来做交互层。
  • 客户端-服务器风格:运行架构视图风格,这也是一个十分常见的架构风格。元素包括客户端组件和服务器组件,通常还有一个请求-响应连接器和一些端口。约束是客户端可以主动发起通信,而服务器端不能。好处是可维护性的提升,因为主要的业务流程实现都在服务器端。 客户端-服务器风格的一个变体是N-层风格(N-Tier),例如将服务器组件的业务逻辑处理和数据处理拆分成“应用层”和“数据层”,这是当前的一个常见风格。
  • 对等风格:也叫点对点风格(Peer-to-Peer),节点之间的通信对等,不能存在分层关系,每个节点都有能力既做客户端也做服务器端,运行架构视图风格。典型示例是BitTorrent网络,带来的好处是可用性、弹性的提升。
  • Map-Reduce风格:元素包括Master Worker、Map Worker、Reduce Worker、Local FileSystem、Gobal FileSystem。大的数据集被拆分成小的数据集splits,然后存储在一个Glbal FileSystem中,每个Map Workder读取一个或多个split金慈宁宫处理,中间结果被写入Local FileSystem,Reduce Workder从多个Local FileSystem中读取中间结果并进行合并,然后写入Gobal FileSystem。Master Worker负责实例化其他Worder、分配split给Map Worder,并监控和处理Workers的健康。约束:各Map Worder相互独立,各Reduce Worder独立。好处:可伸缩性、可用性的提升。

 



 

posted @ 2015-03-08 15:27  李达  阅读(2567)  评论(0编辑  收藏  举报