你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
云设计模式
这些设计模式可用于在云中构建可靠且可缩放的安全应用程序。
每种模式描述了该模式解决的问题、有关应用该模式的注意事项,以及基于 Microsoft Azure 的示例。 大多数模式都包含了代码示例或代码片段,演示如何在 Azure 中实现该模式。 但是,无论是托管在 Azure 上还是其他云平台中,大多数模式都与任一分布式系统相关。
云工作负荷容易受到分布式计算缺陷的影响。 云设计弊端的一些示例包括:
- 网络可靠
- 延迟为零
- 带宽无限
- 网络安全
- 拓扑结构不变
- 有一位管理员
- 组件版本控制很简单
- 可观测性的实现可能会延迟
设计模式不会消除诸如此类的概念,但可以帮助人们认识、补偿和缓解这些概念。 每种云模式都有自己的利弊权衡。 需要更多地关注为什么要选择某种模式,而不是如何去实现它。
云中开发的难题
数据管理数据管理是云应用程序的关键要素,影响大部分质量属性。 数据通常托管在不同的位置并跨多个服务器,以实现性能、可伸缩性或可用性。 这可能会带来各种挑战。 例如,必须维护数据一致性,通常需要跨不同的位置同步数据。 |
|
设计和实施优秀的设计包含组件设计和部署中的一致性和连贯性、简化管理和开发的可维护性,以及允许组件和子系统在其他应用程序和方案中使用的可重用性。 在设计和实施阶段做出的决策对云托管应用程序和服务的质量和总拥有成本具有显著影响。 |
|
消息传送云应用程序的分布性要求消息基础结构在理想情况下能以松散耦合的方式连接组件和服务,从而将可伸缩性最大化。 异步消息受到广泛使用并提供了诸多好处,但也带来了许多挑战,如消息排序、有害消息管理和幂等性等。 |
模式目录
模式 | 总结 | 类别 |
---|---|---|
代表 | 创建代表客户服务或应用程序发送网络请求的帮助程序服务。 | 设计和实现, 卓越运营 |
防损层 | 在现代应用程序与旧系统之间实施外观或适配器层。 | 设计和实现, 卓越运营 |
异步请求-答复 | 在后端处理需要是异步处理但前端仍需要明确响应的情况下,将后端处理与前端主机分离。 | 消息传送 |
用于前端的后端 | 创建单独的后端服务,供特定的前端应用程序或接口使用。 | 设计和实施 |
隔层 | 将应用程序的元素隔离到池中,这样,如果一个元素发生故障,其他元素可继续工作。 | 可靠性 |
缓存端 | 将数据按需从数据存储加载到缓存中 | 数据管理, 性能效率 |
协调 | 让每项服务都参与决定业务运营的处理时间和处理方式,而不是依赖于一个中心型业务流程协调程序。 | 消息传送, 性能效率 |
断路器 | 连接到远程服务或资源时处理故障,此类故障所需修复时间不定。 | 可靠性 |
声明检查 | 将大型消息拆分成声明检查和有效负载,以免消息总线过载。 | 消息传送 |
补偿事务 | 撤销一系列会共同定义最终一致操作的工作。 | 可靠性 |
竞争性使用者 | 使多个并发使用者能够处理同一消息通道上收到的消息。 | 消息传送 |
计算资源合并 | 将多个任务或操作合并到单个计算单元 | 设计和实施 |
CQRS | 使用独立接口将读取数据的操作与更新数据的操作分离。 | 数据管理, 设计和实现, 性能效率 |
部署戳 | 部署应用程序组件的多个独立副本,包括数据存储。 | 可靠性, 性能效率 |
边缘工作负载配置 | 由于车间系统和设备种类繁多,使得配置工作负载困难重重。 | 设计和实施 |
事件溯源 | 使用只追加存储来记录描述域中数据采取的操作的完整系列事件。 | 数据管理, 性能效率 |
外部配置存储 | 将配置信息从应用程序部署包移出,移到一个集中的位置。 | 设计和实现, 卓越运营 |
联合标识 | 将身份验证委托给外部标识提供者。 | 安全性 |
守护程序 | 通过使用专用的主机实例保护应用程序和服务,该实例用于充当客户端和应用程序或服务之间的中转站、验证和整理请求,并在它们之间传递请求和数据。 | 安全性 |
网关聚合 | 使用网关可将多个单独请求聚合成一个请求。 | 设计和实现, 卓越运营 |
网关卸载 | 将共享或专用服务功能卸载到网关代理。 | 设计和实现, 卓越运营 |
网关路由 | 使用单个终结点将请求路由到多个服务。 | 设计和实现, 卓越运营 |
Geodes | 将后端服务部署到一组地理节点,其中的每个节点可为任何区域中的任何客户端请求提供服务。 | 可靠性, 卓越运营 |
运行状况终结点监视 | 在应用程序中实施可让外部工具通过公开终结点定期访问的功能检查。 | 可靠性, 卓越运营 |
索引表 | 基于数据存储中经常由查询引用的字段创建索引。 | 数据管理, 性能效率 |
领导选择 | 通过选拔一个实例作为领导来负责管理其他实例,协调分布式应用程序中协作性任务实例集合所执行的操作。 | 设计和实现, 可靠性 |
具体化视图 | 当未针对所需的查询操作完美设置数据的格式时,在一个或多个数据存储中基于数据生成预填充的视图。 | 数据管理, 卓越运营, 性能效率 |
管道和筛选器 | 将一个执行复杂处理的任务分解为一系列可重复使用的单个元素。 | 设计和实现, 消息传送 |
优先级队列 | 为发送到服务的请求确定优先级,以便高优先级请求能够得到比低优先级请求更快速地接收和处理。 | 消息传送, 性能效率 |
发布方/订阅方 | 使应用程序能够以异步方式向多个感兴趣的使用者公布事件,而无需将发送方与接收方耦合。 | 消息传送 |
基于队列的负载调控 | 使用队列在任务与所调用的服务之间充当缓冲,从而缓解间歇性负载过大现象。 | 可靠性, 消息传送, 复原能力, 性能效率 |
速率限制模式 | 速率限制模式可帮助避免或尽量减少与这些限制相关的限制错误,并帮助更准确地预测吞吐量。 | 可靠性 |
重试 | 当应用程序尝试连接到服务或网络资源时,使应用程序能够通过以透明方式重试先前失败的操作来处理预期的临时故障。 | 可靠性 |
一系列事件 | 在分布式事务方案中跨微服务管理数据一致性。 Saga 是一系列事务,用于更新每项服务并发布消息或事件来触发下一个事务步骤。 | 消息传送 |
计划程序代理监督程序 | 跨一组分布式服务和其他远程资源协调一组操作。 | 消息传送, 可靠性 |
顺序保护 | 按定义的顺序处理一组相关的消息,不需阻止对其他消息组的处理。 | 消息传送 |
分片 | 将数据存储划分为一组水平分区或分片。 | 数据管理, 性能效率 |
Sidecar | 将应用程序的组件部署到单独的进程或容器中,以提供隔离和封装。 | 设计和实现, 卓越运营 |
静态内容托管 | 将静态内容部署到基于云的存储服务,再由后者将它们直接传送给客户端。 | 设计和实现, 数据管理, 性能效率 |
Strangler Fig | 通过将特定的功能片断逐渐取代为新的应用程序和服务,逐步迁移旧系统。 | 设计和实现, 卓越运营 |
限制 | 控制应用程序实例、单个租户或整个服务对资源的消耗。 | 可靠性, 性能效率 |
附属密钥 | 使用令牌或密钥,向客户端授予对特定资源或服务的受限直接访问权限。 | 数据管理, 安全性 |