目录
1. Client/Server Pattern 例子:网易
2. Peer-to-Peer Pattern 例子:Skype
3. Service-Oriented Architecture Pattern
6. Relationship between Tactics and Patterns
0.前言
本系列文章旨在软件设计与体系结构的知识点,资料来源四川大学授课内容,可用于期末复习,笔者理解尚浅,文中不正之处静待批正。加粗部分为重点。

1. Client/Server Pattern 例子:网易
客户/服务器模式属于组件和连接器模式
1)Context:大量分布式客户希望访问共享资源和服务,我们希望对其访问或服务质量进行控制
2)Problem:通过管理一系列共享资源和服务,我们如何能够:促进可修改性和重复使用;提高可扩展性和可用性
3)Solution:组件类型是客户机和服务器;客户机通过请求服务器的服务进行交互,服务器则提供一系列服务;客户机-服务器模式的主要连接器类型是由用于调用服务的请求/重放协议驱动的数据连接器
Element:Client;Server;Request/replay connector
Relation:attachment relation附加关系将客户与服务器联系起来
Constraints:客户端通过请求/重放连接器连接到服务器;服务器组件可以是其他服务器的客户端;特殊化可能会施加限制:特定端口的附件数量,服务器之间允许的关系;组件可以按层级排列
4)缺点:服务器可能是性能瓶颈;服务器可能是单点故障;关于在何处(客户端或服务器)设置功能的决定往往很复杂,而且在系统建立后要进行更改的成本很高
5)应用:在本地网络上运行的信息系统,客户机是图形用户界面启动的应用程序,服务器是数据库管理系统;基于网络的应用程序,客户机是网络浏览器,服务器在电子商务网站上运行
2. Peer-to-Peer Pattern 例子:Skype
点对点(P2P)模式属于组件和连接器模式。点对点模式通过合作的点对点(peers)实现计算,这些点对点(pees)通过网络相互请求服务和提供服务
1)Context:分布式计算实体,每个实体在启动交互时都被视为同等重要;每个实体都提供自己的资源,为分布式用户群提供服务
2)Problem:如何通过通用协议将一组平等的分布式计算实体相互连接起来,使它们能够以高可用性和可扩展性组织和共享服务?
3)Solution:在 P2P 模式中,各组件作为对等体直接交互;所有对等体都是平等的;没有一个对等体或一组对等体对系统的健康至关重要;每个对等体组件既是客户端也是服务器;每个对等体提供和消费类似的服务,并使用相同的协议
Element:peer,是在网络节点上运行的独立元件;特殊的对等元件可提供路由、索引和对等搜索功能
Relation:请求/重放连接器,用于连接对等网络、搜索其他对等网络和调用服务;将对等网络与其连接器关联起来的关系;运行时可能会更改附件Attachments
Constraints:任何给定对等体允许的附件数量;用于搜索对等体的跳数;哪些对等体知道哪些其他对等体
4)缺点:管理安全性、数据一致性、数据/服务可用性、备份和恢复都更为复杂;小型 P2P 系统可能无法始终如一地实现性能和可用性等质量目标
5)优点:可扩展性:Scalability;Availability;Performance
6)应用:分布式计算应用中经常使用 P2P 模式;文件共享:BitTorrent 和 eDonkey;即时通讯:Skype;桌面网格计算;路由;无线特设网络
3. Service-Oriented Architecture Pattern
面向服务架构(SOA)模式属于组件和连接器模式
1)Context:服务提供商提供许多服务,而消费者则使用这些服务。消费者需要能够理解和使用这些服务,而无需对其实施有任何详细了解。
2)Problem:如何支持运行在不同平台上、用不同实现语言编写、由不同组织提供、分布在互联网上的分布式组件的互操作性?
3)Solution:SOA 模式描述了一组提供和/或消费服务的分布式组件;服务在很大程度上是独立的:服务提供方和服务消费方通常独立部署
Element:Service providers;Service consumers;Enterprise service bus ( ESB );Registry of services;Orchestration server;Connector(中介组件)
ESB 是一个中介机构,可以在服务提供商和消费者之间路由和转换信息;ESB 可以将信息从一种协议或技术转换为另一种协议或技术
SOA 中使用的基本连接器Connector类型如下: SOAP 连接器,使用 SOAP 协议在网络服务之间进行同步通信;REST(表述状态传输)连接器,依赖于基本的请求/重放操作;异步消息传递连接器,使用消息传递系统
Relation:将不同类型的组件连接到相应的连接器上attachment relation
Constrain:服务消费者与服务提供者相连,但可以使用中介组件(如 ESB、注册表registry、协调服务器orchestration server等)
4)缺点:基于 SOA 的系统通常构建复杂;你无法控制独立服务的演进;与中间件相关的性能开销,服务可能成为性能瓶颈
5)优点:互操作性Interoperability:由于服务提供者和服务消费者可能在不同的平台上运行,因此 SOA 通常会集成各种系统
6)应用:IBM的WebSphere MQ(消息队列);Microsoft的MSMQ;Apache的Active M;企业应用集成
4. Publish-Subscribe Pattern
发布-订阅模式属于组件和连接器模式;在 "发布-订阅"模式中,组件发布和订阅事件。当组件发布事件时,连接器基础设施会将事件发送给所有注册订阅者
- Context:有许多独立的数据生产者和消费者必须进行互动;数据生产者和消费者的确切数量和性质不是预先确定或固定的,他们共享的数据也不是预先确定或固定的。
- Problem:我们怎样才能创建一种集成机制,支持在生产者和消费者之间传输信息的能力,使他们不知道对方的身份,或可能不知道对方的存在?
- Solution:在发布-订阅模式中,组件通过发布的消息或事件进行交互;组件可订阅一组事件
- Element:C&C 组件至少有一个发布或订阅端口;发布-订阅连接器,将为希望发布和订阅事件的组件提供 "发布 "和 "监听 "功能
- Relation:附件关系attachment relation将组件与发布-订阅连接器联系起来,规定哪些组件宣布事件,哪些组件注册接收事件
- Constraints:所有组件都与事件分发器相连;发布端口具有 "发布 "角色,订阅端口具有 "监听 "角色;系统内可以存在许多发布-订阅连接器
- 不同形式的发布-订阅者模式:基于列表的发布-订阅是每一个发布者维护一个订阅列表的模式的实现;基于广泛的发布-订阅只是广播事件;基于内容的发布-订阅将事件归类为基于主题的事件
- 缺点:延迟增加;对信息传递时间的可扩展性和可预测性有负面影响;对信息顺序的控制较少;信息传递得不到保证
- 应用:图形用户界面 (GUI) 系统;基于 MVC 的应用程序;企业资源规划 (ERP) 系统,集成了许多部分;可扩展的编程环境;邮件列表
5. Map-Reduce Pattern
Map-reduce 模式属于分配模式,map-reduce 模式为分析大型分布式数据集提供了一个框架,该框架将在一组处理器上并行执行。
- Context:企业迫切需要快速分析 PB 级的海量数据,如社交网站日志、搜索引擎的<源、目标>网络链接对;用于分析这些数据的程序应能高效运行,并能承受硬件故障的影响
- Problem:map-reduce 模式要解决的问题是高效地对大型数据集进行分布式并行排序,并为程序员提供一种简单的方法来指定要进行的分析。
- Solution:map-reduce 模式需要三个部分:在大规模并行计算环境中,专门的基础设施负责将软件分配给硬件节点;Map;Reduce
- Element:map是一种功能,可在多个处理器上部署多个实例;reduce是一种功能,可部署为单个或多个实例;基础架构infrastructure是负责部署映射和还原实例的框架
Map功能的目的是对数据集进行筛选和排序;key 1:用于筛选数据;key 2:用于排序;为了提高性能,使用了多个地图实例,数据集被分成多个部分
Reduce 会进行一些程序员指定的分析,然后输出结果。输出集几乎总是比输入集小很多,因此被称为 "reduce"。
- Relation:Deploy on是map或reduce的实例与安装该实例的处理器之间的关系;安装、监控和控制Instantiate, monitor, and control是指基础架构与映射和还原实例之间的关系
- Constraint:要分析的数据必须以文件集的形式存在;map是无状态的,相互之间不通信;map实例和reduce实例之间的唯一通信是从map实例以 <键、值> 对的形式发出的数据
- 缺点:如果没有大型数据集,就没有理由使用 ma-reduce 的开销;如果无法将数据集划分为类似大小的子集,并行性的优势就会丧失;需要多次reduce的操作协调起来很复杂
- 应用:谷歌; Facebook;eBay;雅虎Yahoo
6. Relationship between Tactics and Patterns
模式和战术共同构成了软件架构师的主要工具。两者之间的关系是:模式包含战术;使用战术来增强模式
6.1 Patterns Comprise Tactics
战术是设计的基石,架构模式就是在战术的基础上创造出来的;战术是原子,模式是分子
大多数模式都由几种不同的战术组成,虽然这些战术可能都有共同的目的
Layer Pattern and Tactics
分层模式可视为几种战术的混合体:增加语义一致性;抽象通用服务;封装限制通信路径;中介人
提高语义一致性:通过选择具有语义一致性的责任,可以实现确保一个层的所有责任都能协同工作而不过度依赖其他层的目标。例如,硬件责任和应用程序分属不同层。
限制依赖关系:层定义了一种排序,只允许一层使用其相邻下层的服务;这种限制对层之间的依赖性有很大影响,也更容易限制更换层所带来的副作用。
Layer Patterns Need the Tactics Work Together
6.2 Using Tactics to Augment Patterns使用战术来增强模式
模式被描述为一般情况下一类问题的解决方案;当选择和应用一种模式时,其应用背景就会变得非常具体
为了让模式在特定的架构环境中发挥作用,我们需要从两个角度对其进行研究:模式所做的固有质量属性权衡;模式并不直接涉及的其他质量属性,但却会对其产生影响(副作用)
例如:增强代理模式Broker Pattern
1.缺点:Availability;Performance;Testability;Security
2.使用战术改进
增加可用资源性能战术将导致多个经纪人,以帮助提高性能和可用性;维持多个副本策略将允许每个经纪人共享状态,以确保它们对客户请求做出相同的响应;负载平衡可确保一个代理服务器不超载,而另一个代理服务器则处于闲置状态;心跳、异常检测或 ping/echo 可让重复的代理服务器发出通知
7. Using Tactics Together
战术是旨在管理单一质量属性响应的设计基元,但在实践中,每种战术不仅有其主要效果,也有其副作用,这是一种权衡
例子:Ping/Echo是检测故障的常用手段;Ping/Echo有一些副作用:①安全性:如何防止ping泛洪攻击②性能:如何确保Ping/Echo的性能开销较小③可修改性:如何将Ping/Echo添加到现有架构中
改进1:架构师首先提高性能
战术:增加可用资源
相关问题:①成本:增加资源成本更高②性能:如何有效利用增加的资源
改进2:有效利用资源的策略是调度策略
相关问题:①添加到系统中:如何将调度策略添加到现有架构中②可修改性:如何在未来更改调度策略
改进3:可修改性战术是利用中间人
相关问题:①可修改性:如何确保所有通信都通过中介进行②性能:如何确保中介的性能开销不会过大