本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
REL04-BP02 實作鬆散耦合相依性
佇列系統、串流系統、工作流程和負載平衡器之間具有鬆散耦合的相依性。鬆耦合有助於將某個元件的行為與依賴它的其他元件隔離,進而提高彈性和敏捷性。
解除相依性 (例如佇列系統、串流系統和工作流程) 有助於將變更或失敗對系統造成的影響降到最低。這種分離使組件的行為不會影響依賴它的其他組件,從而提高了彈性和敏捷性。
在緊耦合的系統中,對某個元件進行變更時,可能必須變更其他依賴此元件的元件,從而導致所有元件的效能降低。鬆耦合會破壞此相依性,因此相依元件只需要知道受版本控制的和已發布的界面。在相依性之間實作鬆耦合,可避免一個元件中的故障影響另一個元件。
鬆耦合可讓您修改程式碼或新增功能至某個元件,同時將依賴該元件的其他元件的風險降至最低。其還能讓您在元件層級提供細微的恢復能力,您可以橫向擴充,甚至是變更相依性的基礎實作。
若要透過鬆耦合進一步改善彈性,請盡可能讓元件採用非同步互動。此模型適用於不需要立即回應的任何互動,以及確認已註冊請求便以足夠的狀況。它涉及產生事件的一個元件和取用事件的另一個元件。這兩個元件不會透過直接 point-to-point互動整合,而是通常透過中繼耐用儲存層整合,例如 Amazon SQS佇列、串流資料平台,例如 Amazon Kinesis 或 AWS Step Functions。

圖 4:佇列系統和負載平衡器之間具有鬆散耦合的相依性
Amazon SQS佇列和 AWS Step Functions 只是新增中繼層以進行鬆散耦合的兩種方式。事件驅動的架構也可以 AWS 雲端 使用 Amazon 建置在 中 EventBridge,這可以從用戶端 (事件生產者) 仰賴的服務 (事件消費者) 中抽象用戶端 (事件生產者)。當您需要高輸送量、推送型訊息時, many-to-manyAmazon Simple Notification Service (Amazon SNS) 是有效的解決方案。使用 Amazon SNS主題,您的發佈者系統可以將訊息散播到大量訂閱者端點以進行平行處理。
雖然佇列提供多項優勢,但在大多數硬式即時系統中,超過閾值時間 (通常為秒) 的請求應視為過時 (用戶端已放棄且不再等待回應) 且未處理。這樣才可以處理較新的 (且可能仍有效的) 請求。
預期成果:實作鬆耦合的相依性可將元件層級故障的影響降到最低,這有助於診斷和解決問題。它還能簡化開發週期,讓團隊在模組化層級實作變更,而不會影響依賴此元件之其他元件的效能。這種方法可讓您根據資源需求,以及對成本效益有所貢獻之元件的使用情況,在元件層級進行橫向擴充。
常見的反模式:
-
部署整合型工作負載。
-
直接在工作負載層APIs之間調用,而沒有容錯移轉或非同步處理請求的能力。
-
使用共用資料的緊耦合。鬆耦合系統應避免透過共用資料庫或其他形式的緊耦合資料儲存共用資料,這可能會重新引入緊耦合並阻礙可擴展性。
-
忽略反壓。當元件無法以相同的速率處理傳入的資料時,工作負載應該要有能力減緩或停止傳入的資料。
建立此最佳實務的優勢:鬆耦合有助於將某個元件的行為與依賴它的其他元件隔離,進而提高彈性和敏捷性。避免一個元件中的失敗影響其他元件。
未建立此最佳實務時的曝險等級:高
實作指引
實作鬆耦合相依性。有各種解決方案可讓您建置鬆耦合的應用程式。其中包括實作完全受管佇列、自動化工作流程、對事件做出反應APIs等服務,這些服務可協助隔離元件與其他元件的行為,進而提高復原能力和靈活性。
-
建置事件驅動架構:Amazon EventBridge 可協助您建置鬆散耦合和分散式事件驅動架構。
-
在分散式系統中實作佇列:您可以使用 Amazon Simple Queue Service (Amazon SQS) 來整合和解耦分散式系統。
-
將元件容器化為微服務:微服務
可讓團隊建置由小型獨立元件組成的應用程式,這些元件透過定義明確的 進行通訊APIs。Amazon Elastic Container Service (Amazon ECS) 和 Amazon Elastic Kubernetes Service (Amazon EKS) 可協助您更快開始使用容器。 -
使用 Step Functions 管理工作流程:Step Functions
可協助您將多項 AWS 服務協調為彈性工作流程。 -
利用發佈訂閱 (pub/sub) 訊息架構:Amazon Simple Notification Service (Amazon SNS) 提供從發佈者到訂閱者 (也稱為生產者和消費者) 的訊息傳遞。
實作步驟
-
事件驅動架構中的元件會由事件啟動。事件是系統中發生的動作,例如使用者將某個商品新增至購物車。動作成功時會產生可啟動系統下一個元件的事件。
-
分散式傳訊系統有三個需要針對佇列型架構來實作的主要部分。其中包括分散式系統的元件、用於解耦的佇列 (在 Amazon SQS 伺服器上分佈),以及佇列中的訊息。典型的系統中有負責將訊息啟動至佇列的生產者,以及從佇列接收訊息的取用者。佇列會在多個 Amazon SQS 伺服器之間存放訊息,以進行備援。
-
充分利用的微型服務會增強可維護性並提高可擴展性,因為鬆耦合元件由獨立團隊管理。其還能夠在發生變更時隔離單一元件的行為。
-
AWS Step Functions 您可以透過 建置分散式應用程式、自動化程序、協調微服務等。將多個元件協同運作到自動化工作流程中可讓您解耦應用程式中的相依性。
資源
相關文件:
相關影片: