聊聊微服務(wù)(一)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
最近看到一些小伙伴在聊微服務(wù)相關(guān)的話題,每個(gè)人對(duì)于微服務(wù)都有自己的理解。甚至很多小伙伴覺(jué)得微服務(wù)就是架構(gòu)界的“白富美”,人人都很向往擁有它,其實(shí)不盡然。任何事物脫離場(chǎng)景的表述都是蒼白的。那么微服務(wù)到底是什么呢?我們?cè)谑裁磿r(shí)候需要它呢?在此我想拿出兩年前在團(tuán)隊(duì)內(nèi)部做過(guò)的一次分享,跟大家一起聊聊微服務(wù)。
說(shuō)起微服務(wù),我們不得不從它是如何誕生的說(shuō)起,當(dāng)我們理解了它誕生的原因后,自然就會(huì)知道微服務(wù)是為何而生,生而為何。話不多說(shuō),我們這就開(kāi)始吧!
以互聯(lián)網(wǎng)應(yīng)用為例,絕大部分的應(yīng)用都是從單體應(yīng)用架構(gòu)開(kāi)始,隨著業(yè)務(wù)的拓展及業(yè)務(wù)量的提升,逐步向分布式應(yīng)用架構(gòu)發(fā)展。而在早期的分布式應(yīng)用架構(gòu)中,以SOA架構(gòu)為主,隨著技術(shù)、理念的發(fā)展及更新,逐漸衍生出了微服務(wù)架構(gòu)。
應(yīng)用架構(gòu)的發(fā)展日新月異,從來(lái)沒(méi)有停止過(guò)它的腳步。微服務(wù)架構(gòu)同SOA架構(gòu)一樣,同為階段性的產(chǎn)物(近些年,Serverless架構(gòu) 也逐漸進(jìn)入大家的視野,開(kāi)啟了應(yīng)用架構(gòu)向“無(wú)服務(wù)器架構(gòu)”模式的轉(zhuǎn)變,使開(kāi)發(fā)人員能夠更加聚焦在業(yè)務(wù)本身的開(kāi)發(fā)。)。世界上唯一不變的就是變化本身 。
單體應(yīng)用架構(gòu)大都是以分層架構(gòu)(layered-base)為基礎(chǔ)構(gòu)建的。所謂的單體應(yīng)用架構(gòu),就是將應(yīng)用所有功能打包成一個(gè)獨(dú)立的單元向外提供服務(wù)。單體應(yīng)用架構(gòu)有其自身的優(yōu)越性,非常適合初創(chuàng)型團(tuán)隊(duì)進(jìn)行快速業(yè)務(wù)試錯(cuò)。
單體應(yīng)用架構(gòu)的優(yōu)點(diǎn):
-
技術(shù)棧單一
-
開(kāi)發(fā)人員規(guī)模小
-
系統(tǒng)架構(gòu)簡(jiǎn)單
-
運(yùn)維管理、部署,人員招聘及人員管理都相對(duì)容易實(shí)現(xiàn)。
隨著業(yè)務(wù)的不斷拓展及業(yè)務(wù)量的提升,單體應(yīng)用架構(gòu)的問(wèn)題也逐漸顯現(xiàn)出來(lái)。
單體應(yīng)用架構(gòu)的缺點(diǎn):
-
程序耦合嚴(yán)重,代碼擴(kuò)展性差,業(yè)務(wù)邏輯復(fù)雜使得需求響應(yīng)變慢。
-
業(yè)務(wù)容量存在瓶頸。各種業(yè)務(wù)代碼及數(shù)據(jù)層的耦合使得服務(wù)擴(kuò)展變得復(fù)雜。
-
系統(tǒng)可用性差。由于代碼臃腫,邏輯復(fù)雜,使測(cè)試難度增加,程序bug會(huì)給整個(gè)平臺(tái)帶來(lái)災(zāi)難性的后果。
為了解決上述的問(wèn)題,分布式架構(gòu)應(yīng)運(yùn)而生。
3.分布式應(yīng)用架構(gòu)
分布式應(yīng)用架構(gòu)為提升應(yīng)用的擴(kuò)展性、容量及可用性等問(wèn)題提供了解決方案。所謂的分布式應(yīng)用架構(gòu)就是將應(yīng)用系統(tǒng)拆分為多個(gè)獨(dú)立的子系統(tǒng),并由各個(gè)子系統(tǒng)協(xié)同處理,共同向外提供服務(wù)。對(duì)于分布式應(yīng)用架構(gòu)我們按時(shí)間將其分為了兩個(gè)階段,before 2010、after 2010。
? SOA before 2010
SOA(Service-Oriented Architecture)又叫面向服務(wù)的架構(gòu)。它是一個(gè)組件模型,它將應(yīng)用程序按不同功能單元(稱(chēng)為服務(wù))進(jìn)行拆分,并通過(guò)定義良好的接口和協(xié)議將服務(wù)聯(lián)系起來(lái)。接口是采用中立的方式進(jìn)行定義的,它應(yīng)該獨(dú)立于實(shí)現(xiàn)服務(wù)的硬件平臺(tái)、操作系統(tǒng)和編程語(yǔ)言。這使得構(gòu)建在各類(lèi)系統(tǒng)中的服務(wù)可以以一種統(tǒng)一和通用的方式進(jìn)行交互。
關(guān)于SOA架構(gòu)我們可以追溯到2000年前后。那時(shí)的互聯(lián)網(wǎng)企業(yè)都在高速擴(kuò)張,很多大型的企業(yè)都面臨著業(yè)務(wù)不斷拓展帶來(lái)的應(yīng)用復(fù)雜性及容量不足等問(wèn)題的挑戰(zhàn),正是在這種環(huán)境下,SOA架構(gòu)出現(xiàn)了。
SOA通過(guò)對(duì)業(yè)務(wù)垂直切分,將平臺(tái)的業(yè)務(wù)拆分成若干個(gè)子服務(wù)。通過(guò)這樣的拆分,可以有效的解決單體應(yīng)用架構(gòu)所面臨的問(wèn)題。
SOA的優(yōu)點(diǎn):
-
業(yè)務(wù)及代碼邏輯的復(fù)雜度降低,提升需求響應(yīng)能力
-
可用性提高。各子系統(tǒng)獨(dú)立的開(kāi)發(fā)及部署,使測(cè)試復(fù)雜度降低,bug的影響范圍不會(huì)擴(kuò)散至整個(gè)應(yīng)用平臺(tái)。
-
業(yè)務(wù)容量大。針對(duì)各個(gè)子系統(tǒng)的業(yè)務(wù)特點(diǎn)進(jìn)行有針對(duì)性的優(yōu)化及擴(kuò)容,使優(yōu)化及擴(kuò)容更加簡(jiǎn)便及輕量。
隨著時(shí)間推移,被拆分的服務(wù)越來(lái)越多,隨之帶來(lái)問(wèn)題的復(fù)雜度也呈指數(shù)上升。SOA架構(gòu)的缺點(diǎn)逐步暴露出來(lái)。
SOA的缺點(diǎn)
-
系統(tǒng)架構(gòu)復(fù)雜。
-
系統(tǒng)出錯(cuò)概率增大。
-
部署運(yùn)維復(fù)雜度陡增。
-
研發(fā)人員規(guī)模、質(zhì)量上升
-
學(xué)習(xí)曲線變大
-
團(tuán)隊(duì)協(xié)作、管理難度增加,重復(fù)功能的開(kāi)發(fā)也會(huì)在團(tuán)隊(duì)內(nèi)部造成不菲浪費(fèi)
從量變到質(zhì)變,SOA的這些問(wèn)題給團(tuán)隊(duì)帶來(lái)了新的挑戰(zhàn)。隨著技術(shù)、理念的發(fā)展,逐漸孕育出了微服務(wù)架構(gòu)。
? Microservices 2010 later
微服務(wù)本質(zhì)上是SOA架構(gòu)的升級(jí)版,使用了一些新的理念及技術(shù)實(shí)現(xiàn),以解決SOA架構(gòu)暴露出的問(wèn)題。
2010年后,隨著領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)、持續(xù)集成持續(xù)部署(CI/CD)、虛擬化技術(shù)、云計(jì)算、基礎(chǔ)設(shè)施自動(dòng)化以及多年來(lái)分布式架構(gòu)實(shí)踐過(guò)程中產(chǎn)生出的一些解決方案(服務(wù)注冊(cè)發(fā)現(xiàn)、分布式配置、服務(wù)監(jiān)控、服務(wù)跟蹤...),使得分布式架構(gòu)得到了長(zhǎng)足的發(fā)展。問(wèn)題、難點(diǎn)一個(gè)個(gè)被攻克,微服務(wù)架構(gòu)正式在此基礎(chǔ)上誕生了。
微服務(wù)的優(yōu)點(diǎn):
-
進(jìn)一步降低了系統(tǒng)的復(fù)雜度。由于自動(dòng)化技術(shù)的完善及領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)理念的普及,系統(tǒng)得到更進(jìn)一步的拆分及更細(xì)的顆粒度。
-
組件化。更細(xì)的服務(wù)粒度,使服務(wù)擁有更高的可復(fù)用性,服務(wù)逐步組件化。
-
自動(dòng)化、高可用。高度的自動(dòng)化測(cè)試、集成、部署及監(jiān)控,使系統(tǒng)運(yùn)維逐漸由人工操作向AI智能化轉(zhuǎn)型,使系統(tǒng)的彈性更優(yōu),可用性更高,故障率更低。
-
混合技術(shù)棧。團(tuán)隊(duì)中可以使用多種技術(shù)棧進(jìn)行開(kāi)發(fā)工作,針對(duì)不同業(yè)務(wù)的特點(diǎn),采用更加有針對(duì)性的開(kāi)發(fā)語(yǔ)言開(kāi)發(fā)部署。
-
系統(tǒng)彈性可伸縮。由于采用了虛擬化、特別是容器化的部署,自動(dòng)化技術(shù)的加入,系統(tǒng)具有高度的可伸縮性,使平臺(tái)資源利用率更高。
微服務(wù)的缺點(diǎn):
-
服務(wù)拆分的復(fù)雜性高。服務(wù)限界上下文[5]的錯(cuò)誤,會(huì)導(dǎo)致不得不頻繁的更改服務(wù)間的協(xié)作。
-
決策難度高。更細(xì)粒度的服務(wù),意味著更高的靈活性及更多的組合,因此在設(shè)計(jì)開(kāi)發(fā)中會(huì)遇到更多的決策,決策的失誤會(huì)造成不必要的成本浪費(fèi)。
-
學(xué)習(xí)成本進(jìn)一步提高。
4.總結(jié)
通過(guò)對(duì)應(yīng)用架構(gòu)發(fā)展脈絡(luò)的梳理,我想你對(duì)微服務(wù)是什么應(yīng)該有所了解了。微服務(wù)其實(shí)正是在SOA的基礎(chǔ)上,結(jié)合了最新的理念、成熟的解決方案逐步發(fā)展而來(lái)的一個(gè)大型應(yīng)用平臺(tái)解決方案。
-
單體應(yīng)用架構(gòu)解決的是應(yīng)用從0到1的問(wèn)題。
-
SOA聚焦解決的是提升平臺(tái)容量,可用性,可維護(hù)性的問(wèn)題。
-
微服務(wù)聚焦解決的是服務(wù)編排與治理的問(wèn)題。
-
serverless架構(gòu)要解決的是讓研發(fā)人員的工作能夠聚焦在業(yè)務(wù)的開(kāi)發(fā)。
透過(guò)問(wèn)題看本質(zhì),明白了他們核心解決的問(wèn)題,我想你也應(yīng)該知道該如何取舍和選擇了吧!所有技術(shù)架構(gòu)核心是保障一個(gè)應(yīng)用平臺(tái)能夠更穩(wěn)定、高效的運(yùn)轉(zhuǎn),從而達(dá)成應(yīng)用平臺(tái)最大化價(jià)值的目標(biāo)。為了實(shí)現(xiàn)目標(biāo),應(yīng)用架構(gòu)也只是其中的一個(gè)維度,商業(yè)的目標(biāo)、市場(chǎng)的定位、運(yùn)營(yíng)的策略、組織架構(gòu)...,所有這些問(wèn)題及環(huán)節(jié)都需要統(tǒng)籌規(guī)劃,協(xié)同發(fā)展才可以實(shí)現(xiàn)最終的目標(biāo)。
尾注
[1]. https://martinfowler.com/articles/serverless.html
[2]. 《誰(shuí)動(dòng)了我的奶酪?》是美國(guó)作家斯賓塞·約翰遜
[3]. 《分布式系統(tǒng)原理與范型》
[4]. https://dzone.com/articles/microservices-vs-soa-whats-the-difference
[5]. 《領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)》
特別推薦一個(gè)分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒(méi)關(guān)注的小伙伴,可以長(zhǎng)按關(guān)注一下:
![]()
![]()
長(zhǎng)按訂閱更多精彩▼
![]()
如有收獲,點(diǎn)個(gè)在看,誠(chéng)摯感謝
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!