AWS 的應用架構樣式
在 AWS 上部署應用程式
Dunieski Otano
Amazon Web Services Solutions Architect
認識你的講師
為何正確架構很重要
架構是
取捨
的組合,沒有唯一答案
三個問題決定每次選擇:
元件之間有多
緊密耦合
?
狀態
放在哪裡?
通訊是
同步或非同步
?
依
工作負載
選樣式,不追流行
週五晚上的連鎖效應
緩慢的付款 API 讓整個結帳卡住
所有服務都同步等待它
解法在於架構,不是更快的 API
架構選擇為何決定部署結果
你選的樣式決定應用如何
擴展與失敗
緊密耦合設計在高負載下會崩潰
正確樣式讓部署可預期
同一份程式碼,線上行為可能大不同
核心架構樣式
單體(Monolithic)
:一個可部署單元,起步簡單
微服務(Microservices)
:獨立服務,各自部署
事件導向(Event-driven)
:以事件觸發,不是直接呼叫
扇出(Fanout)
:一事件傳遞到多個消費者
有狀態 vs 無狀態
無狀態(Stateless)
:請求間不保留用戶端資料
任何實例都可處理任何請求
有狀態(Stateful)
:實例會記住先前互動
無狀態讓你可
水平擴展
將共享狀態放到
DynamoDB
或
ElastiCache
緊密 vs 鬆散耦合
緊密耦合
:呼叫端等待被叫端回應
一個慢服務會拖住整條鏈
鬆散耦合
:服務之間放入
Amazon SQS
佇列
即使消費者當機,生產者仍可繼續工作
同步 vs 非同步
同步(Synchronous)
:呼叫端被阻塞並等待結果
當呼叫端需要即時答案時使用
非同步(Asynchronous)
:交付工作後立即返回
適合較慢、突發或非緊急的工作
第三方呼叫的韌性樣式
指數退避重試
:每次嘗試間隔越等越久
斷路器
:暫停呼叫失敗的服務一段時間
死信佇列
:存放屢次失敗的訊息
合併運用;一味重試會讓故障更嚴重
一起來練習吧!
在 AWS 上部署應用程式
Preparing Video For Download...