云計算的出現(xiàn)和軟件應用采用云架構(gòu)改變了游戲規(guī)則。它引入了所謂的微服務,并允許將開發(fā)過程簡化到一個更專注和更高效的狀態(tài)。
與此同時,“微服務”是大多數(shù)IT行業(yè)的科技博客中使用最頻繁的術語。莫名其妙地使用這個詞會造成許多混亂。
這篇文章的目標是澄清一些事情。特別是:
什么是微服務架構(gòu)?
什么樣的多重服務使用它?
馬的優(yōu)點和缺點是什么?
微服務架構(gòu)的要求。
什么是微服務?
微服務架構(gòu)是一種系統(tǒng)基礎設施,它將應用程序呈現(xiàn)為針對特定操作而設計的服務框架。
微服務的概念源于單一責任原則。事情是這樣的:
“把那些因同一原因而變化的東西聚集在一起,把那些因不同原因而變化的東西分開”
本質(zhì)上,微服務架構(gòu)將做好一件事的服務整合到一個松散的框架中。
該應用程序就像一個樂高積木套件,是模塊的集合。
每個現(xiàn)存的服務是為商業(yè)目標盡自己的一份力量。
這些部分有助于整體,它們共同形成一種服務。
這些服務通過API(又名應用程序接口)聯(lián)系在一起,API提供系統(tǒng)組件之間的交互。這種方法使服務相互之間相對獨立,從而大大簡化了開發(fā)和維護。
如果您對系統(tǒng)的關鍵需求是敏捷性和可伸縮性,那么微服務架構(gòu)是更好的選擇。
如何定義微服務?
應用程序分解是確定微服務結(jié)構(gòu)的一項重要工作。完成這項任務有三種常用的方法:
根據(jù)業(yè)務能力的分解(也就是產(chǎn)生價值的業(yè)務操作的動作)。例如用于資源管理和分配的ERP等。)在這種情況下,每個微服務處理業(yè)務操作的特定元素。
按用例分解——即微服務處理特定的動作。例如,亞馬遜使用專門的微服務來處理運輸訂單。
按資源分解——在這種情況下,微服務涵蓋了特定領域的所有操作。比如Spotify使用微服務進行用戶賬號管理。這種方法使他們能夠更深入地實施個性化功能,并保護用戶數(shù)據(jù)免受破壞。
如何維護數(shù)據(jù)的一致性?
另一個重大挑戰(zhàn)是維護眾多微服務的數(shù)據(jù)一致性。
原因如下:
在微服務架構(gòu)配置中,每個服務都使用自己的數(shù)據(jù)庫。然后,數(shù)據(jù)庫在操作過程中同步。
該系統(tǒng)需要一種更靈活的方法來跟蹤數(shù)據(jù)轉(zhuǎn)換,以保持數(shù)據(jù)始終一致。
一個可行的解決方案可以是傳奇模式。它是這樣工作的:
每次服務轉(zhuǎn)換數(shù)據(jù)時,都會發(fā)布一個事件。
框架中的其他服務會注意到并更新它們的數(shù)據(jù)庫。
5個例子實際應用中的微服務架構(gòu)
沃爾瑪
在客戶活動的季節(jié)性高峰期間出現(xiàn)一系列系統(tǒng)問題后,沃爾瑪于2012年轉(zhuǎn)向微服務架構(gòu)。
系統(tǒng)無法處理工作量。這一問題導致收入減少。
在此之后,沃爾瑪對其系統(tǒng)進行了徹底的檢查,并將核心業(yè)務任務重新平臺化到微服務上。這種方法允許重新分配工作量,同時簡化系統(tǒng)的工作流程。反過來,這使得框架能夠進一步完善。
過渡到微服務的結(jié)果令人震驚:
由于架構(gòu)的轉(zhuǎn)變,硬件成本下降了20-50%。
此外,該系統(tǒng)使用的計算能力比以前減少了40%。
該系統(tǒng)避免了客戶活動的季節(jié)性高峰期間(的停機時間;
微服務架構(gòu)支持充分利用移動應用,增加了另一個訂單流,從而提高了總轉(zhuǎn)化量。
貝寶
微服務架構(gòu)非常適合支付處理。工作流是結(jié)構(gòu)化的,你不需要向后彎腰去連接工作流的各個部分。
作為支付處理商,Paypal的經(jīng)營范圍和客戶需求是巨大的。該服務需要可伸縮,以正確處理負載。除了一致的服務,公司還需要提供體面的客戶體驗。考慮到操作范圍,這是一個挑戰(zhàn)。
Paypal使用Node.js環(huán)境來運行虛擬機,這些虛擬機可以分配工作負載并提供一致的服務。因此,該系統(tǒng)一天可以毫不費力地處理超過10億次點擊。
亞馬遜
亞馬遜有最有趣的微服務用例,因為它的范圍很廣。
讓我們來看看電子商務亞馬遜應用程序。
該服務包括多項工作量要求很高的業(yè)務。個性化、通知、搜索功能、價格優(yōu)化、廣告和其他功能都在發(fā)揮作用。他們都通過API來管理進程。
微服務方法允許由專門的團隊通過自己的工作流程來處理每個功能。正因為如此,每個特性的決策過程都得到了簡化,交付的速度也顯著加快。
試想一下,該公司一年可以進行超過5000萬次部署,而客戶不會受到影響。
使用微服務架構(gòu)的優(yōu)勢和挑戰(zhàn)
利益
微服務的一個顯著特征是它們很小。微服務只做一件事,所以需要處理的代碼量相對較少,這對開發(fā)人員來說是一個福音,因為理解一個小應用程序比進入一個龐大的系統(tǒng)花費的時間要少得多。
因此,集成開發(fā)環(huán)境中的工作流速度更快,效率更高。除此之外,更小的范圍有助于避免大量的人為錯誤和后續(xù)的bug搜索。
由于其孤立的本質(zhì),微服務架構(gòu)允許我們將項目團隊分解成多個獨立的單元。每個單元開發(fā)、測試、部署和擴展應用程序的一部分。正因為如此,項目的整體進度要快得多。
除此之外,微服務的隔離特性使得修復任何新出現(xiàn)的問題變得更加容易。例如,您遇到了內(nèi)存泄漏。在整體架構(gòu)的情況下,這種情況可能會導致整個系統(tǒng)崩潰。另一方面,使用微服務架構(gòu),問題被隔離到特定的服務,不會影響其他服務。
微服務架構(gòu)的另一個重要特征是相對不依賴于總體技術堆棧。每個微服務都使用自己的技術棧,它不影響系統(tǒng)的其他部分。一方面,這為實驗和創(chuàng)新提供了足夠的空間。另一方面,它允許團隊完成工作所需的任何東西。
從業(yè)務角度來看,應用微服務架構(gòu)的主要好處是支持持續(xù)交付。由于應用程序被分解成專門的組件——在不破壞應用程序整體工作流程的情況下,處理特定的活動部分要容易得多。換句話說,一個應用程序一直在運行,并且不斷發(fā)展。
因此,維護應用程序要容易得多。與處理一個每個元素都相互依賴的龐大系統(tǒng)不同,即使是最小的變化也會產(chǎn)生一些問題——您管理的是一群小型的獨立服務。
因為系統(tǒng)更容易維護,也更容易測試。微服務應用程序需要更少的資源,并在更短的時間內(nèi)完成測試序列,這有助于提高開發(fā)周期的整體速度。
因此,系統(tǒng)的部署變得更加簡單,也不那么令人擔憂。這些服務是彼此獨立部署的,因此,任何新出現(xiàn)的問題都可以得到解決,而不會影響整個系統(tǒng)。
挑戰(zhàn)
盡管微服務架構(gòu)可以提供所有的優(yōu)勢,但它也帶來了一些重大挑戰(zhàn)。
讓我們仔細看看它們:
雖然微服務本身很小并且是獨立的,但是它們之間的連接創(chuàng)建了一個復雜的分布式系統(tǒng),這需要進行大量的優(yōu)化工作。
因此,整體部署變得越來越復雜。系統(tǒng)中運動部件的數(shù)量增加了操作的復雜性。這個特性使得部署更加困難,因為開發(fā)人員需要管理大量的自包含服務及其協(xié)作。
開發(fā)人員需要實現(xiàn)服務之間的通信機制,并在來自不同服務的開發(fā)人員的參與下處理部分故障。
系統(tǒng)的復雜結(jié)構(gòu)使得測試過程更加困難和耗時。在測試服務之間的不同交互時尤其如此。
多服務請求的實現(xiàn)需要開發(fā)團隊的精確協(xié)調(diào)和透明溝通。換句話說,每個人都需要始終保持一致。
結(jié)論
微服務架構(gòu)正迅速成為各行各業(yè)構(gòu)建應用程序的首選方式。
這是一種更靈活、更廉價的開發(fā)應用程序的方法,它可以隨著業(yè)務需求的增長而發(fā)展,同時提供一致的客戶服務。