通过


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

云应用程序中的最佳做法

构建可靠、可缩放且安全的云应用程序需要有深思熟虑的体系结构决策。 本部分中的最佳做法为分布式系统(如缓存、数据分区、API 设计和暂时性故障处理)中出现的常见问题提供了指导。 每个做法都解决了 Azure Well-Architected 框架的一个或多个支柱,该框架定义了工作负荷设计的五个质量属性:可靠性安全性成本优化卓越运营和性能

这些做法补充了 Azure 体系结构中心中的其他基础指南。 Azure 应用程序的设计原则提供了高级策略,例如设计自我修复和横向扩展。云设计模式为定期体系结构问题提供了可重用的解决方案。 性能反模式描述导致负载下的可伸缩性问题的常见缺陷。 这些资源可帮助你做出明智的体系结构选择。

实践目录

此表中的每一种做法都映射到一个或多个 Well-Architected 框架支柱。 使用这些映射来确定哪些做法与工作负荷中优先级的质量属性最相关。

练习 总结 相关支柱
API 设计 设计 Web API 以支持平台独立性,方法是使用标准协议和商定的数据格式。 提升服务演变,使客户端无需修改即可发现功能。 通过支持部分响应并提供筛选和分页数据的方法来提高响应时间。 卓越运营性能效率
API 实现 实现 Web API,使其高效、可响应、可扩展和可用。 使操作过程具有幂等性,支持内容协商,且遵循 HTTP 规范。 处理异常并支持资源的发现。 提供处理大型请求和最小化网络流量的方法。 卓越运营性能效率
自动缩放 设计应用以动态分配和解除分配资源,以满足性能要求并最大程度地降低成本。 利用 Azure Monitor 自动缩放 和许多 Azure 组件提供的内置自动缩放功能。 成本优化性能效率
后台作业 将批处理作业、处理任务和工作流作为后台作业实现。 使用 Azure 平台服务托管这些任务。 触发包含事件或计划的任务,并将结果返回给调用任务。 可靠性卓越运营
缓存 通过将数据复制到靠近应用的快速存储来提高性能。 缓存你经常读取但很少修改的数据。 管理数据到期情况和并发性。 了解如何填充缓存并使用 Azure 托管 Redis 服务。 性能效率
内容分发网络 使用内容分发网络(CDN)有效地向用户交付 Web 内容并减少 Web 应用负载。 克服部署、版本控制、安全性和复原能力挑战。 可靠性性能效率
数据分区 对数据进行分区以提高可伸缩性、可用性和性能,并减少争用和数据存储成本。 以高效方式使用水平分区、垂直分区和功能分区。 成本优化性能效率
数据分区策略(按服务) 跨 Azure 服务应用分区策略,包括 Azure SQL 数据库Azure Cosmos DBAzure Blob 存储Azure 托管 RedisAzure 服务总线等。 分配负载、降低延迟并支持水平缩放。 成本优化性能效率
主机名保留 了解为什么在反向代理与其后端 Web 应用程序之间保留原始 HTTP 主机名,以及如何为最常见的 Azure 服务实现此建议非常重要。 可靠性安全性
消息编码注意事项 为系统组件之间交换的异步消息选择有效负载结构、编码格式和序列化库。 考虑权衡互操作性、大小、人类可读性和架构演变。 安全
监视和诊断 使用监视和诊断管道跟踪系统运行状况、使用情况和性能。 将监视数据转换为有助于各种情况的警报、报告和触发器。 示例包括检测和更正问题、发现潜在问题、满足性能保证和满足审核要求。 卓越运营
暂时性故障处理 处理因网络或资源不可用导致的暂时性故障。 在制定适当的重试策略时克服挑战。 避免复制重试代码层和其他反模式。 可靠性

设计原则

在解决特定技术问题之前,请建立强大的体系结构基础。 Azure 应用程序的设计原则提供了适用于工作负载的高级策略,例如设计自我修复、横向扩展和最小化协调。 这些原则塑造了前面列出的最佳做法可帮助你实现的决策。

云设计模式

在制定原则的情况下, 云设计模式 为分布式系统中的重复问题提供了可重用的解决方案。 本部分中的许多最佳做法都依赖于其中一个或多个模式。 例如,暂时性故障处理指南基于 重试模式断路器模式、缓存指南与 Cache-Aside 模式相关,后台作业指南使用 竞争使用者Queue-Based 负载调配等模式。 查看完整的目录,以确定解决工作负荷中的体系结构难题的模式。

性能对立模式

即使应用了合理的原则、良好的模式和最佳做法,但生产负载下也可能出现缺陷。 云应用程序的性能反模式 描述了无法扩展的常见设计或随着功能添加而积累的捷径。 在设计评审和代码评审期间将这些反模式用作清单,以便在问题到达生产之前捕获问题。

后续步骤