

# REL12-BP03 測試可擴展性和效能需求
<a name="rel_testing_resiliency_test_non_functional"></a>

 使用諸如負載測試等技術來驗證工作負載符合擴展和效能需求。

 在雲端，您可以隨需為工作負載建立正式作業規模的測試環境。您不必依賴縮減規模的測試環境，這可能會導致正式作業行為的預測不準確，而是可以使用雲端來佈建測試環境，以確切反映您預期的正式作業環境。此環境可協助您以更準確模擬您的應用程式面臨的真實狀況來進行測試。

 除了效能測試之外，務必確認您的基本資源、擴展設定、服務配額和彈性設計能夠在負載下如預期運作。這種整體方法可確認您的應用程式即使在最嚴苛的條件下，仍能可靠地擴展和執行。

 **預期成果：**您的工作負載即使在承受尖峰負載的情況下，仍維持其預期行為。您主動解決可能隨應用程式發展和演進而出現的任何效能相關問題。

 **常見的反模式：**
+  您使用的測試環境與正式作業環境相似程度不高。
+  您將負載測試視為單獨的一次性活動，而不是部署持續整合 (CI) 管道整體的一部分。
+  您未定義明確且可衡量的效能需求，例如回應時間、輸送量和可擴展性目標。
+  您在負載情況不切實際或不足的情況下執行測試，而且未能測試尖峰負載、突發性峰值和持續高負載。
+  您未透過超過預期的負載限制來對工作負載進行壓力測試。
+  您使用不適當或不適合的負載測試和效能分析工具。
+  您缺乏全方位的監控和警示系統可用來追蹤效能指標並偵測異常。

 **建立此最佳實務的優勢：**
+  負載測試可協助您在付諸正式作業之前，找出系統中潛在的效能瓶頸。當您模擬正式作業層級流量和工作負載時，就可找出系統處理負載時可能遇到困難層面，例如，回應時間緩慢、資源限制或系統故障。
+  當您在各種負載條件下測試系統時，您可以更了解支援工作負載所需的資源需求。此資訊可協助您做出有關資源分配的明智決策，並防止資源過度佈建或佈建不足。
+  若要找出潛在的故障點，您可以觀察工作負載在高負載條件下的運作情形。此資訊可協助您透過適時實作容錯機制、容錯移轉策略和備援措施，來改善工作負載的可靠性和彈性。
+  您可及早找出和解決效能問題，這有助於避免系統中斷、回應時間緩慢和使用者不滿意所帶來代價高昂的後果。
+  測試期間收集的詳細效能資料和分析資訊，可協助您解決正式作業時可能出現的效能相關問題。這樣就能加快回應和解決事件，進而降低對使用者和組織營運的影響。
+  在某些產業中，主動效能測試可協助讓工作負載符合合規標準，進而降低遭受懲罰或產生法律問題的風險。

 **未建立此最佳實務時的曝險等級：**高 

## 實作指引
<a name="implementation-guidance"></a>

 第一步是定義全面的測試策略，涵蓋擴展和效能需求的所有層面。首先，請根據您的業務需求，例如輸送量、延遲長條圖和錯誤率，清楚定義工作負載的服務層級目標 (SLO)。接著設計一套測試，可模擬從平均用量到突發尖峰和持續尖峰負載的各種負載案例，並確認工作負載的行為符合您的 SLO。這些測試應該自動化，並整合到您的持續整合和部署管道中，以及早發現開發過程中的效能迴歸。

 為了有效測試擴展和效能，請投資正確的工具和基礎設施。這包括可產生實際使用者流量的負載測試工具、識別瓶頸的效能分析工具，以及追蹤關鍵指標的監控解決方案。重要的是，您應確認您的測試環境在基礎設施和環境條件方面盡量與正式作業環境相符，以使測試結果盡可能準確。為了更容易可靠地複寫和調整類似正式作業的設定，請使用基礎設施即程式碼和容器型應用程式。

 擴展和效能測試是持續進行的程序，而不是一次性的活動。實作全面監控和警示，以追蹤應用程式正式作業時的效能，並使用這些資料持續改進您的測試策略和最佳化工作。定期分析效能資料，以找出新興問題、測試新的擴展策略並實作最佳化，以提高應用程式的效率和可靠性。只要您採用迭代方法並持續從正式作業資料中學習，就可以確認您的應用程式能夠適應不斷變化的使用者需求，並隨著時間維持彈性和最佳效能。

### 實作步驟
<a name="implementation-steps"></a>

1.  確立明確且可衡量的效能需求，例如回應時間、輸送量和可擴展性目標。這些需求應以工作負載的使用模式、使用者期望和業務需求為基礎。

1.  選取並設定負載測試工具，以準確地模擬正式作業環境中的負載模式和使用者行為。

1.  設定盡量與正式作業環境相符的測試環境，包括基礎設施和環境條件，以提高測試結果的準確性。

1.  建立測試套件，涵蓋從平均用量模式到尖峰負載、快速尖峰和持續高負載等各種案例。將這些測試整合到您的持續整合和部署管道中，以及早發現開發過程中的效能迴歸。

1.  執行負載測試以模擬實際使用者流量，並了解應用程式在不同負載條件下的行為。若要對您的應用程式進行壓力測試，請超過預期的負載並觀察其行為，例如回應時間變慢、資源耗盡或系統故障，這樣做有助於識別應用程式的中斷點並納入擴展策略。透過逐步增加負載來評估工作負載的可擴展性，並衡量效能影響以了解擴展限制並規劃未來容量需求。

1.  實作全面的監控和警示，以追蹤效能指標、偵測異常情況，並在超出閾值時初始化擴展動作或通知。

1.  持續監控和分析效能資料，以識別需要改進的層面。對您的測試策略和最佳化工作採取迭代方法。

## 資源
<a name="resources"></a>

 **相關的最佳實務：**
+  [REL01-BP04 監控和管理配額](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_manage_service_limits_monitor_manage_limits.html) 
+  [REL06-BP01 監控工作負載的所有元件 (產生)](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_monitor_aws_resources_monitor_resources.html) 
+  [REL06-BP03 傳送通知 (即時處理和警示)](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_monitor_aws_resources_notification_monitor.html) 

 **相關文件：**
+  [負載測試應用程式](https://docs.aws.amazon.com/prescriptive-guidance/latest/load-testing/welcome.html) 
+  [AWS 上的分散式負載測試](https://aws.amazon.com/solutions/implementations/distributed-load-testing-on-aws/) 
+  [應用程式效能監控](https://aws.amazon.com/what-is/application-performance-monitoring/) 
+  [Amazon EC2 測試政策](https://aws.amazon.com/ec2/testing/) 

 **相關範例：**
+  [AWS 上的分散式負載測試 (GitHub)](https://github.com/aws-solutions/distributed-load-testing-on-aws) 

 **相關工具：**
+  [Amazon CodeGuru Profiler](https://docs.aws.amazon.com/codeguru/latest/profiler-ug/what-is-codeguru-profiler.html) 
+  [Amazon CloudWatch RUM](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-RUM.html) 
+  [Apache JMeter](https://jmeter.apache.org/) 
+  [K6](https://k6.io/) 
+  [Vegeta](https://github.com/tsenart/vegeta) 
+  [Hey](https://github.com/rakyll/hey) 
+  [ab](https://httpd.apache.org/docs/2.4/programs/ab.html) 
+  [wrk](https://github.com/wg/wrk) 
+ [AWS 上的分散式負載測試](https://aws.amazon.com/solutions/implementations/distributed-load-testing-on-aws/)