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 - 測試所有元件和外部相依性的失敗。
- 使用常見代理的延伸模組模擬會產生容量不足的條件,以導入延遲和已捨棄訊息。您也可以建立自己的實作,來建立容量不足的條件。
定期進行演練日
- 執行負載或效能測試,然後注入失敗。
- 尋找執行手冊上的異常情況,並尋找練習程序手冊的機會。
- 如果您偏離了執行手冊,應優化執行手冊或更正該行為。如果您練習程序手冊,確定應使用的執行手冊,或建立一個新的執行手冊。