官术网_书友最值得收藏!

1.1 何為微服務(wù)

在過去,開發(fā)人員構(gòu)建和部署的是單體應(yīng)用(monolithic application)。這是比較專業(yè)的說法,在單體應(yīng)用中每個(gè)功能都被捆綁在一起作為單個(gè)大的包,如圖1-1所示。Web前端、認(rèn)證、日志生成、數(shù)據(jù)存儲(chǔ)、報(bào)告系統(tǒng)等被緊密地耦合在一起,捆綁成一個(gè)應(yīng)用。這意味著,如果想改變某個(gè)部分,必須改變每一部分

圖1-1

舉個(gè)簡(jiǎn)單的例子,如果需要修補(bǔ)或更新圖1-1中的應(yīng)用的報(bào)告功能,必須關(guān)閉整個(gè)應(yīng)用并修補(bǔ)/更新整個(gè)應(yīng)用。像這樣的工作需要詳盡的計(jì)劃,面臨巨大的風(fēng)險(xiǎn)且十分復(fù)雜,通常還不得不在漫長(zhǎng)無聊的周末和大家一起加班完成。

但是,單體應(yīng)用帶來的痛苦還不止于此。如果想對(duì)它們的某個(gè)功能進(jìn)行擴(kuò)縮容,不得不對(duì)整個(gè)單體應(yīng)用擴(kuò)縮容。

基本上,應(yīng)用的每個(gè)功能都被作為一個(gè)單體的單元捆綁、部署、升級(jí)和擴(kuò)縮容,這是很笨拙的,顯然不是很理想。

另外,微服務(wù)應(yīng)用采用完全相同的一組功能——Web前端、認(rèn)證、日志生成、數(shù)據(jù)存儲(chǔ)、報(bào)告系統(tǒng)等,并將每個(gè)功能拆分為自己的小應(yīng)用。“小”的另一個(gè)詞是“微”,“應(yīng)用”的另一個(gè)詞是“服務(wù)”。這就是“微服務(wù)”這個(gè)術(shù)語的由來。

如果仔細(xì)觀察圖1-2你會(huì)發(fā)現(xiàn),它就是和圖1-1完全相同的一組應(yīng)用功能。不同的是,每個(gè)功能都是獨(dú)立開發(fā)、獨(dú)立部署的,并且可以獨(dú)立更新和擴(kuò)縮容。但它們依然協(xié)同工作,創(chuàng)造與單體應(yīng)用完全相同的應(yīng)用體驗(yàn)

圖1-2

最常見的模式是每個(gè)微服務(wù)都作為獨(dú)立的容器來開發(fā)和部署。例如,Web前端微服務(wù)會(huì)是一個(gè)容器,認(rèn)證微服務(wù)會(huì)是另一個(gè)不同的容器,報(bào)告系統(tǒng)微服務(wù)又會(huì)再是不同的容器,以此類推。每個(gè)微服務(wù)都是獨(dú)立的,但又是通過網(wǎng)絡(luò)松散耦合的,以創(chuàng)建相同的應(yīng)用體驗(yàn)。

通過設(shè)計(jì)讓微服務(wù)之間是松散耦合的,這是修改一個(gè)微服務(wù)而不影響其他微服務(wù)的基礎(chǔ)。從技術(shù)上講,每個(gè)微服務(wù)都通過IP網(wǎng)絡(luò)暴露一個(gè)API,讓其他微服務(wù)能夠通過這個(gè)API來使用它。

如果不熟悉 API 這個(gè)概念,下面這個(gè)類比對(duì)你可能會(huì)有所幫助。

汽車的外形和大小各異,它們配置的可能是直列四缸、水平對(duì)臥六缸、八缸的發(fā)動(dòng)機(jī),甚至可能是電動(dòng)發(fā)動(dòng)機(jī)。但是,所有這些復(fù)雜的細(xì)節(jié)都通過使用標(biāo)準(zhǔn)化控制器——方向盤、加速器、剎車踏板和車速表對(duì)駕駛員隱藏了。在這個(gè)模型中,控制器相當(dāng)于汽車的API——駕駛員通過它們來使用汽車的功能。這種模型的一個(gè)主要優(yōu)點(diǎn)是,學(xué)會(huì)駕駛后就能駕駛?cè)魏我豢钇嚒@纾覍W(xué)開車時(shí)用的是一輛前輪驅(qū)動(dòng)的汽車,它配置的是四缸汽油發(fā)動(dòng)機(jī),但我無須學(xué)習(xí)任何新的駕駛技能就能開全輪驅(qū)動(dòng)的電動(dòng)汽車,這就是因?yàn)闃?biāo)準(zhǔn)化的方向盤和腳踏板(API)將發(fā)動(dòng)機(jī)和傳動(dòng)系統(tǒng)的復(fù)雜細(xì)節(jié)隱藏起來了。同樣,更換汽車的發(fā)動(dòng)機(jī)、替換其方向盤和輪胎、升級(jí)其排氣系統(tǒng)后,駕駛員依然能夠駕駛它,而無須學(xué)習(xí)任何新的駕駛技能。

回到正題——微服務(wù)應(yīng)用。只要沒有修改微服務(wù)的API,就可以在其他微服務(wù)和應(yīng)用用戶不會(huì)注意到的情況下對(duì)微服務(wù)進(jìn)行修補(bǔ)或更新。

除了讓微服務(wù)能夠獨(dú)立地更新和擴(kuò)縮容,微服務(wù)設(shè)計(jì)模式還讓開發(fā)團(tuán)隊(duì)更小、更敏捷,能夠更快地迭代功能。這是基于Jeff Bezos提出的兩塊比薩團(tuán)隊(duì)規(guī)則(two pizza team rule)——如果你不能用兩塊比薩養(yǎng)活一個(gè)開發(fā)團(tuán)隊(duì),那么這個(gè)團(tuán)隊(duì)就太大了。一般來說,與大團(tuán)隊(duì)相比,2~8人團(tuán)隊(duì)的溝通和合作的職場(chǎng)政治因素會(huì)更少,也會(huì)更敏捷。

微服務(wù)設(shè)計(jì)模式還有其他優(yōu)點(diǎn),但希望你能明白——將功能開發(fā)成獨(dú)立的微服務(wù),可以在不影響應(yīng)用任何部件的情況下對(duì)它們進(jìn)行開發(fā)、部署、更新、擴(kuò)縮容等。

但是,微服務(wù)并不完美。如果有很多由不同團(tuán)隊(duì)管理的移動(dòng)部件,微服務(wù)可能會(huì)變得很復(fù)雜,這需要謹(jǐn)慎的管理和良好的溝通。

最后,這兩種設(shè)計(jì)應(yīng)用的方式——單體與微服務(wù)——被稱為設(shè)計(jì)模式。微服務(wù)設(shè)計(jì)模式是當(dāng)前云時(shí)代最常見的模式。

主站蜘蛛池模板: 榆社县| 赤水市| 余江县| 曲松县| 沁源县| 怀集县| 广河县| 高碑店市| 安陆市| 台山市| 瓦房店市| 中牟县| 丰镇市| 重庆市| 离岛区| 云安县| 新巴尔虎左旗| 卢湾区| 温州市| 亳州市| 林周县| 柞水县| 财经| 灌南县| 巫溪县| 宣威市| 桐城市| 卓尼县| 沂水县| 延津县| 沂水县| 微山县| 嘉鱼县| 永年县| 小金县| 岳池县| 竹溪县| 仲巴县| 陵水| 延川县| 化德县|