Categories
程式開發

向5歲小朋友解釋什麼是微服務


作為一名開發者,你肯定經常聽到像“我們採用了可伸縮的微服務架構”、“我們正在計劃切換到微服務架構”之類的話,然後你尋思著:微服務到底是什麼?不用擔心,這篇文章將通過真實世界的比喻來解釋什麼是微服務架構。但請注意,這篇文章只講跟微服務架構有關的東西,沒有代碼!

大冰激凌機——單體

我們暫且把微服務擱在一邊,先來看看冰激凌機。冰激凌機由四個部件組成——冰淇淋勺、堅果粉碎器、巧克力漏斗和草莓糖漏斗。冰淇淋勺往杯子裡添加香草或芒果冰激凌,堅果粉碎器將碎堅果撒在冰激凌上,巧克力或草莓漏斗把液體糖漿倒在冰激凌上。對於顧客來說,除了冰激凌勺之外,其他都是可選的。

向5歲小朋友解釋什麼是微服務 1

大冰激凌機——單體應用程序

假設你是冰激凌店的老闆,一開始你有一台小冰激凌機,這個冰激凌機配備了所有上述的四個部件。顧客很喜歡你家的冰激凌,你的生意越來越紅火。那麼接下來你會怎麼做?你會買一台更大的冰激凌機,這樣就可以在同樣的時間內做出更多的冰激凌。按照這樣的節奏發展下去,終有一天你會沒辦法再擴大規模,因為工廠生產不出更大的冰激凌機了。

向5歲小朋友解釋什麼是微服務 2

沒有再大的冰激凌機了——達到了伸縮的極限

在軟件開發領域,這個就是所謂的單體架構。一個包含了所有組件的應用程序,代碼都存放在一個代碼基庫裡。隨著需求的增長,你租用了越來越大的機器,但到了某個時刻肯定會達到極限,因為你租不到比目前更大的機器了。

購買更多的冰激凌機

你一定會想到通過購買更多的冰激凌機來解決這個問題。沒錯!你放棄了購買更大的冰激凌機的想法,而是購買更多小型的冰激凌機。

這就是所謂的“克隆”,你使用多個應用程序實例來處理用戶請求。

因為上天的眷顧,也因為你自己的努力,顧客開始對你家的冰激凌愛不釋手了。為了滿足他們的需求,你最終不得不把所有的冰激凌機都升級到更強大的型號。

向5歲小朋友解釋什麼是微服務 3

多個單體應用實例——克隆

修理壞掉的機器

在剛開店的時候,你只聘請了一名負責維修和升級機器的師傅,這沒有問題。但在購買了多台機器之後,你覺得有必要聘請更多的師傅,因為你不希望有機器壞了影響生意。

現在,有顧客希望你家的店能夠增加不同口味的冰激凌。你決定在冰激凌勺裡增加巧克力冰激凌。但因為冰激凌機的四個部件相互依賴,維修師傅忙得團團轉。等他們好不容易加好了新口味的冰激凌,草莓糖漏斗卻壞了,因為部件之間相互依賴,動了其中一個就會影響到其他部件。

向5歲小朋友解釋什麼是微服務 4

一次更新影響到了其他部件——黃色表示巧克力冰激凌勺

每台機器各司其職——微服務

因為伸縮性受到了限制,你決定搭建新的基礎設施。你要求工廠把原先冰激凌機的每個部件獨立成單獨的機器——一個冰激凌勺機,一個堅果粉碎機,兩個漏斗機(一個可以流出巧克力,一個可以流出草莓糖)。現在,你把維修師傅分成幾組,每一組負責不同的機器。

向5歲小朋友解釋什麼是微服務 5

把大冰激凌機拆分成獨立的機器,把維修師傅分組——微服務

這就是所謂的微服務架構,大單體被拆分成多個獨立的模塊,每個模塊都是一個應用程序,負責處理不同的任務。

單體與微服務

  • 伸縮性:你可能已經註意到了,在購買了最大型的冰激凌之後,你就沒辦法再擴大規模了。但有了單獨的部件機器(微服務)之後,你可以購買更多的部件機器。
  • 可維護性:為了給冰激凌機增加新口味的冰激凌,卻不小心弄壞了草莓糖漏斗,因為一個大單體系統的不同部分通常是相互依賴的。舉個例子,一個應用程序的某個模塊需要修改數據庫結構,而這樣做可能會影響到應用程序的其他功能。不過,在微服務架構裡,不同的機器由不同的團隊負責,每個團隊管好自己管控的機器,避免了衝突。這種獨立的開發模式也加快了發版的速度,因為在一個大型的組織裡,團隊內的溝通比團隊間的溝通效率更高。
  • 成本:你可能會想,多買幾台大冰激凌機不就能解決伸縮性問題嗎?但也請試想一下,如果你只想增加冰激凌口味並保持其他部分不變,但你卻不得不為此購買整套機器。但在微服務機構中,你可以只買冰激凌勺機。這樣就節約了很多成本,因為你可以根據每個服務的請求量來增加或者減少單個服務的實例數量。
  • 就緒時間:大冰激凌機已經把所有的部件都集成好了,只要把它放在正確的地方啟動它就可以了。但是,獨立的部件機器在使用之前需要使用傳送帶把它們連接在一起。因此,微服務需要更多的時間和專業知識才能讓它運行起來。
  • 測試和部署:大冰激凌機的測試和部署相對困難,因為所有的部件相互依賴,需要每個部件都集成好了才能測試和部署。但對於部件機器來說,因為每種機器都是獨立的,所以測試和部署也相對容易。

該不該從一開始就採用微服務?

簡單地說就是——不需要!大多數專家建議,如果你不需要微服務架構,就不要用它。你完全可以一直使用大冰激凌機,直到無法維護和伸縮。到了那個時候,你可以把大單體機器拆分成單獨的微服務部件機器。

微服務並不都是“微型”的

你可能會想,到了冰激凌機都變成單獨的部件機器之後,這些部件機器應該都很小。但事實上並非如此!微服務本身也可以很大,或者單個服務可以有多個同時運行的實例來處理用戶請求。例如,你可能會有 20 台冰激凌勺機,因為大部分顧客可能只需要冰激凌,不需要澆頭。

同樣的,微服務也可以作為獨立的應用程序,它們不一定是“微型”的,而且需要大量的維護和伸縮成本。

結論

一些正在採用微服務架構的大型軟件公司最早都是從一個大單體開始的。他們在達到了伸縮性和可維護性極限之後才將單體拆分成單獨的組件或服務。

毫無疑問,在採用微服務架構時,你可以使用不同的技術來開發不同的服務,具備了更好的伸縮性和可維護性,但這是以復雜性為代價的。因此,剛開始可以採用設計良好的單體,而不是一上來就直接奔著微服務去,避免讓自己置身於微服務的複雜性泥潭之中。

原文鏈接

Beginner’s Guide to Microservices: Explaining it to a 5 Year Old