AWS - Cloud Architecture Principles
Desing for failure
在設計架構時應該要考慮業務運作的所有流程,且假定都有故障的風險
我們可以監控工作負載的關鍵績效指標(KPI) 在超出閥值呼叫自動化衡量業務價值
針對故障設計的例子有使用 ELB 跨 AZ EC2 Instance 組成 ASG, ELB 會對 Instance 檢查當 Instance 故障會將流量導向其他 Instance 如 AZ 故障也會將流量導向另一個可用區域

Embrace elasticity and automate
在建立架構的時候無法確保所有元件都保持健康。因此增加彈性與自動化有助於降低任何不健康組件中斷服務或造成延遲的可能性
本地工作故障的常見原因是資源飽和,對工作負載需求超出容量。雲端可以幫助監控需求與工作負載利用率。可以自動刪除與新增資源保持最佳水準。
彈性還可以確保在不需要資源時不會過度配置。
自動化帶來彈性的例子用 ASG 縮減或擴展 EC2

Loose couple
隨著單體式應用程式的成長,修改或新增功能變得越來越困難。追蹤特定更改涉及的程式碼也變困難。因此小的變更可能會需要冗長的測試,新功能開發速度也會很慢。使用 Microservices 與鬆散耦合元件建構應用程式可以變的容易。這種架構允許開發人員在單體服務時間與發度許多新的功能與錯誤修復
可以把單體式應用重新設計成 Microservices 來提高敏捷性與靈活性。為了實現這種鬆散耦合系統中的服務需要互相通訊,這種通訊可以用 API 或是非同步訊息(Ex: AWS SQS) 將流程分成不同不份,並透過 Queue 中的訊息進行連結,可以創建清晰的事物邊界並允許服務更獨立地運作。

Become stateless
無狀態是指使用中間服務來保存基於狀態的訊息,同時應用程式繼續運行,而不是將狀態資料儲存在伺服器中。無論請求來自何處,或哪個應用程實際處理請求,資訊都保存在這些服務
相較之下,有狀態伺服器會透過多個請求追蹤客戶的連線狀態及其資料。這些請求可能包括登入、更新系統的文件,然後登出。伺服器會追蹤所有這些請求
下圖範例顯示有台 instance 發生故障,但使用者還是可以正常使用,原因是另一個已經進行故障轉移的 instance 可以存取 DynamoDB 的資料

Use parallelism
使用平行意味著將較大的任務分解成更小但相似的子任務。這些子任務獨立處理。最終合併成一個流程,從而提高效率。
例如同時運行四台 instance 的成本與線性運行四台 instance 成本相同。採用平行配置可以更快、更有效率地完成工作,同時保持管理和擴展能力。
Use appropriate storage options
使用最合適的儲存選項
一些特性會影響選擇
- 存取方式(Block/File/Object)
- 訪問模式(Random/Sequentail)
- 必要的吞吐量
- 訪問頻率(Online/Offline/Archive)
- 更新頻率(One time write/multi write/dynamic)
- 可用性與持久性限制
- 大多數情況下,架構需要多種儲存選項
舉例 一個網站託管在 EC2 上 使用 S3 儲存圖片用 RDS 交易處理 DynamoDB 紀錄點擊流

Build security into every layer
安全非常重要在每個環節都應該重視,需要透過加密或保護對資料的存取權限來保護資料。使用最小權限原則避免資源不必要的操作權限。
舉例,使用者可以防止 EC2 Instance 意外終止或限制 S3 的存取
資料可在靜態或動態傳輸過程中加密。傳輸中的資料是指從一個服務傳輸到另一個服務的資料。在傳輸過程中,必須對資料進行加密,以防止惡意代理使用。這種加密是透過 SSL/TLS 實現的。靜態資料是指儲存在資料庫或 EBS 等服務的資料。AWS 提供多種加密方法如 KMS

 
      