你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

云设计模式

架构师通过将平台服务、功能和代码组合在一起来设计工作负载,以满足工作负载中的功能和非功能要求。 设计工作负荷需要了解这些工作负荷要求,然后选择拓扑并针对工作负荷约束带来的挑战来解决问题。 解决许多常见挑战的云设计模式。

系统设计在很大程度上依赖于设计模式。 基础结构、代码和分布式系统都围绕设计模式的组合进行设计。 这些设计模式可用于在云中生成可靠、安全、成本优化、运行健全和高性能的应用程序。

这些设计模式并不特定于任何技术,并且与任何分布式系统相关,无论是托管在 Azure 上、其他云平台上,有些甚至还可以扩展到本地或混合工作负荷。

云设计模式有助于设计过程

云工作负荷容易受到分布式计算缺陷的影响。 云设计弊端的一些示例包括:

  • 网络可靠
  • 延迟为零
  • 带宽无限
  • 网络安全
  • 拓扑结构不变
  • 有一个管理员
  • 组件版本控制很简单
  • 可观测性的实现可能会延迟

设计模式不会消除诸如此类的概念,但可以帮助人们认识、补偿和缓解这些概念。 每种云模式都有自己的利弊权衡。 需要更多地关注为什么要选择某种模式,而不是如何去实现它。

一个良好的工作负载会考虑如何将这些全行业设计模式用作工作负载设计的核心构件。 每个 Azure 架构良好的支柱在这些设计模式中体现,设计模式通常会与其他支柱的目标产生权衡。

模式目录

此目录中的每个模式都描述了模式所解决的问题、应用模式的注意事项以及基于 Microsoft Azure 的示例。 某些模式包括代码示例或代码片段,演示如何在 Azure 上实现模式。

模式 总结 Azure Well-Architected 框架支柱
代表 创建代表客户服务或应用程序发送网络请求的帮助程序服务。
  • 可靠性
  • 安全
防损层 在现代应用程序与旧系统之间实施外观或适配器层。
  • 卓越运营
异步请求-答复 在后端处理需要是异步处理但前端仍需要明确响应的情况下,将后端处理与前端主机分离。
  • 性能效率
用于前端的后端 创建单独的后端服务,供特定前端应用程序或接口使用。
  • 可靠性
  • 安全
  • 性能效率
隔层 将应用程序的元素隔离到池中,以便如果一个失败,其他元素将继续正常运行。
  • 可靠性
  • 安全
  • 性能效率
缓存端 按需将数据从数据存储加载到缓存中。
  • 可靠性
  • 性能效率
协调 让每项服务都参与决定业务运营的处理时间和处理方式,而不是依赖于一个中心型业务流程协调程序。
  • 卓越运营
  • 性能效率
断路器 连接到远程服务或资源时处理故障,此类故障所需修复时间不定。
  • 可靠性
  • 性能效率
声明检查 将大型消息拆分成声明检查和有效负载,以免消息总线过载。
  • 可靠性
  • 安全
  • 成本优化
  • 性能效率
补偿事务 撤销一系列会共同定义最终一致操作的工作。
  • 可靠性
竞争性使用者 使多个并发使用者能够处理同一消息通道上收到的消息。
  • 可靠性
  • 成本优化
  • 性能效率
计算资源合并 将多个任务或操作合并到单个计算单元中。
  • 成本优化
  • 卓越运营
  • 性能效率
CQRS 使用独立接口将读取数据的操作与更新数据的操作分离。
  • 性能效率
部署戳 部署应用程序组件的多个独立副本,包括数据存储。
  • 卓越运营
  • 性能效率
边缘工作负载配置 集中配置以解决在车间配置多个系统和设备的挑战。
事件溯源 使用只追加存储来记录描述域中数据采取的操作的完整系列事件。
  • 可靠性
  • 性能效率
外部配置存储 将配置信息从应用程序部署包移出,移到一个集中的位置。
  • 卓越运营
联合标识 将身份验证委托给外部标识提供者。
  • 可靠性
  • 安全
  • 性能效率
守护程序 通过使用专用的主机实例保护应用程序和服务,该实例用于充当客户端和应用程序或服务之间的中转站、验证和整理请求,并在它们之间传递请求和数据。
  • 安全
  • 性能效率
网关聚合 使用网关可将多个单独请求聚合成一个请求。
  • 可靠性
  • 安全
  • 卓越运营
  • 性能效率
网关卸载 将共享或专用服务功能卸载到网关代理。
  • 可靠性
  • 安全
  • 成本优化
  • 卓越运营
  • 性能效率
网关路由 使用单个终结点将请求路由到多个服务。
  • 可靠性
  • 卓越运营
  • 性能效率
地理节点 将后端服务部署到一组地理节点,其中的每个节点可为任何区域中的任何客户端请求提供服务。
  • 可靠性
  • 性能效率
运行状况终结点监视 在应用程序中实施可让外部工具通过公开终结点定期访问的功能检查。
  • 可靠性
  • 卓越运营
  • 性能效率
索引表 基于数据存储中经常由查询引用的字段创建索引。
  • 可靠性
  • 性能效率
领导选择 通过选拔一个实例作为领导来负责管理其他实例,协调分布式应用程序中协作性任务实例集合所执行的操作。
  • 可靠性
具体化视图 当未针对所需的查询操作完美设置数据的格式时,在一个或多个数据存储中基于数据生成预填充的视图。
  • 性能效率
消息传送桥 构建一个中介,以启用因协议或格式而不兼容的消息传送系统之间的通信。
  • 成本优化
  • 卓越运营
管道和筛选器 将一个执行复杂处理的任务分解为一系列可重复使用的单个元素。
  • 可靠性
优先级队列 为发送到服务的请求确定优先级,以便高优先级请求能够得到比低优先级请求更快速地接收和处理。
  • 可靠性
  • 性能效率
发布方/订阅方 使应用程序能够以异步方式向多个感兴趣的使用者公布事件,而无需将发送方与接收方耦合。
  • 可靠性
  • 安全
  • 成本优化
  • 卓越运营
  • 性能效率
隔离 在授权在工作负荷中使用外部资产之前,请确保外部资产满足团队同意的质量级别。
  • 安全
  • 卓越运营
基于队列的负载调控 使用队列在任务与所调用的服务之间充当缓冲,从而缓解间歇性负载过大现象。
  • 可靠性
  • 成本优化
  • 性能效率
速率限制模式 速率限制模式可帮助避免或尽量减少与这些限制相关的限制错误,并帮助更准确地预测吞吐量。
  • 可靠性
重试 当应用程序尝试连接到服务或网络资源时,使应用程序能够通过以透明方式重试先前失败的操作来处理预期的临时故障。
  • 可靠性
一系列事件 在分布式事务方案中跨微服务管理数据一致性。 Saga 是一系列事务,用于更新每项服务并发布消息或事件来触发下一个事务步骤。
  • 可靠性
计划程序代理监督程序 跨一组分布式服务和其他远程资源协调一组操作。
  • 可靠性
  • 性能效率
顺序保护 按定义的顺序处理一组相关的消息,不需阻止对其他消息组的处理。
  • 可靠性
分片 将数据存储划分为一组水平分区或分片。
  • 可靠性
  • 成本优化
Sidecar 将应用程序的组件部署到单独的进程或容器中,以提供隔离和封装。
  • 安全
  • 卓越运营
静态内容托管 将静态内容部署到基于云的存储服务,再由后者将它们直接传送给客户端。
  • 成本优化
Strangler Fig 通过将特定的功能片断逐渐取代为新的应用程序和服务,逐步迁移旧系统。
  • 可靠性
  • 成本优化
  • 卓越运营
限制 控制应用程序实例、单个租户或整个服务对资源的消耗。
  • 可靠性
  • 安全
  • 成本优化
  • 性能效率
附属密钥 使用令牌或密钥,向客户端授予对特定资源或服务的受限直接访问权限。
  • 安全
  • 成本优化
  • 性能效率

下一步

从模式寻求优化的 Azure 架构良好的支柱的角度审查设计模式。