View a markdown version of this page

Strangler 無花果模式 - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Strangler 無花果模式

到目前為止,本指南中討論的設計模式適用於分解綠地專案的應用程式。涉及大型單體應用程式的布朗菲爾德專案呢? 將先前的設計模式套用到它們會很困難,因為在主動使用它們時將其分成較小的部分是一項重大任務。

Strangler fig 模式是由 Martin Fowler 引入的熱門設計模式,其受到特定類型的 fig 的啟發,該類 fig 會在樹的上分支中植入。現有的樹最初會成為新無花果的支援結構。 然後,該無花果會將其根傳送到地面,逐漸包圍原始樹狀結構,並只將新的自助式無花果留在原處。

此模式通常用於將特定功能取代為新服務,以累加方式將單體應用程式轉換為微服務。目標是讓舊版和新的現代化版本共存。新系統最初由現有系統支援並包裝。此支援可讓新系統有時間成長,並可能完全取代舊系統。

透過實作 strangler fig 模式,從單體應用程式轉換為微服務的程序包含三個步驟:轉換、共存和消除:

  • 轉換 – 透過與舊版應用程式平行移植或重寫這些元件,來識別和建立現代化元件。

  • 共存 – 保留整體應用程式以進行轉返。在整體周邊整合 HTTP 代理 (例如 Amazon API Gateway) 以攔截外部系統呼叫,並將流量重新導向至現代化版本。這可協助您逐步實作功能。

  • 消除 – 從整體淘汰舊功能,因為流量會從舊版整體重新導向到現代化服務。

下表說明使用 strangler fig 模式的優點和缺點。

優點 缺點
  • 允許從服務正常遷移到一或多個替代服務。

  • 讓舊服務保持運作狀態,同時重構為更新的版本。

  • 提供新增服務和功能的能力,同時重構較舊的服務。

  • 此模式可用於 APIs的版本控制。

  • 模式可用於未升級或不會升級之解決方案的舊版互動。

  • 不適用於複雜性較低且大小很小的小型系統。

  • 無法在無法攔截和路由請求後端系統的系統中使用。

  • 如果未正確設計,代理或臉部圖層可能會成為單一故障點或效能瓶頸。

  • 每個重構服務都需要復原計劃,以便在發生錯誤時,快速安全地恢復到舊的執行方式。

下圖顯示如何透過將 strangler fig 模式套用至應用程式架構,將單體分割為微服務。這兩個系統都平行運作,但您會開始將功能移到整體程式碼基礎之外,並使用新功能增強功能。這些新功能讓您有機會以最符合您需求的方式架構微服務。您將繼續從整體中剔除功能,直到全部被微服務取代為止。此時,您可以消除整體應用程式。這裡要注意的重點是整體和微服務都會一起存活一段時間。

使用 strangler fig 模式將整體分解為微服務