

# REL05-BP06 盡可能讓系統處於無狀態
<a name="rel_mitigate_interaction_failure_stateless"></a>

 系統不應要求狀態，或應該卸載狀態，以便在不同的用戶端請求之間，不依賴磁碟和記憶體中本機儲存的資料。這允許伺服器任意置換，而不會對可用性造成影響。

 當使用者或服務與應用程式互動時，他們通常會執行形成工作階段的一系列互動。工作階段是使用者在使用應用程式時，在不同請求之間持續存在的唯一資料。無狀態應用程式是一種不需要了解先前互動，也不會儲存工作階段資訊的應用程式。

 一旦設計為無狀態，您就可以使用無伺服器運算服務，例如 AWS Lambda 或 AWS Fargate。

 除了伺服器替換之外，無狀態應用程式的另一個優點是他們可以水平擴展，因為任何可用的運算資源 （例如EC2執行個體和 AWS Lambda 函數） 都可以服務任何請求。

 **建立此最佳實務的優勢：**設計為無狀態的系統更適合水平擴展，因此可以根據波動的流量和需求來新增或移除容量。其本質上也具有抵抗故障的能力，並在應用程式開發中提供靈活性和敏捷性。

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

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

 讓您的應用程式無狀態。無狀態應用程式支援水平擴展，並且可以容忍單個節點的失敗。分析並了解在架構中維持狀態的應用程式元件。這可協助您評估轉換為無狀態設計的潛在影響。無狀態架構會分離使用者資料並卸載工作階段資料。這提供了獨立擴展每個元件的彈性，以滿足不同的工作負載需求，並最佳化資源使用率。

### 實作步驟
<a name="implementation-steps"></a>
+  識別並了解應用程式中的有狀態元件。
+  透過將使用者資料與核心應用程式邏輯進行分離和管理來解耦資料。
  +  [Amazon Cognito](https://aws.amazon.com/cognito/) 可以使用[身分池](https://docs.aws.amazon.com/cognito/latest/developerguide/getting-started-with-identity-pools.html)、[使用者集區](https://docs.aws.amazon.com/cognito/latest/developerguide/getting-started-with-cognito-user-pools.html)和 [Amazon Cognito Sync](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-sync.html) 等功能，將使用者資料與應用程式的程式碼分離。
  +  可以將密碼儲存在安全的集中位置，使用 [AWS Secrets Manager](https://aws.amazon.com/secrets-manager/) 來分離使用者資料。這意味著應用程式的程式碼不需要存儲密碼，這使得它更安全。
  +  請考慮使用 [Amazon S3](https://aws.amazon.com/s3/) 來存放大型非結構化資料，例如影像和文件。應用程式可以在需要時擷取此資料，而無需將其存儲在記憶體中。
  +  使用 [Amazon DynamoDB](https://aws.amazon.com/dynamodb/) 來存放使用者設定檔等資訊。應用程式可以近乎即時的速度查詢這些資料。
+  將工作階段資料卸載至資料庫、快取或外部檔案。
  +  [Amazon ElastiCache](https://aws.amazon.com/elasticache/)、Amazon DynamoDB 、[Amazon Elastic File System](https://aws.amazon.com/efs/) （Amazon EFS） 和 [Amazon MemoryDB](https://aws.amazon.com/memorydb/) 是可用來卸載工作階段資料 AWS 的服務範例。
+  在確定需要使用所選儲存解決方案維持哪些狀態和使用者資料之後，設計一個無狀態架構。

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

 **相關的最佳實務：**
+  [REL11-BP03 在所有圖層上自動復原](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_withstand_component_failures_auto_healing_system.html) 

 **相關文件：**
+  [Amazon 建置者資料中心：避免分散式系統的備用](https://aws.amazon.com/builders-library/avoiding-fallback-in-distributed-systems) 
+  [Amazon 建置者資料中心：避免無法逾越的佇列待辦項目](https://aws.amazon.com/builders-library/avoiding-insurmountable-queue-backlogs) 
+  [Amazon 建置者資料中心：快取挑戰和策略](https://aws.amazon.com/builders-library/caching-challenges-and-strategies/) 
+  [上的無狀態 Web 層最佳實務 AWS](https://docs.aws.amazon.com/whitepapers/latest/best-practices-wordpress/stateless-web-tier.html) 