云服务基础 – 引入容错数据访问层

编辑人员注释: 本文章由 AzureCAT 团队的 Valery Mizonov 撰写。

在我们之前的远程监控 – 应用程序运行状况测量博客文章中,我们强调了 Windows Azure 中的云服务基础代码项目如何构建容错数据访问层,使其能够支撑 Windows Azure SQL 数据库服务中的瞬态故障。我们为测量您自己的应用程序提供了一些最佳做法,并就如何提高解决方案的可靠性和灵活性提供了一些提示。

在本文章中,我们将进一步讨论构建弹性数据访问层的现实意义,以及我们在 CSFundamentals 中如何满足这一关键要求。

构建基于云的分布式应用程序和服务很具挑战性,因为当代云基础结构存在各种缺陷,如资源限制、通信失败、平台服务行为的波动(包括基于设计的和预先未知的异常)。此类问题的常规解决方案是检测潜在的瞬态故障,并重试失败的操作,且需随时掌握特定于应用程序的服务级别协议 (SLA) 的动态。

要就是否重试失败的操作做出明智决策,需要构建已知瞬态故障及其标识(错误代码或异常类型)的知识库。这是一项繁琐而耗时的工作。幸运的是,Windows Azure 开发人员可以完全绕过这项工作,而专注于最重要的事情,因为用于处理瞬态故障的知识和情报均可以通过企业库的瞬态故障处理应用程序块实施 - 因此,提高基于云的服务的弹性变得轻而易举。瞬态故障处理应用程序块由易于使用的
API 和一个知识库组成,该知识库中包含所有当前已知可能与 Windows Azure 相关的瞬态故障。

云服务基础解决方案广泛利用瞬态故障处理应用程序块来保护其数据访问层,防止受 Windows Azure SQL 数据库服务中可能发生的限制条件和其他瞬态错误影响。

构建数据访问层 CSFundamentals 时,对于瞬态故障处理,我们遵循以下重要的最佳做法:

  • 使用 NuGet 提供的最新版瞬态故障处理应用程序块,以便利用瞬态故障知识库和检测逻辑的最新更新。
  • 确定可能出现瞬态故障的适当边界,并确保如果遇到瞬态故障时需要重试应用程序逻辑,这些边界等幂。
  • 记录所有重试尝试和瞬态故障(包括已查明的限制原因),以便通过对这些故障的认识改进应用程序远程监控,并加速进行故障排除。
  • 从业务 SLA 条款的角度进行思考(而不是特定的重试次数和延迟间隔) 方法是通过实施重试逻辑的时间限制行为,确认并评估给定端到端业务交易的性能 SLA。
  • 用配置管理重试策略并避免硬编码重试策略参数,以实现更大的灵活性,支持在运行时进行更改。
  • 同时对 SQL 连接和命令应用重试逻辑,而不是“二者之一”,并记住某些 SQL 命令无法安全地进行重试,除非它们受事务保护。
  • 对持久(可能无法恢复)的瞬态故障进行预测并考虑从故障中恢复时的护送效应。适当地处理重试模式,例如,通过指数级增加重试尝试之间的延迟间隔。

要阅读有关本主题的更多信息,请参阅“云服务基础数据访问层 – 瞬态故障处理”Wiki 文章,并了解有关如何容许数据库服务故障以及如何在构建大型云应用程序时利用类似的技术和最佳做法的更多信息。

感谢您抽出时间阅读本博客文章。在本系列的下一篇文章中,我们将探讨我们已实施的报告功能,以便使用 Windows Azure SQL Reporting 服务及其数据可视化功能从测量的应用程序规划远程监控。

本文翻译自:

https://blogs.msdn.com/b/windowsazure/archive/2013/07/25/blog-post-cloud-service-fundamentals-introduction-into-fault-tolerant-data-access-layer.aspx