MonolithFirst 單體應用優先策略

2021-09-17 06:34:36 字數 1367 閱讀 2971

微服務是近年興起的乙個概念,是指將應用程式設計成一套可以單獨部署的服務。martin fowler是thoughtworks的首席科學家。他與thoughtworks首席顧問james lewis合作發表的《微服務》,可謂是了解微服務架構風格的入門必讀。近日,fowler又提出了monolithfirst策略。

\\ 在許多使用微服務架構的案例中,fowler注意到了如下兩種常見的模式:\\

fowler認為,雖然微服務是一種有用的架構,但由於會產生「微服務佣金(micrservicepremium)」,所以它只適用於複雜的系統。服務管理成本會減緩專案進度,因此,簡單的應用更適合採用單體架構。在此基礎上,他提出了monolithfirst策略,其基本思想是:即使應用後續可能受益於微服務架構,但開始時仍然將新應用構建為單體應用。這主要是出於以下兩個方面的考慮:\\

fowler列舉了如下幾種monolithfirst策略執行方法:

\\ 仔細設計乙個單體應用,留意軟體模組劃分,包括api邊界和資料儲存方式。做好這些工作後,向微服務切換就相對簡單了。 \\

開始時採用單體架構,然後逐步從系統邊緣剝離出微服務。 \\

首先構建乙個單體架構作為「犧牲架構(sacrificialarchitecture)」,然後整個的替換掉。 \\

以幾個粒度較大的服務開始,待功能邊界穩定後再分解成細粒度的服務。\

對於第一種方法,fowler指出,並不是任何乙個系統都可以分解成微服務。有許多系統,由於模組之間相互依賴度太高而難以分開。而且,目前為止,他還沒有看到多少採用這種方法的成功案例。第二種方法會在微服務架構的內部保留一部分單體架構,新開發功能採用微服務架構模式。對於第三種方法,fowler提醒說,「不要害怕構建乙個將來會被丟棄的單體應用,尤其是當它能使軟體快速推向市場時。」第四種方式可以讓團隊獲得服務開發及管理經驗,而粗粒度的服務還能減少服務間的重構,這有利於後續向微服務遷移。

\\ fowler承認,他現在還不知道如何確定乙個專案是否要使用monolithfirst策略。但同時,他認為,除非團隊有適當的微服務系統構建經驗,否則,不要從微服務開始構建乙個新系統。sam newman是fowler的同事,他分享了乙個團隊考慮在新專案中使用微服務的案例,感興趣的讀者可以進一步閱讀。

\\ 而有兩年微服務開發經驗的網友room271則表達了相反的觀點,他認為,在小公司/團隊中,採用微服務可能不太明智,因為它對技能的要求比較高,會導致得不償失。但同時,他覺得,monolithfirst是顧問公司的立場,因為當單體應用出現問題時,他們可能已經完成專案離開了。

\\ 當然,也有許多網友表示支援,認為微服務設計很難上手也很難重構,而且對技能要求太高。網友btilly就指出,即使不採用monolithfirst策略,構建乙個原型單體系統也是很有價值的。

\\ 感謝徐川對本文的審校。

\

MonolithFirst 單體應用優先策略

微服務是近年興起的乙個概念,是指將應用程式設計成一套可以單獨部署的服務。martin fowler是thoughtworks的首席科學家。他與thoughtworks首席顧問james lewis合作發表的 微服務 可謂是了解微服務架構風格的入門必讀。近日,fowler又提出了monolithfir...

單體內建物件 單體內建物件

1 global物件 所有全域性作用域定義的屬性與函式,都是global物件的屬性。1.1 uri編碼方法 encodeuri 不會對本身屬於uri的特殊符號進行編碼。uri解碼方法 decodeuri 只能對使用encodeuri 替換的字元進行解碼 decodeuricomponent 能夠解碼...

單體內建物件 單體內建物件

內建物件 由ecmascript實現提供的,不依賴宿主環境的物件,這些物件再es程式執行之前就已經存在 global物件 global全域性物件是乙個特別的物件 兜底物件 不屬於其他物件的屬性和方法,都屬於global物件。如 isnan isfinite parseint parsefloat 註...