常见架构风格

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

定义

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

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

作用

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

常见架构风格列表

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

  • 分层风格:分层架构是最常见的架构,例如常见的对外接口层、业务逻辑层、数据存取层的三层架构,需要注意的是,分层架构是逻辑架构视图的风格。分层架构的元素是层,关系是使用关系,约束是一个层仅仅使用它的下一层,带来的好处是可修改性、可重用性和可移植性的提升。
  • 管道-过滤器风格:在此风格中,数据从管道流向过滤器,过滤器对数据进行处理,这是运行架构视图的风格。管道-过滤器架构风格的元素包括管道、过滤器、读端口和写端口,过滤器从读端口读取数据,进行处理,然后写入到写端口;管道将写端口和读端口连接起来,相当于将两个过滤器连接起来。约束有两个:(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独立。好处:可伸缩性、可用性的提升。
时间: 2024-10-29 19:08:33

常见架构风格的相关文章

理解本真的REST架构风格

引子 在移动互联网.云计算迅猛发展的今天,作为一名Web开发者,如果您还没听说过“REST”这个buzzword,显然已经落伍了.夸张点说,甚至“出了门都不好意思跟别人打招呼”.尽管如此,对于REST这个泊来品的理解,大多数人(包括一些资深的架构师)仍然停留在“盲人摸象”的阶段.常常听到各种各样关于REST的说法,例如:有人说:“我们这套新的API决定不用Web Service(SOAP+WSDL),而是直接使用HTTP+JSON,也就是用RESTful的方式来开发.” 不用SOAP,甚至也不用

理解本真的REST架构风格(转)

本文是“深入探索REST”专栏系列深度内容中的第二篇,它将带您领略REST架构的起源.与Web的关系.REST架构的本质及特性,以及REST架构与其他架构风格之间的比较. 引子 在移动互联网.云计算迅猛发展的今天,作为一名Web开发者,如果您还没听说过“REST”这个buzzword,显然已经落伍了.夸张点说,甚至“出了门都不好意思跟别人打招呼”.尽管如此,对于REST这个泊来品的理解,大多数人(包括一些资深的架构师)仍然停留在“盲人摸象”的阶段.常常听到各种各样关于REST的说法,例如:有人说

架构风格之比较

转至InfoQ上的<理解本真的REST架构风格>一文 从架构风格的抽象高度来看,常见的分布式应用架构风格有三种: 分布式对象(Distributed Objects,简称DO) 架构实例有CORBA/RMI/EJB/DCOM/.NET Remoting等等 远程过程调用(Remote Procedure Call,简称RPC) 架构实例有SOAP/XML-RPC/Hessian/Flash AMF/DWR等等 表述性状态转移(Representational State Transfer,简称

【DDD】领域驱动设计实践 —— 架构风格及架构实例

概述 DDD为复杂软件的设计提供了指导思想,其将易发生变化的业务核心域放置在限定上下文中,在确保核心域一致性和内聚性的基础上,DDD可以被多种语言和多种技术框架实现,具体的框架实现需要根据实际的业务场景和需求来制定. 核心的指导思路归纳为: 关注点放在domain上,将业务领域限定在同一上下文中 降低上下文之间的依赖,通过‘开发主机服务’(REST服务是其中的一种).‘消息模式’.‘事件驱动’等架构风格实现 遵循分层架构模式 架构风格 针对DDD的架构设计,<实现领域驱动设计>提到了几种架构风

[转]理解本真的REST架构风格-By李锟

最近看到一个词语“REST”风格,就百度了一下,度娘很给力,下面就是我认为写的最好的一篇介绍. 原文地址:http://www.infoq.com/cn/articles/understanding-restful-style 本文是“深入探索REST”专栏系列深度内容中的第二篇,它将带您领略REST架构的起源.与Web的关系.REST架构的本质及特性,以及REST架构与其他架构风格之间的比较. 引子 在移动互联网.云计算迅猛发展的今天,作为一名Web开发者,如果您还没听说过“REST”这个bu

架构风格与基于网络应用软件的架构设计(一)

作者:Roy Thomas Fielding 译者:李锟 论文摘要 Web(万维网,英文全称World Wide Web,简称Web)的成功,很大程度上是因为其软件架构的设计满足了拥有互联网规模(Internet-scale)的分布式超媒体系统的需求.在过去10年间,通过对定义Web架构的规范所做的一系列修改,Web以迭代的方式不断地发展着.为了识别出Web需要改善的那些方面,并且避免对其进行不必要的修改,需要一种现代的Web架构模型,用来指导Web的设计.定义和部署. 软件架构方面的研究探索的

架构风格

传统的架构风格 依据David Calvert在1996年给出了一份架构风格/模式的清单,架构风格包括了: 数据流系统——批处理,管道-过滤器. 调用-返回系统——主程序和子程序,面向对象系统,分层. 独立组件——通信过程,事件系统. 虚拟机——解释器,基于规则的系统. 以数据为中心的系统(仓库)——数据库,超文本系统,黑板. 数据流风格 面向数据的架构风格,软件的处理粒度是赤裸裸的“数据”,而不需对数据进行任何的“包装”. 批处理序列 组件为一系列固定顺序的计算单元(独立程序),组件间只通过数

转:理解本真的 REST 架构风格

引子 在移动互联网.云计算迅猛发展的今天,作为一名 Web 开发者,如果您还没听说过"REST"这个 buzzword,显然已经落伍了.夸张点说,甚至"出了门都不好意思跟别人打招呼".尽管如此,对于 REST 这个泊来品的理解,大多数人(包括一些资深的架构师)仍然停留在"盲人摸象"的阶段.常常听到各种各样关于 REST 的说法,例如:有人说:"我们这套新的 API 决定不用 Web Service(SOAP+WSDL),而是直接使用 H

搭建基于spring MVC框架 + RESTful架构风格技术总结

实战篇: 在SpringMVC框架中搭建RESTful架构风格来完成客户端与服务器端的低耦合度.可扩展性.高并发与大数据流量的访问. 用RESTful架构的创建步骤: 1.创建一个全新的Web工程 2.导包,导入所需要的所有第三方jar包.(springMVC+Hibernate的基本包是必须的) 3.作配置,针对不同的项目需求和不同的搭建设计,开发人员可以按照自己的编码风格来设计符合项目开发具体 应该用多少篇配置文件.但是这几篇配置文件是必不可少的: 3-1.web.xml配置文件:最基本的配