REL04-BP02 實作鬆耦合相依性 - 可靠性支柱

REL04-BP02 實作鬆耦合相依性

佇列系統、串流系統、工作流程和負載平衡器之間具有鬆散耦合的相依性。鬆耦合有助於將某個元件的行為與依賴它的其他元件隔離,進而提高彈性和敏捷性。

在緊耦合的系統中,對某個元件進行變更時,可能必須變更其他依賴此元件的元件,從而導致所有元件的效能降低。鬆耦合會破壞此相依性,因此相依元件只需要知道受版本控制的和已發佈的界面。在相依性之間實作鬆耦合,可避免一個元件中的故障影響另一個元件。

鬆耦合可讓您修改程式碼或新增功能至某個元件,同時將依賴該元件的其他元件的風險降至最低。其還能讓您在元件層級提供細微的恢復能力,您可以橫向擴展,甚至是變更相依性的基礎實作。

若要透過鬆耦合進一步改善彈性,請盡可能讓元件採用非同步互動。此模型適用於不需要立即回應的任何互動,以及確認已註冊請求便以足夠的狀況。它涉及產生事件的一個元件和取用事件的另一個元件。這兩個元件不會透過點對點直接互動來整合,但通常會透過中繼耐用儲存層來整合,例如 Amazon SQS 佇列,或如 Amazon Kinesis 或 AWS Step Functions 等串流資料平台。

Diagram showing dependencies such as queuing systems and load balancers are loosely coupled

圖 4:佇列系統和負載平衡器之間具有鬆散耦合的相依性。

Amazon SQS 佇列和 Elastic Load Balancer 只是為鬆耦合新增中繼層的兩種方式。事件驅動架構也可以使用 Amazon EventBridge 在 AWS 雲端 建置。其可從用戶端依賴的服務 (事件取用者) 中抽取用戶端 (事件生產者)。當您需要高輸送量、推送架構的多對多傳訊時,Amazon Simple Notification Service (Amazon SNS) 是有效的解決方案。使用 Amazon SNS 主題,您的發佈者系統可以將訊息散發給大量訂閱者端點,以進行平行處理。

雖然佇列提供多項優勢,但在大多數硬式即時系統中,超過閾值時間 (通常為秒) 的請求應視為過時 (用戶端已放棄且不再等待回應) 且未處理。這樣才可以處理較新的 (且可能仍有效的) 請求。

預期成果:實作鬆耦合的相依性可讓您將失敗的影響範圍最小化到元件層級,從而有助於診斷和解決問題。它還能簡化開發週期,讓團隊在模組化層級實作變更,而不會影響依賴此元件之其他元件的效能。這種方法可讓您根據資源需求,以及對成本效益有所貢獻之元件的使用情況,在元件層級進行橫向擴展。

常見的反模式:

  • 部署整合型工作負載。

  • 在工作負載層之間直接叫用 API,沒有容錯移轉或非同步處理請求的功能。

  • 使用共用資料的緊耦合。鬆耦合系統應避免透過共用資料庫或其他形式的緊耦合資料儲存共用資料,這可能會重新引入緊耦合並阻礙可擴展性。

  • 忽略反壓。當元件無法以相同的速率處理傳入的資料時,工作負載應該要有能力減緩或停止傳入的資料。

建立此最佳實務的好處:鬆耦合有助於將某個元件的行為與依賴它的其他元件隔離,進而提高彈性和靈活性。避免一個元件中的失敗影響其他元件。

未建立此最佳實務時的風險暴露等級:

實作指引

實作鬆耦合相依性。有各種解決方案可讓您建置鬆耦合的應用程式。這些解決方案包括用於實作全受管佇列的服務、自動化工作流程、對事件的回應以及 API 等,其有助於將元件的行為與其他元件隔離,從而提高彈性和靈活性。

實作步驟

資源

相關文件:

相關影片: