微服務相關

組件化與模塊化

組件化和模塊化的中心思想都是分而治之。目的都是將一個龐大的系統拆分成多個組件或者說是模塊。

組塊化:組件化就是基於可重用的目的,將一個大的軟件系統按照分離關注點的形式,拆分成多個獨立的組件,主要目的就是減少耦合。一個獨立的組件可以是一個軟件包、web服務、web資源或者是封裝了一些函數的模塊。這樣,獨立出來的組件可以單獨維護和升級而不會影響到其他的組件。

模塊化:模塊化的目的在於將一個程序按照其功能做拆分,分成相互獨立的模塊,以便於每個模塊只包含與其功能相關的內容,模塊之間通過接口調用。將一個大的系統模塊化之後,每個模塊都可以被高度複用。

模塊化和組件化的區別

從上面的定義中可以看出,組件化和模塊化的意思差不多,主要思想都是分而治之。只是一個把拆分之後的每個片段叫做組件、另一個把拆分之後的片段叫做模塊。那麼這兩種拆分在拆分方式上是不是有什麼不同的?

關於組件化和模塊化的區別,我在網上看了好多資料,也沒有人能給出準確的回答。其實沒有準確回答的原因也比較明顯,那就是大多數時候我們真的不需要嚴格的區分這兩個名字。我們要學習的是其中的解耦和分治的思想和目的。

模塊化的目的是爲了重用,模塊化後可以方便重複使用和插撥到不同的平臺,不同的業務邏輯過程中。

組件化的目的是爲了解耦,把系統拆分成多個組件,分離組件邊界和責任,便於獨立升級和維護。

 

集中式與分佈式

集中式系統用一句話概括就是:一個主機帶多個終端。終端沒有數據處理能力,僅負責數據的錄入和輸出。而運算、存儲等全部在主機上進行。

分佈式就是一羣獨立計算機集合共同對外提供服務,但是對於系統的用戶來說,就像是一臺計算機在提供服務一樣。分佈式意味着可以採用更多的普通計算機(相對於昂貴的大型機)組成分佈式集羣對外提供服務。計算機越多,CPU、內存、存儲資源等也就越多,能夠處理的併發訪問量也就越大。

 

服務化

提到分佈式,一個不得不提的詞就是服務化,服務化架構使搭建分佈式系統成爲了可能。

服務化是一種粗粒度、鬆耦合的以服務爲中心的架構,服務之間通過定義明確的協議和接口進行通信。

 

面向服務的架構(Service-Oriented Architecture,SOA)

SOA:Service Oriented Architecture面向服務的架構。也就是把工程拆分成服務層、表現層兩個工程。服務層中包含業務邏輯,只需要對外提供服務即可。表現層只需要處理和頁面的交互,業務邏輯都是調用服務層的服務來實現。

 

 

面向對象和麪向服務的對比

面向對象(OO)和麪向服務(SO)在基礎理念上有大量共通之處,比如都儘可能追求抽象、封裝和低耦合。

但SO相對於OO,又有非常不同的典型應用場景,比如:

  • 多數OO接口(interface)都只被有限的人使用(比如團隊和部門內),而SO接口(或者叫契約)一般來說都不應該對使用者的範圍作出太多的限定和假設(可以是不同部門,不同企業,不同國家)。還記得貝佐斯原則嗎?“團隊必須做好規劃與設計,以便未來把接口開放給全世界的程序員,沒有任何例外”。
  • 多數OO接口都只在進程內被訪問,而SO接口通常都是被遠程調用。

 

微服務架構MicroService

微服務架構(MicroService)是一種服務化架構風格,通過將功能分散到各個離散的服務中以實現對解決方案的解耦。微服務架構強調的第一個重點就是業務系統需要徹底的組件化和服務化(這也是我們爲什麼要先介紹組件化和服務化的原因)。微服務的誕生並非偶然。它是互聯網高速發展,敏捷、精益、持續交付方法論的深入人心,虛擬化技術與DevOps(自動化運維)文化的快速發展以及傳統單塊架構無法適應快速變化等多重因素的推動下所誕生的產物。

總結起來大概以下四點:

  • 一些獨立的服務共同組成系統
  • 單獨部署,跑在自己的進程裏
  • 每個服務爲獨立的業務開發
  • 分佈式的管理

 

SOA和微服務

SOA關注的是服務重用,微服務在關注服務重用的同時,也同時關注快速交付;

微服務不再強調傳統SOA架構裏面比較重的ESB企業服務總線,同時SOA的思想進入到單個業務系統內部實現真正的組件化。微服務把所有的“思考”邏輯包括路由、消息解析等放在服務內部,去掉一個大一統的ESB,服務間輕通信,是比SOA更徹底的拆分。(微服務(Microservice)那點事

ESB(企業服務總線)是一種組件與組件之間進行消息傳遞的載體。它類似於計算機中的總線,通過總線將各種硬件連接到一起。那麼,因爲Web Service是跨平臺的,所以ESB可以將企業的所有IT系統連接到一起,然後進行消息交互。而組件之間可能會使用SOAP協議來通信(目前還有一種 REST也比較流行)。

按照這樣來理解的話,ESB應該是一種技術框架,而SOAP是組件Web service的一種消息通信實現方式。這個理解基本正確,但是ESB不是技術框架,是一種消息和服務集成的中間件平臺。SOAP只是一種可以接入和適配到ESB的通信協議,其它包括Rest, JMS, FTP, socket,MQ等都可以接入和適配到ESB。參考如下Jboss ESB的一個圖。


可以把微服務當做去除了ESB的SOA。也即是去中心化。每個服務完全獨立部署開發

ESB是SOA架構中的中心總線,設計圖形應該是星形的,而微服務是去中心化的分佈式軟件架構。

 

參考鏈接:

http://www.hollischuang.com/archives/1628

https://www.zhihu.com/question/37808426/answer/93335393

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章