應用程式的絞殺策略

應用程式的絞殺是一種機制,通過這種機制可以在應用程式或服務中進行非常大的、會引起混亂的變更,而不會影響其上線的能力,即使這些變更只完成了一部分。Martin Fowler 以爬上現有樹木、在叢林的樹冠層偷取一絲陽光的藤蔓命名了這種作法(見下方參考資料)。

訣竅在於有一個機制,能夠在舊的解決方案和新的解決方案之間去指揮路由的呼叫。比如說你是一家航空公司,你的第一個線上購買體驗服務是用「Perl」開發的。現在你想要使用「Elixir」以及其框架「Phoenix」。

絞殺策略是指你會使用 Apache 服務器作為 Perl 的前端,有條件地將 HTTP 請求路由到 Erlang、Elixir 或 Phoenix。比如說,你完成的第一個里程碑是「忠誠賬戶查看或編輯」,你會根據瀏覽器請求的 URL 來進行路由。顯然,對於舊的 Perl 應用和新的 Elixir 應用來說,對 URL(和 cookies)達成共識是關鍵,同步部署也是必要的。

在絞殺過程的某一點上,你可能會將 Elixir 置於 Apache 或 Perl 之前,讓流量轉而通過它。這是在刪除 Perl 最後幾行程式碼並在絞殺過程完全完成時終止那一委派之前的過渡狀態。

這與抽象分支有些相關。絞殺是針對不兼容語言的策略(因為它們不再同一個處理程序中),而抽象分支適用於「從」一種語言轉換「到」相同(例如 Java -> Java)或兼容的語言(Java -> Scala)。

其他參考資料

顯示參考資料

29 Jun 2004, MartinFowler.com article
Application Strangulation
17 Jan 2006, Blog Entry
Great Architects Are Also Stranglers
14 Jul 2013, Blog Entry
Legacy Application Strangulation: Case Studies