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

云应用程序的性能测试和反模式

与设计模式非常类似,性能反模式是组织内常见的有缺陷进程和实现。 这些常见做法可能在应用程序承受压力时导致可伸缩性问题。 了解这些做法有助于简化软件从业者对于高级概念的使用,在检查代码或诊断性能问题时反模式知识也能起到帮助。

下面是一个常见的情景:在测试期间,某个应用程序的行为正常。 然后,该应用程序被发布到生产环境,并开始处理实际工作负荷。 这时,它开始表现不佳,具体体现在拒绝用户请求、停滞或引发异常。 此时,开发团队面临两个问题:

  • 在测试期间为何未发现此行为?
  • 如何解决?

第一个问题的答案非常简单。 在测试环境中很难模拟真实的用户、他们的行为模式,以及他们可能需要完成的工作量。 了解系统在承受负载时的行为方式的唯一有把握方法是在生产环境中对它进行观察。 要澄清的一点是,我们并不建议跳过性能测试。 性能测试对于获得基准性能指标至关重要。 但是,必须准备好观察并纠正应用程序在实时系统中出现的性能问题。

至于第二个问题 - 如何解决的答案,就不是那么直接。 问题可能由或多或少的因素造成,有时,问题只会在特定的条件下出现。 检测和日志记录对于查找根本原因非常关键,但是,还必须知道要查看哪些信息。

根据与 Microsoft Azure 客户的互动,我们已识别了客户在生产环境中遇到的最常见性能问题。 对于每个反模式,我们介绍了通常出现该反模式的原因、该反模式的症状,以及解决问题的方法。 此外,我们还提供了示例代码用于演示反模式和建议的可伸缩性解决方案。

阅读介绍时,其中一些反模式似乎很明显,但它们出现的次数比想象的更频繁。 有时,应用程序继承了本地工作的设计,但无法在云中缩放。 应用程序的设计一开始可能非常干净,但随着新功能的添加,其中一种或多种反模式就会渗入。 不管怎样,本指南都可帮助你识别并解决这些反模式。

反模式的目录

下面是我们已识别的反模式列表:

反模式 说明
繁忙数据库 将过多的处理工作附加到数据存储。
繁忙前端 将资源密集型任务转移到后台线程。
琐碎 I/O 持续发送许多小型网络请求。
超量提取 检索的数据量超过需要,导致不必要的 I/O。
不当实例化 反复创建和销毁原本应该共享并重复使用的对象。
单一式持久保存 对采用截然不同的使用模式的数据使用相同的数据存储。
无缓存 无法缓存数据。
近邻干扰 单个租户使用的资源量过多。
重试风暴 过于频繁地重试对服务器的失败请求。
同步 I/O I/O 完成时阻塞调用线程。

后续步骤

有关性能优化的详细信息,请参阅对分布式应用程序进行性能优化