本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
REL05-BP06 盡可能讓系統處於無狀態
系統不應要求狀態,或應該卸載狀態,以便在不同的用戶端請求之間,不依賴磁碟和記憶體中本機儲存的資料。這允許伺服器任意置換,而不會對可用性造成影響。
當使用者或服務與應用程式互動時,他們通常會執行形成工作階段的一系列互動。工作階段是使用者在使用應用程式時,在不同請求之間持續存在的唯一資料。無狀態應用程式是一種不需要了解先前互動,也不會儲存工作階段資訊的應用程式。
一旦設計為無狀態,您就可以使用無伺服器運算服務,例如 AWS Lambda 或 AWS Fargate。
除了伺服器替換之外,無狀態應用程式的另一個優點是他們可以水平擴展,因為任何可用的運算資源 (例如EC2執行個體和 AWS Lambda 函數) 都可以服務任何請求。
建立此最佳實務的優勢:設計為無狀態的系統更適合水平擴展,因此可以根據波動的流量和需求來新增或移除容量。其本質上也具有抵抗故障的能力,並在應用程式開發中提供靈活性和敏捷性。
未建立此最佳實務時的曝險等級:中
實作指引
讓您的應用程式無狀態。無狀態應用程式支援水平擴展,並且可以容忍單個節點的失敗。分析並了解在架構中維持狀態的應用程式元件。這可協助您評估轉換為無狀態設計的潛在影響。無狀態架構會分離使用者資料並卸載工作階段資料。這提供了獨立擴展每個元件的彈性,以滿足不同的工作負載需求,並最佳化資源使用率。
實作步驟
-
識別並了解應用程式中的有狀態元件。
-
透過將使用者資料與核心應用程式邏輯進行分離和管理來解耦資料。
-
Amazon Cognito
可以使用身分池、使用者集區和 Amazon Cognito Sync 等功能,將使用者資料與應用程式的程式碼分離。 -
可以將密碼儲存在安全的集中位置,使用 AWS Secrets Manager
來分離使用者資料。這意味著應用程式的程式碼不需要存儲密碼,這使得它更安全。 -
請考慮使用 Amazon S3
來存放大型非結構化資料,例如影像和文件。應用程式可以在需要時擷取此資料,而無需將其存儲在記憶體中。 -
使用 Amazon DynamoDB
來存放使用者設定檔等資訊。應用程式可以近乎即時的速度查詢這些資料。
-
-
將工作階段資料卸載至資料庫、快取或外部檔案。
-
Amazon ElastiCache
、Amazon DynamoDB 、Amazon Elastic File System (Amazon EFS) 和 Amazon MemoryDB 是可用來卸載工作階段資料 AWS 的服務範例。
-
-
在確定需要使用所選儲存解決方案維持哪些狀態和使用者資料之後,設計一個無狀態架構。
資源
相關的最佳實務:
相關文件: