歡迎光臨
每天分享高質量文章

漫畫:什麼是微服務?

來自:程式員小灰(微訊號:chengxuyuanxiaohui)

單體架構的痛點

缺點一:專案過於臃腫


當大大小小的功能模組都集中在同一專案的時候,整個專案必然會變得臃腫,讓開發者難以維護。

缺點二:資源無法隔離


就像剛剛小灰的經歷一樣,整個單體系統的各個功能模組都依賴於同樣的資料庫、記憶體等資源,一旦某個功能模組對資源使用不當,整個系統都會被拖垮。


缺點三:無法靈活擴充套件


當系統的訪問量越來越大的時候,單體系統固然可以進行水平擴充套件,部署在多臺機器上組成叢集:


但是這種擴充套件並非靈活的擴充套件。比如我們現在的效能瓶頸是支付模組,希望只針對支付模組做水平擴充套件,這一點在單體系統是做不到的。


什麼是微服務?


微服務(Microservice Architecture)是近幾年流行的一種架構思想,關於它的概念很難一言以蔽之。


究竟什麼是微服務呢?我們在此取用 ThoughtWorks 公司的首席科學家 Martin Fowler 的一段話:



In short, the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies.

谷歌翻譯如下:

簡而言之,微服務架構風格是一種將單個應用程式作為一套小型服務開發的方法,每種應用程式都在自己的行程中執行,並與輕量級機制(通常是HTTP資源API)進行通訊。 這些服務是圍繞業務功能構建的,可以透過全自動部署機制獨立部署。 這些服務的集中管理最少,可以用不同的程式語言編寫,並使用不同的資料儲存技術。

說了這麼多概念,微服務有什麼樣的具體特點呢?


1.獨立部署,靈活擴充套件


傳統的單體架構是以整個系統為單位進行部署,而微服務則是以每一個獨立元件(例如使用者服務,商品服務)為單位進行部署。


用一張經典的圖來表現,就是下麵這個樣子:


圖中左邊是單體架構的叢集,右邊是微服務叢集。


什麼意思呢?比如根據每個服務的吞吐量不同,支付服務需要部署20臺機器,使用者服務需要部署30臺機器,而商品服務只需要部署10臺機器。這種靈活部署只有微服務架構才能實現。


而近幾年流行的Docker,為微服務架構提供了有效的容器。

2.資源的有效隔離


微服務設計的原則之一,就是每一個微服務擁有獨立的資料源,假如微服務A想要讀寫微服務B的資料庫,只能呼叫微服務B對外暴露的介面來完成。這樣有效避免了服務之間爭用資料庫和快取資源所帶來的問題。



同時,由於每一個微服務實體在Docker容器上執行,實現了伺服器資源(記憶體、CPU資源等)的有效隔離。



3.團隊組織架構的調整

微服務設計的思想也改變了原有的企業研發團隊組織架構。傳統的研發組織架構是水平架構,前端有前端的團隊,後端有後端的團隊,DBA有DBA的團隊,測試有測試的團隊。


而微服務的設計思想對團隊的劃分有著一定的影響,使得團隊組織架構的劃分更傾向於垂直架構,比如使用者業務是一個團隊來負責,支付業務是一個團隊來負責。

當然,這種垂直劃分只是一個理想的架構,實際在企業中並不會把團隊組織架構拆分得這麼絕對

微服務與面向服務架構SOA的區別




SOA是什麼樣子呢?可以是下麵這樣的Web Service:


也可以是下麵這樣的ESB企業服務匯流排:



總之,SOA架構強調的是異構系統之間的通訊和解耦合,而微服務架構強調的是系統按業務邊界做細粒度的拆分和部署。


微服務架構的不足


—————END—————



●本文編號274,以後想閱讀這篇文章直接輸入274即可

●輸入m獲取到文章目錄

推薦↓↓↓

 

Web開發

更多推薦18個技術類公眾微信

涵蓋:程式人生、演演算法與資料結構、駭客技術與網路安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。

贊(0)

分享創造快樂

© 2022 知識星球   網站地圖