軟件產品架構中什麼是單體架構、SOA架構、微服務架構?

一葉知秋丿


軟件產品架構是不斷迭代演化的,從單體服務架構發展到現在的服務化、微服務的架構。

單體架構

單體架構就是所有的業務模塊都是耦合在一個項目中,開發、部署都在一起;如果其中一個模塊需要上線升級,那麼所有模塊都要一起啟停;

在早期,單體架構的項目團隊成員需要是“全棧”,因為前端、後端、數據庫都是一波人負責,後來開始進行了邏輯分層,團隊也分成了前端 UI 團隊、後端和 DBA 團隊,每個團隊都有自己負責的職責。

然而隨著業務邏輯越來越複雜,模塊和模塊之間的耦合度越來越高;另外隨著用戶和數據量的增多,單體架構也不再能夠支撐高併發和大數據。

SOA 架構

為了解決上面的問題,SOA 出現了。

SOA 代表了面向服務的架構,SOA 將應用程序的業務模塊進行拆分,形成獨立的應用系統,系統和系統之間通過明確的接口串聯起來;

每個系統內部結構和邏輯發生改變,並不影響對外提供的服務,只要保持接口不變,服務內部對外是透明的;

SOA 架構中,服務定義標註的接口,可以提供給多個調用方使用,增加了服務的重用性。

SOA 架構時代有兩個很重要技術實現方式:Web Service 和 ESB :前者提供了標準的數據傳輸協議,後者實現了服務編排和協議轉換。

微服務架構

但是隨著用戶和數據量的進一步增長,SOA 也暴露出來一些缺點,比如 SOAP 協議、XML較重;服務管理不完善;ESB本身就比較重,而且它本身算是一個單點,在軟件架構中,單點意味著風險。

在微服務的架構中,各個微服務可以獨立開發,獨立部署;微服務之間通常使用Restful風格的API通信,傳輸格式也通常選擇JSON;

微服務是SOA架構的延續,它們和單體應用相比,大大提高了系統的負載能力,解決了應用高併發的需求;

服務和服務之間的耦合度也被降低,並且項目團隊可以被拆分成多個小團隊,每個微服務都可以進行敏捷開發部署;

每個團隊的技術棧也可以不相同,只要遵守接口協議即可。

至於微服務和 SOA 架構的區別,我是這樣理解的:SOA 架構和微服務架構都屬於分佈式架構,分佈式的思想就是把不同的業務模塊,部署在不同的服務器上,以應對高併發的問題;SOA 是一種分佈式架構,把業務系統分成多個子系統,提供不同的服務,再通過服務組合、編排實現業務流程;微服務是SOA的昇華,如果非要說點兒不同的,那麼微服務更加強調服務的細分和專業,去ESB總線、去中心化,部署粒度更細,服務擴展更靈活。

當然SOA、微服務的出現,在解決一些問題的時候,也帶來了另外一部分的問題,比如增加了網絡開銷、服務依賴性、增加了測試運維難度、數據一致性問題等等。

我將持續分享Java開發、架構設計、程序員職業發展等方面的見解,希望能得到你的關注。


會點代碼的大叔




單體架構

在傳統IT行業的軟件系統設計大多都是各種獨立子系統的堆砌,這也就是所說的單體架構,其本身擴展性差,可靠性低,維護成本高。單體架構在初期系統規模比較小的情況下尚且能夠較好的支撐,但是隨著系統規模的擴大,它暴露出來的問題也越來越多,主要有以下幾點:

  • 複雜性逐漸變高,問題修復和新功能開發難度和成本高,引入新問題的可能性變大。同時,任意模塊的缺陷都可能會影響整個系統,可靠性低。
  • 隨著人員流動,加之複雜性高,新的問題很難被發現和解決,久而久之,問題逐漸變多,變難、變大,技術債務逐漸上升。
  • 隨著模塊不斷集成,部署速度逐漸變慢
  • 想進行整體的技術創新基本不可能,阻礙技術創新
  • 垂直和水平的可擴展性差

SOA架構

隨後,引入了SOA服務化(面向服務的架構,它將應用程序的不同功能單元(服務)進行拆分,並通過這些服務之間定義良好的接口和契約聯繫起來)。但是,由於 SOA 早期均使用了ESB總線模式,這種總線模式與某種技術棧是強綁定的,如,J2EE。這又使得很多企業的遺留系統很難對接,切換時間太長,對接成本太高,新系統穩定性的收斂也需要一些時間。最終 SOA 看起來很美,但卻成為了企業級奢侈品,中小公司都望而生畏。


SOA服務化思想下的微服務架構

微服務是在 SOA 上做的昇華,微服務最早由Martin Fowler與James Lewis於2014年共同提出,微服務架構風格是一種使用一套小服務來開發單個應用的方式途徑,每個服務運行在自己的進程中,並使用輕量級機制通信,通常是HTTP Rest API的方式(告別ESB服務總線),這些服務基於業務能力構建,並能夠通過自動化部署機制來獨立部署,這些服務使用不同的編程語言實現,以及不同數據存儲技術,並保持最低限度的集中式管理。

簡單講,微服務不再強調傳統SOA架構裡面比較重的ESB服務總線,同時將SOA的思想延伸到單個業務系統內部實現真正的組件化。微服務架構強調的一個重點是“業務需要徹底的組件化和服務化”。

從微服務的概念可以看出它有如下好處:

  • 每個服務可以獨立開發,易於開發,提高開發人員的生產效率
  • 局部修改容易部署
  • 技術棧不受限

  • 單個服務支持獨立部署和發佈,可以進行快速迭代部署,更快的交付時間
  • 更有利於業務的擴展,可伸縮性強

轉自 ,希望對您有所幫助。


軟件測試開發技術棧


單體架構就是一個應用所有代碼在一起,部署一臺會幾臺相同的代碼。


分享到:


相關文章: