04-架构模式
解决特定问题的设计决定的集合,但是可以参数化配置。
DSSA 领域特定软件架构
- 面向特定任务(task/domain)
- 在这个领域里是通用的
- 标准结构
架构模式
- 背景
- 问题
- 解决方案(Element + Relations + Constraints)
设计模式
架构模式分类
- Module
- Component-Connector
- 在Runtime动态建立联系
- Allocation
1. Layered Pattern
- Module类架构
- 解释
- 一个Layer里包含多个Module,不存在跨层的Module
- 限制层与层之间的依赖关系,质量属性的可修改性策略就使用了分层
- 各层之间不能跨层调用,只能上面调下面,关注点分离
- 影响的质量属性:可修改性、可模块化、可维护性、可复用性
1.1. Solution
- 元素:层,包含一些模块
- 关系:allowed-to-use
- 限制
- 每个模块只能被分配到一层
- 至少有两层
- allowed-to-use关系不能是环,低层不能调用高层
- 弱点
- 增加层很复杂
- 性能
1.2. Pattern
如果D是sidecar,那么也是分层;但如果D也有一定业务,则不是分层
2. Broker Pattern
- Component-Connector类模式
2.1. Solution
- 元素
- Client
- Server
- Broker:中介,帮助client找到server,传递请求
- 约束:一个客户端只能连接一个中介,服务端也是
- 分析
- 提升了互操作性、可修改性
- 现代场景下如果有多个broker实例,可以提高扩展性、安全性、可用性(补充设计)
- 可能单点失效,减低性能、安全性、可用性
- 减低可测试性,无法预先确定client和server的状态
2.2. Pattern
3. Model-View-Controller Pattern
- 类型
- 从动态看属于Component-Connector
- 从开发态看属于Module
3.1. Solution
- 元素
- model:业务逻辑
- view:向用户展示,接受用户操作
- controller:对用户操作进行处理,把消息通知给model
- 关系:通知
- 约束:
- 每个元素至少有一个实例
- model不能直接和controller交互,controller单向操作Model
- 弱点:对于简单的用户界面过于复杂
3.2. Pattern
4. Pipe-and-Filter Pattern
- 类别:Component-Connector
4.1. Solution
元素
- pipe
- 相当于Connector
- 必须有数据的输入和输出
- 连接一系列的数据处理/计算
- filter
- 相当于Component,通过pipe连起来
- 处理数据,计算
- 有input和多个output
- pipe
限制
- 系统里不可能只有孤立的pipe
弱点
- 不适合交互式系统
- 有大量的独立过滤器会增加计算开销
- 不适合长时间运行的计算
4.2. Pattern
5. Client-Server Pattern
- 类型:CC
5.1. Solution
元素
- Client
- Server
不需要broker:在有限的网络中,有哪些服务是预先知道的,client和server的关系不需要动态改变
分析:
- CS架构导致互操作性降低,没有broker需要,人为连接。
- 可能被拦截
5.2. Pattern
6. Peer-to-Peer Pattern
- 类型:CC
没有明确的地位差距
节点可以自由加入退出
6.1. Solution
- 元素:
- peer即可以发送也可以接受数据
- request/reply connector
- 关系:peer之间的连接器
- 约束
- 每个节点的最大连接数
- 节点的hops(hops:限制可感知的范围)
- 哪个节点知道其他节点的信息,有一些p2p网络时星型拓扑
- 分析
- 提高了系统的可伸缩性
- 牺牲安全性:检点既是客户端又是服务端,被攻击可能增加
- 可用性:数据分布在不同节点上,可能导致数据不一致,但个别数据有问题不影响整体
- 性能:多个节点同时提供服务,新能好
6.2. Pattern
7. Service-Oriented/SOA Pattern
- 类型:cc
- 计算是使用一组通过网络提供消费服务的协作组件实现的。计算通常使用工作流语言进行描述。
7.1. Solution
- Component
- Service Provider
- Service Consumer
- Registry:注册服务
- ESB:企业服务总线,client到server的通信路由,类似broker
- Orchestration server:编排组织业务
- Connector:
- SOAP(简单对象访问协议)
- REST
- 异步消息传递(即忘即发):参与者不必等待确认。
- 弱点
- SOA系统构建很复杂,无法控制独立服务的演变
- 中间件存在性能开销,服务可能还曾为性能瓶颈,通常不提供性能开销
可以访问到其他组织,不同技术实现的服务
质量属性:提高互操作性
7.2. Pattern
虚线:组织边界,内部可以完全由组织控制
8. Publish-Subscribe Pattern
- 类型:CC
8.1. Solution
- 元素
- 事件分发器:connector/component
- 发布者/订阅者:component,存在多对多的关系
- 弱点:
- 增加延迟
- 降低可扩展性
- 难以预测消息什么时候收到】
- 不能保证一定会接收到,或即时接收到
8.2. Pattern
在OS中事件处理普遍使用
9. Shared-Data Pattern
- 类型:CC
9.1. Solution
存在中心的被共享的数据
- 元素
- 共享数据存储Shared-data store.
- 数据访问组件Data accessor component.
- 数据读写连接器Data readin and writin connector.
- 限制:只能通过数据访问组件和数据交互
- 分析
- 星型结构,可能单点失效,性能瓶颈
- 想要获取数据高一致性、实时性时的妥协
9.2. Pattern
10. Map-Reduce Pattern
- 类型:Allocation
通过并行提高了性能
10.1. Solution
- 元素
- Map:任务分割,一组相同的任务并行,每一个任务都在一个Map上处理 。信息抽取,转换。
- Reduce:把Map的输出整合在一起,变成单一输出
- 关系:
- Deploy on是 map 或 Reduce 函数实例与安装该函数的处理器之间的关系。
- 实例化、监视和控制是基础架构与 map 和 Reduce 实例之间的关系。
- 约束
- 要分析的数据必须以一组文件的形式存在
- map 函数是无状态的,彼此之间不通信
- map 实例和 Reduce 实例之间的唯一通信是从 map 实例以 <key, value>对形式发出的数据。
- 弱点
- 要求数据是大量的,否则map-reduce的代价不划算
- 如果不能把数据集划分成多个相似的子集,无法发挥并行的优势
- 需要多次reduce的操作协调起来很复杂。
10.2. Pattern
11. Multi-Tier Pattern
- 类型:Allocation
11.1. Solution
Tier:逻辑的分层,不是真实存在的层,没有分层模式的强依赖关系。软件的每一个计算资源作为一个Tier。
分层模式中的Layer时真实存在的
- 元素
- Tier
- 关系:
- Is part of:把组件组织成层
- Communicates with,层和组件之间通信
- Allocated to:为了把层映射到计算平台
- 约束
- 一个软件组件只能属于一个层
- 弱点
- 前期成本高且复杂
11.2. Pattern
12. Pattern和Tactic
Pattern:一组设计决定
Tactic:最小单元
- 标题: 04-架构模式
- 作者: Charlie
- 创建于 : 2024-05-07 14:05:00
- 更新于 : 2024-07-05 12:55:04
- 链接: https://chillcharlie357.github.io/posts/12c16a93/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论