成熟的部署方案對(duì)于構(gòu)建可靠且穩(wěn)定的微服務(wù)是至關(guān)重要的铃岔。微服務(wù)部署和單體應(yīng)用部署是不同的汪疮。在單體應(yīng)用中,可以針對(duì)單個(gè)用例(功能場景)優(yōu)化部署方案毁习,而微服務(wù)的部署方案需要擴(kuò)展到多個(gè)服務(wù)智嚷,而這些服務(wù)可能是用不同的編程語言實(shí)現(xiàn)的,并且可能各自有自己的外部依賴纺且。
由于微服務(wù)應(yīng)用是以部署單元級(jí)別進(jìn)行演進(jìn)的盏道,因此部署新服務(wù)的成本必須小到可以忽略不計(jì),能夠讓工程師快速創(chuàng)新载碌、引進(jìn)新內(nèi)容并向用戶交付價(jià)值猜嘱。如果不能快速且可靠地將微服務(wù)部署到生產(chǎn)環(huán)境中,那么微服務(wù)方案所提高的開發(fā)速度就會(huì)被浪費(fèi)掉嫁艇。自動(dòng)化的部署方案對(duì)于大規(guī)模微服務(wù)開發(fā)而言是必不可少的朗伶。
在軟件系統(tǒng)的生命周期中,部署是風(fēng)險(xiǎn)最大的時(shí)刻步咪。和現(xiàn)實(shí)世界最貼切的類比就是換輪胎——而且這輛車還在以約160km/h的速度飛馳著论皆。沒有哪個(gè)公司能夠不受這一風(fēng)險(xiǎn)的影響:比如Google的網(wǎng)站可靠性(site reliability)團(tuán)隊(duì)認(rèn)為大概有70%的服務(wù)不可用是由于對(duì)生產(chǎn)環(huán)境的修改導(dǎo)致的。
微服務(wù)極大地增加了系統(tǒng)中活動(dòng)部件的數(shù)量猾漫,從而增大了部署的復(fù)雜性点晴。在部署微服務(wù)時(shí),開發(fā)者將面臨四大挑戰(zhàn):
1)面對(duì)大量的發(fā)布和組件變更時(shí)應(yīng)保持穩(wěn)定性静袖;
2)避免會(huì)導(dǎo)致組件在構(gòu)建階段或者發(fā)布階段產(chǎn)生依賴關(guān)系的緊耦合觉鼻;
3)服務(wù)API發(fā)布不兼容的變更可能會(huì)對(duì)客戶端產(chǎn)生非常大的負(fù)面影響;
4)服務(wù)下線队橙。
如果做得好坠陈,部署方案都是基于簡單性和可預(yù)測(cè)性而實(shí)現(xiàn)的萨惑。相同的構(gòu)建流水線生成的工件都是可預(yù)測(cè)的,開發(fā)者可以將其自動(dòng)應(yīng)用到生產(chǎn)環(huán)境中仇矾。
小版本發(fā)布降低風(fēng)險(xiǎn)和提高可預(yù)測(cè)性
發(fā)布的版本規(guī)模越大庸蔼,引入故障的風(fēng)險(xiǎn)就越高。微服務(wù)發(fā)布的版本規(guī)模都是比較小的贮匕,因?yàn)樗鼈兊拇a庫更小一些姐仅。發(fā)布小版本的頻率越高,開發(fā)者對(duì)每次變更產(chǎn)生的總體影響也就越小掏膏。不用為了部署而停止所有工作,開發(fā)者可以設(shè)計(jì)自己的服務(wù)和部署方案敦锌,并期望它們面臨持續(xù)的變更馒疹。減少可能的暴露范圍可以加快發(fā)布速度、簡化監(jiān)控工作乙墙,并且對(duì)應(yīng)用的正常運(yùn)行產(chǎn)生更小的干擾颖变。
自動(dòng)化推動(dòng)部署節(jié)奏和一致性
即便部署版本的規(guī)模更小,開發(fā)者仍需確保這些變更集盡可能沒有缺陷听想。開發(fā)者可以通過將提交驗(yàn)證的過程以及上線的過程自動(dòng)化來實(shí)現(xiàn)腥刹。這有助于開發(fā)者對(duì)所做的代碼改動(dòng)有足夠的信心并對(duì)多個(gè)服務(wù)采用同一套方案。
摘取自 摩根·布魯斯和保羅·A.佩雷拉的《微服務(wù)實(shí)戰(zhàn)》