REL 12: 如何测试可靠性?
在为您的工作负载采用弹性设计以应对生产压力以后,测试是确保其按设计预期运行,并且提供您所预期弹性的唯一方式。
资源
Well-Architected lab: Level 300: Testing for Resiliency of EC2 RDS and S3
Injecting Chaos to Amazon EC2 using AWS Systems Manager
Resilience Engineering: Learning to Embrace Failure
AWS re:Invent 2019: Improving resiliency with chaos engineering (DOP309-R1)
Continuous Delivery and Continuous Integration
Using Canaries (Amazon CloudWatch Synthetics)
Use CodePipeline with AWS CodeBuild to test code and run builds
Automate your operational playbooks with AWS Systems Manager
Principles of Chaos Engineering
Apache JMeter
Casey Rosenthal, Lorin Hochstein, Aaron Blohowiak, Nora Jones, Ali Basiri. “Chaos
Engineering” (August 2017)
AWS Marketplace: products that can be used for continuous integration
APN Partner: partners that can help with implementation of a continuous integration
pipeline
最佳实践:
-
根据行动手册调查故障: 通过在行动手册中记录调查流程,实现对并不十分了解的故障场景做出一致且及时的响应。行动手册是在确定哪些因素导致故障场景时要执行的预定义步骤。所有流程步骤的结果都将用于确定要采取的后续步骤,直到问题得到确定或上报。
-
在意外事件发生后执行分析: 审核影响客户的事件,确定这些事件的成因和预防措施。利用这些信息来制定缓解措施,以限制或防止再次发生同类事件。制定程序以迅速有效地做出响应。根据目标受众,适当传达事件成因和纠正措施。如果需要,可将这些原因告知他人。
-
测试功能要求: 这包括用于验证所需功能的单元测试和集成测试。
-
测试扩展和性能要求: 这包括负载测试以验证工作负载是否满足扩展和性能要求。
-
使用混沌工程测试弹性: 运行定期将故障注入到预生产和生产环境的测试。假设您的工作负载将会如何对故障做出反应,然后比较您的假设和测试结果,若不相符,重复执行。确保生产测试不会影响用户。
-
定期进行实际测试: 通过定期进行实际测试,与将参与实际故障情景的人员一起在尽可能接近生产环境的环境中(包括在生产环境中)练习您的故障程序。实际测试会强制执行相关措施,以确保生产测试不会影响用户。
改进计划
根据行动手册调查故障
- 以代码形式实施行动手册: 为行动手册编写脚本,以代码形式执行运营,以确保一致性并减少由手动流程引起的错误。行动手册可以由代表不同步骤的多个脚本组成,这些步骤可能是确定问题成因所必需的。系统可能会在运行手册活动过程中触发或执行行动手册活动,也可能针对响应发现的事件而提示执行行动手册活动。
Automate your operational playbooks with AWS Systems Manager
AWS Systems Manager Run Command
AWS Systems Manager Automation
What is AWS Lambda?
What Is Amazon EventBridge?
Using Amazon CloudWatch Alarms
在意外事件发生后执行分析
- 确保在提出事件成因时秉承诚实原则并且不苛责。
- 如果您不记录问题,就无法予以纠正。
- 确保事后分析不带苛责,这样您便可以冷静地看待建议的纠正措施,并在您的应用程序团队中促进诚实的自我评估和协作。
What is log analytics?
测试功能要求
Use CodePipeline with AWS CodeBuild to test code and run builds
AWS CodePipeline Adds Support for Unit and Custom Integration Testing with AWS CodeBuild
Continuous Delivery and Continuous Integration
Using Canaries (Amazon CloudWatch Synthetics)
Software test automation
测试扩展和性能要求
Distributed Load Testing on AWS: simulate thousands of connected users
Apache JMeter
- 将您的应用程序部署在与生产环境相同的环境中,然后执行负载测试。
- 使用基础设施即代码概念,以创建尽可能类似于生产环境的环境。
使用混沌工程测试弹性
Principles of Chaos Engineering
Well-Architected lab: Level 300: Testing for Resiliency of EC2 RDS and S3
Injecting Chaos to Amazon EC2 using AWS Systems Manager
AWS re:Invent 2019: Improving resiliency with chaos engineering (DOP309-R1)
- 要将故障注入工作负载,请使用开源软件
The Chaos ToolKit
Shopify Toxiproxy
Netflix Chaos Monkey - 或使用 AWS Marketplace 中提供的商业软件
Gremlin - 或创建您自己的故障注入代码
Well-Architected lab: Level 300: Testing for Resiliency of EC2 RDS and S3
Injecting Chaos to Amazon EC2 using AWS Systems Manager - 测试所有组件和外部依赖项的故障
- 使用常见代理的扩展来模拟可能导致中断的条件,从而引入延迟和丢弃的消息。您也可以通过创建自己的实现来创建中断条件。
定期进行实际测试
- 执行负载或性能测试,然后执行故障注入。
- 寻找运行手册中的异常,并利用这些异常机会练习使用行动手册。
- 如果您违反运行手册,请完善运行手册或纠正相应行为。如果练习使用行动手册,请确定应使用的运行手册,或者创建一个新运行手册。