# 微服務架構設計 - 扼殺人 Strangler Pattern
# Stranlger Pattern Introduction
Strangler Pattern 是用於達成從 單體式 轉變成 微服務 架構的遷移設計模式,其中 Strangler Pattern 涉及取代一些單體式 App 到微服務的內容。
其中 Strangler Pattern 的實施包含三個步驟
- Transform 轉變
- Co-exists 共存
- Eliminate 除去
# Strangler Patter 使用案例
Strangler Pattern 用於單體式 App 轉變成微服務時使用,事實證實了當系統重寫會帶來重大的風險與中斷,但是有益處的,特別是適合擁有複雜 Codebases 的 Legacy System 對於 Refactor 全面系統困難的時候。
# Strangler Pattern 特色
- 逐步遷移
- 可以讓 單體式 App 一步一步的遷移到 微服務 可以讓組織逐漸的替代特定的功能或是模組
- 共存
- 當在遷移過程, 單體式 App 與 微服務 共存,確保系統功能不中斷
- 扼殺行為
- Strangler Pattern 逐漸替代元件或模組最終導向替換掉 Legacy System
# 實踐 Strangler Pattern
這邊以電子商務單體式應用程式作為範例
- 確任 訂單管理功能 在單體式 App 內
- 建立 訂單管理微服務
- 設置 API Gateway 去導向 訂單管理請求 到微服務
- 遷移單體式 App 的特定功能到微服務
- 重複上述 1~4 的步驟直到完全取代 Legacy System
# Strangler Pattern 優缺點
# Strangler Pattern 優點
- 逐步遷移
- 彈性
- 共存
# Strangler Pattern 缺點
- 複雜
- 資料一致性
- 增加網路呼叫
- 依賴管理問題
# 甚麼樣的元件應該先被 Strangled [扼殺] 或是 Refactored [重構]
- 直觀且安全的元件 (在不熟悉 Strabgler Pattern 的情況)
- 擁有高測試覆蓋率與低技術負債的元件 (給予團隊遷移信心)
- 有擴展需求的雲端元件
- 因商業需求而頻繁佈署元件,但又不想重新佈署所有元件時
- 當你有遷移到雲端的障礙時,Stranlger 可以幫助你低風險且順暢的完成
- 需要藉由減少應用程式複雜度達到更快速的提供業務功能,如果搭配 CI/CD 能夠更順暢的從單體轉變到微服務
# 參考資料
- Strangler Pattern in Micro-services | System Design