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