Please enable JavaScript.
Coggle requires JavaScript to display documents.
Monolith to Microservices - 3. Splitting the Monolith (Pattern: Strangler…
Monolith to Microservices - 3. Splitting the Monolith
Pattern: Strangler Fig Application
從系統周邊拆解
像無花果一樣,把種子撒在旁邊,然後再慢慢吞噬原來的樹木
先建後拆
使用情境 (end to end 擷取)
淺層擷取
strangler fig pattern 比較無法處理系統深層的先建後拆法,可改用 抽象法
範例:反向代理
HTTP-based strangler
Overview
產品增量更新
更改協議
使用代理改變協議,是 strangler migration 的一部分
Service Meshes
範例:FTP (平行模式)
系統透過 FTP 上傳客戶列表
攔截
注意事項
:搬遷時,盡量不要有 CR,因為 roll back change 很麻煩
範例:訊息攔截
content-based router
單體式架構,接收訊息
content-based router 攔截訊息分發
選擇性訂閱 (消費)
過濾規則越多越複雜,問題會越多
Pattern: UI Composition
主要考慮的方法,提供能將工作增量推向伺服器的機會
範例:頁面組成 Page Composition
範例:小元件組成 Widget Composition
在 衛報 的經驗,使用 Apache ESI (Edge-Side Includes)
Mobile Apps
也開始 元件化、模組化 UI
從後端動態發佈更新內容,例如:
遷入 WebView QQ
Spotify UI 跨平台 元件話
範例:微前端
把 UI 拆解為各個不同元件
SPA 單獨UI 如何元件化,超出本書範圍,網路上很多人討論 ...
使用時機
re-platforming systems 非常有效
新功能遷移可以垂直分割 vertical slices
Pattern: Branch by
Abstraction
模式: 按抽象分支
五部曲
要替換的功能
建立抽象
加入新的抽象
建立實作
新舊切換
補充:Factory Design Pattern
清理舊的實作
使用時機
常用的方法
不會打擾到同事
Pattern: Parallel Run 模式: 並行運行
新舊都打
Using Spies
Email Spy 驗證新功能是否運行
範例:比較信用卡衍生定價
最後批次驗證
Dark Launching and Canary Releasing
金絲雀部署:將部分用戶導到新功能
黑暗發布:上新功能,但用戶還看不到,直到系統切換
progressive delivery 漸進交付(減少系統錯誤所造成的影響)
使用時機
缺點:繁瑣
使用於改進會造成高風險的功能
Pattern: Decorating Collaborator 圖案: 裝飾合作者
範例:顧客忠誠度
使用時機
如果設計得夠簡單,會比 CDC 方法 耦合度更低
Pattern: Change Data Capture 模式: 更改數據捕獲
使用時機
通用的方法,特別是需要複製一份資料的時候。
甜蜜點,單體式架構需反應資料改變,但無法在系統周邊使用 Strangler or Decorator 攔截這些更改,也無法更改底層代碼。
作者建議少用,有一些現實存在的挑戰,例如 trigger, CDC 工具 讓解決方案的複雜度提升
實現 CDC 的方法
DB Trigger
謹慎使用,會使DB複雜化
Transaction log pollers
Batch Delta Copier
掃描變更的資料,拷貝到目的地。
可能是 CDC 最簡單的方法,通常用 cron 或其他排程工具
範例:忠誠度會員卡發行
希望用戶註冊時,創建一個忠誠帳戶
單體式架構,很難去通知,當用戶註冊的事件
使用 CDC,偵測到插入 LoyaltyAccount 表格資料時,製作忠誠卡片