微服務中常見的 9 種設計模式!如何選擇?

你好,我是猿 java

現如今,微服務已經成了很多中大型互聯網公司的標配,不同的公司採用的設計模式可能不一樣,因此,這篇文章,我們來分析下微服務中常見的 9 種設計模式:

  1. API Gateway Pattern(網關模式)

  2. Service Registry Pattern(服務註冊表模式)

  3. Circuit Breaker Pattern(斷路器模式)

  4. Saga Pattern(Saga 模式)

  5. Event Sourcing Pattern(事件溯源模式)

  6. Strangler Fig Pattern(絞殺者模式)

  7. Bulkhead Pattern(艙壁模式)

  8. API Composition Pattern(API 組合模式)

  9. CQRS Design Pattern(CQRS 模式)

接下來,我們將分別介紹每種模式以及它們的優缺點和使用場景:

API Gateway Pattern

API Gateway 模式是一種設計模式,用於管理客戶端與後端服務之間的請求,它充當客戶端和服務之間的中介層,提供一個統一的接口來處理所有的 API 請求。

這種模式通過將多個服務的複雜性隱藏在一個接口後面來簡化客戶端的體驗,它還可以處理身份驗證、日誌記錄和速率限制等任務,使其成爲微服務架構的關鍵部分。

API Gateway 模式可以抽象如下圖:

優點:

缺點:

適用場景:

Service Registry Pattern

服務註冊表模式用於在微服務架構中跟蹤微服務實例的位置和狀態,服務提供者在啓動時將其地址註冊到服務註冊表中,然後,其他服務可以查找註冊表以查找它並與之通信。這種動態發現實現了靈活性,並幫助服務在不對其位置進行硬編碼的情況下進行交互。

Service Registry 模式可以抽象如下圖:

優點:

缺點:

適用場景:

Circuit Breaker Pattern

斷路器模式用於在服務之間調用時,防止系統因服務故障而出現級聯故障,它可以檢測服務的失敗,並在檢測到故障時,短路請求以避免進一步的失敗。如果服務反覆失敗,斷路器將跳閘,從而阻止對該服務的進一步請求。超時期限後,它允許有限的請求測試服務是否重新聯機,這減少了失敗服務的負載並增強了系統彈性。

Circuit Breaker 模式可以抽象如下圖:

優點:

缺點:

適用場景:

Saga Pattern

Saga 模式是一種分佈式事務管理模式,用於管理跨多個服務的長時間運行的業務交易。Saga 將事務分解爲一系列的小事務,每個小事務由一個獨立的服務處理。如果一個步驟失敗,則會採取補償措施來反轉前面的步驟。這樣,即使遇到故障,您也可以保持整個系統的數據一致性。

Saga 模式可以抽象如下圖:

優點:

缺點:

適用場景:

Event Sourcing Pattern

事件溯源模式是通過存儲系統中所有狀態變化的事件來記錄狀態的變化,應用程序的狀態可以通過重放這些事件來重建。每個事件都描述了發生的更改,允許服務通過重放事件歷史記錄來重建當前狀態,這提供了清晰的審計跟蹤,並簡化了出現錯誤時的數據恢復。

Event Sourcing 模式可以抽象如下圖:

優點:

缺點:

適用場景:

Strangler Fig Pattern

絞殺者模式用於逐步替換舊系統的功能,而不需要一次性重構整個系統,新功能在新系統中實現,隨着時間的推移,隨着更多功能轉移到微服務,舊系統會逐漸被 “扼殺” ,直到它可以完全停用,這種方法將風險降至最低,並允許更順利的遷移。

Strangler Fig 模式可以抽象如下圖:

優點:

缺點:

適用場景:

Bulkhead Pattern

艙壁模式通過將系統分成獨立的隔離部分,如果一個服務遇到問題,它不會損害其他服務,通過創建邊界,此模式增強了系統的彈性,確保一個領域的故障不會導致整個系統故障。

Bulkhead 模式可以抽象如下圖:

優點:

缺點:

適用場景:

API Composition Pattern

API 組合模式用於在微服務架構中聚合來自多個服務的數據,以提供客戶端需要的完整響應,通常用於替代複雜的查詢。單獨的服務 (組合服務) 從各種服務收集響應,並將它們組合成一個 Client 端的響應,這減少了 Client 端發出多個請求的需要,並簡化了它們與系統的交互。

API Composition 模式可以抽象如下圖:

優點:

缺點:

適用場景:

CQRS Design Pattern

CQRS(Command Query Responsibility Segregation)模式將命令(寫操作)和查詢(讀操作)分開,以優化性能和可擴展性。例如,命令端可以專注於執行業務規則,而查詢端可以優化以實現快速數據檢索,這種模式在具有大量讀寫操作的應用程序中特別有用,因爲它通過允許對每一端進行不同的優化來增強性能和可擴展性。

CQRS 模式可以抽象如下圖:

優點:

缺點:

適用場景:

總結

本文,我們分析了微服務中常見的 9 種設計模式,這些模式各有優缺點,適用於不同的場景和需求,在設計分佈式系統時,選擇合適的模式可以提高系統的性能、可靠性和可維護性。因此,瞭解和掌握它們可以幫助我們更好地選擇和使用。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/3Pe1WCLP8nrWmy_OTi5D-Q