0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

微服務(wù)的4種部署策略,你都清楚嗎?

jf_ro2CN3Fa ? 來(lái)源:cnblogs.com ? 2023-07-09 15:58 ? 次閱讀

藍(lán)綠發(fā)布

藍(lán)綠發(fā)布特點(diǎn)

藍(lán)綠發(fā)布注意事項(xiàng)

滾動(dòng)發(fā)布

滾動(dòng)發(fā)布特點(diǎn)

滾定發(fā)布注意事項(xiàng)

灰度發(fā)布

A/B測(cè)試

在項(xiàng)目迭代的過(guò)程中,不可避免需要”上線(xiàn)“。上線(xiàn)對(duì)應(yīng)著部署,或者重新部署;部署對(duì)應(yīng)著修改;修改則意味著風(fēng)險(xiǎn)。目前有很多部署發(fā)布的技術(shù), 這兒將常見(jiàn)的做一個(gè)總結(jié)。

上面所說(shuō)難免有些抽象, 舉一個(gè)情景例子, 加入你是微博項(xiàng)目負(fù)責(zé)人員, 現(xiàn)在新版本較原來(lái)的老版本有很大的改變, 這設(shè)計(jì)到服務(wù)架構(gòu)、前端UI等等, 經(jīng)過(guò)測(cè)試功能沒(méi)有障礙, 那么這時(shí)候如何讓用戶(hù)切換到新的版本呢?

顯而易見(jiàn), 第一次發(fā)布的應(yīng)用是沒(méi)有所謂的這個(gè)問(wèn)題的, 這種如何發(fā)布的思考只會(huì)出現(xiàn)在后面的版本迭代中。

藍(lán)綠發(fā)布

藍(lán)綠部署中,一共有兩套系統(tǒng):一套是正在提供服務(wù)系統(tǒng)(也就是上面說(shuō)的舊版),標(biāo)記為“綠色”;另一套是準(zhǔn)備發(fā)布的系統(tǒng),標(biāo)記為“藍(lán)色”。兩套系統(tǒng)都是功能完善的,并且正在運(yùn)行的系統(tǒng),只是系統(tǒng)版本和對(duì)外服務(wù)情況不同。正在對(duì)外提供服務(wù)的老系統(tǒng)是綠色系統(tǒng),新部署的系統(tǒng)是藍(lán)色系統(tǒng)。

a1006eb4-1e05-11ee-962d-dac502259ad0.png

藍(lán)色系統(tǒng)不對(duì)外提供服務(wù),用來(lái)做啥?

用來(lái)做發(fā)布前測(cè)試,測(cè)試過(guò)程中發(fā)現(xiàn)任何問(wèn)題,可以直接在藍(lán)色系統(tǒng)上修改,不干擾用戶(hù)正在使用的系統(tǒng)。

藍(lán)色系統(tǒng)經(jīng)過(guò)反復(fù)的測(cè)試、修改、驗(yàn)證,確定達(dá)到上線(xiàn)標(biāo)準(zhǔn)之后,直接將用戶(hù)切換到藍(lán)色系統(tǒng), 切換后的一段時(shí)間內(nèi),依舊是藍(lán)綠兩套系統(tǒng)并存,但是用戶(hù)訪(fǎng)問(wèn)的已經(jīng)是藍(lán)色系統(tǒng)。這段時(shí)間內(nèi)觀察藍(lán)色系統(tǒng)(新系統(tǒng))工作狀態(tài),如果出現(xiàn)問(wèn)題,直接切換回綠色系統(tǒng)。

當(dāng)確信對(duì)外提供服務(wù)的藍(lán)色系統(tǒng)工作正常,不對(duì)外提供服務(wù)的綠色系統(tǒng)已經(jīng)不再需要的時(shí)候,藍(lán)色系統(tǒng)正式成為對(duì)外提供服務(wù)系統(tǒng),成為新的綠色系統(tǒng)。原先的綠色系統(tǒng)可以銷(xiāo)毀,將資源釋放出來(lái),用于部署下一個(gè)藍(lán)色系統(tǒng)。

藍(lán)綠發(fā)布特點(diǎn)

藍(lán)綠部署的目的是減少發(fā)布時(shí)的中斷時(shí)間、能夠快速撤回發(fā)布。

兩套系統(tǒng)沒(méi)有耦合的時(shí)候才能百分百保證不干擾

藍(lán)綠發(fā)布注意事項(xiàng)

藍(lán)綠部署只是上線(xiàn)策略中的一種,它不是可以應(yīng)對(duì)所有情況的萬(wàn)能方案。藍(lán)綠部署能夠簡(jiǎn)單快捷實(shí)施的前提假設(shè)是目標(biāo)系統(tǒng)是非常內(nèi)聚的,如果目標(biāo)系統(tǒng)相當(dāng)復(fù)雜,那么如何切換、兩套系統(tǒng)的數(shù)據(jù)是否需要以及如何同步等,都需要仔細(xì)考慮。

當(dāng)你切換到藍(lán)色環(huán)境時(shí),需要妥當(dāng)處理未完成的業(yè)務(wù)和新的業(yè)務(wù)。如果你的數(shù)據(jù)庫(kù)后端無(wú)法處理,會(huì)是一個(gè)比較麻煩的問(wèn)題;

可能會(huì)出現(xiàn)需要同時(shí)處理“微服務(wù)架構(gòu)應(yīng)用”和“傳統(tǒng)架構(gòu)應(yīng)用”的情況,如果在藍(lán)綠部署中協(xié)調(diào)不好這兩者,還是有可能會(huì)導(dǎo)致服務(wù)停止。

需要提前考慮數(shù)據(jù)庫(kù)與應(yīng)用部署同步遷移 /回滾的問(wèn)題。

藍(lán)綠部署需要有基礎(chǔ)設(shè)施支持。

在非隔離基礎(chǔ)架構(gòu)( VM 、 Docker 等)上執(zhí)行藍(lán)綠部署,藍(lán)色環(huán)境和綠色環(huán)境有被摧毀的風(fēng)險(xiǎn)。

基于 Spring Boot + MyBatis Plus + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶(hù)小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶(hù)、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

項(xiàng)目地址:https://github.com/YunaiV/ruoyi-vue-pro

視頻教程:https://doc.iocoder.cn/video/

滾動(dòng)發(fā)布

一般是取出一個(gè)或者多個(gè)服務(wù)器停止服務(wù),執(zhí)行更新,并重新將其投入使用。周而復(fù)始,直到集群中所有的實(shí)例都更新成新版本。

a1150888-1e05-11ee-962d-dac502259ad0.png

發(fā)布流程:

相對(duì)于藍(lán)綠發(fā)布需要一套完備的機(jī)器不同, 滾動(dòng)發(fā)布只需要一臺(tái)機(jī)器(這兒這是為了理解, 實(shí)際可能是多臺(tái)), 我們只需要將部分功能部署在這臺(tái)機(jī)器上, 然后去替換正在運(yùn)行的機(jī)器, 如上圖, 將更新后的功能部署在Server1 上, 然后Server1去替換正在運(yùn)行的Server, 替換下來(lái)的物理機(jī)又可以繼續(xù)部署Server2的新版本, 然后去替換正在工作的Server2 , 以此類(lèi)推, 直到替換完所有的服務(wù)器, 至此 ,服務(wù)更新完成。

滾動(dòng)發(fā)布特點(diǎn)

這種部署方式相對(duì)于藍(lán)綠部署,更加節(jié)約資源——它不需要運(yùn)行兩個(gè)集群、兩倍的實(shí)例數(shù)。我們可以部分部署,例如每次只取出集群的20%進(jìn)行升級(jí)。

回滾困難

滾定發(fā)布注意事項(xiàng)

滾動(dòng)發(fā)布沒(méi)有一個(gè)確定可行的環(huán)境。使用藍(lán)綠部署,我們能夠清晰地知道老版本是可行的,而使用滾動(dòng)發(fā)布,我們無(wú)法確定。

修改了現(xiàn)有的環(huán)境。

回滾困難。舉個(gè)例子,在某一次發(fā)布中,我們需要更新100個(gè)實(shí)例,每次更新10個(gè)實(shí)例,每次部署需要5分鐘。當(dāng)滾動(dòng)發(fā)布到第80個(gè)實(shí)例時(shí),發(fā)現(xiàn)了問(wèn)題,需要回滾,這個(gè)回滾卻是一個(gè)痛苦,并且漫長(zhǎng)的過(guò)程。

有的時(shí)候,我們還可能對(duì)系統(tǒng)進(jìn)行動(dòng)態(tài)伸縮,如果部署期間,系統(tǒng)自動(dòng)擴(kuò)容/縮容了,我們還需判斷到底哪個(gè)節(jié)點(diǎn)使用的是哪個(gè)代碼。盡管有一些自動(dòng)化的運(yùn)維工具,但是依然令人心驚膽戰(zhàn)。

因?yàn)槭侵鸩礁拢敲次覀冊(cè)谏暇€(xiàn)代碼的時(shí)候,就會(huì)短暫出現(xiàn)新老版本不一致的情況,如果對(duì)上線(xiàn)要求較高的場(chǎng)景,那么就需要考慮如何做好兼容的問(wèn)題。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶(hù)小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶(hù)、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

項(xiàng)目地址:https://github.com/YunaiV/yudao-cloud

視頻教程:https://doc.iocoder.cn/video/

灰度發(fā)布

灰度發(fā)布, 也叫金絲雀發(fā)布。是指在黑與白之間,能夠平滑過(guò)渡的一種發(fā)布方式。AB test就是一種灰度發(fā)布方式,讓一部分用戶(hù)繼續(xù)用A,一部分用戶(hù)開(kāi)始用B,如果用戶(hù)對(duì)B沒(méi)有什么反對(duì)意見(jiàn),那么逐步擴(kuò)大范圍,把所有用戶(hù)都遷移到B上面來(lái)?;叶劝l(fā)布可以保證整體系統(tǒng)的穩(wěn)定,在初始灰度的時(shí)候就可以發(fā)現(xiàn)、調(diào)整問(wèn)題,以保證其影響度,而我們平常所說(shuō)的金絲雀部署也就是灰度發(fā)布的一種方式。

具體到服務(wù)器上, 實(shí)際操作中還可以做更多控制,譬如說(shuō),給最初更新的10臺(tái)服務(wù)器設(shè)置較低的權(quán)重、控制發(fā)送給這10臺(tái)服務(wù)器的請(qǐng)求數(shù),然后逐漸提高權(quán)重、增加請(qǐng)求數(shù)。一種平滑過(guò)渡的思路, 這個(gè)控制叫做“流量切分”。

17世紀(jì),英國(guó)礦井工人發(fā)現(xiàn),金絲雀對(duì)瓦斯這種氣體十分敏感??諝庵心呐掠袠O其微量的瓦斯,金絲雀也會(huì)停止歌唱;而當(dāng)瓦斯含量超過(guò)一定限度時(shí),雖然魯鈍的人類(lèi)毫無(wú)察覺(jué),金絲雀卻早已毒發(fā)身亡。當(dāng)時(shí)在采礦設(shè)備相對(duì)簡(jiǎn)陋的條件下,工人們每次下井都會(huì)帶上一只金絲雀作為“瓦斯檢測(cè)指標(biāo)”,以便在危險(xiǎn)狀況下緊急撤離。

a136d6a2-1e05-11ee-962d-dac502259ad0.png

準(zhǔn)備好部署各個(gè)階段的工件,包括:構(gòu)建工件,測(cè)試腳本,配置文件和部署清單文件。

將“金絲雀”服務(wù)器部署進(jìn)服務(wù)器中, 測(cè)試。

從負(fù)載均衡列表中移除掉“金絲雀”服務(wù)器。

升級(jí)“金絲雀”應(yīng)用(排掉原有流量并進(jìn)行部署)。

對(duì)應(yīng)用進(jìn)行自動(dòng)化測(cè)試。

將“金絲雀”服務(wù)器重新添加到負(fù)載均衡列表中(連通性和健康檢查)。

如果“金絲雀”在線(xiàn)使用測(cè)試成功,升級(jí)剩余的其他服務(wù)器。(否則就回滾)

A/B測(cè)試

A/B測(cè)試和藍(lán)綠發(fā)布、滾動(dòng)發(fā)布以及金絲雀發(fā)布,完全是兩回事。

藍(lán)綠發(fā)布、滾動(dòng)發(fā)布和金絲雀是發(fā)布策略,目標(biāo)是確保新上線(xiàn)的系統(tǒng)穩(wěn)定,關(guān)注的是新系統(tǒng)的BUG、隱患。

A/B測(cè)試是效果測(cè)試,同一時(shí)間有多個(gè)版本的服務(wù)對(duì)外服務(wù),這些服務(wù)都是經(jīng)過(guò)足夠測(cè)試,達(dá)到了上線(xiàn)標(biāo)準(zhǔn)的服務(wù),有差異但是沒(méi)有新舊之分(它們上線(xiàn)時(shí)可能采用了藍(lán)綠部署的方式)。

A/B測(cè)試關(guān)注的是不同版本的服務(wù)的實(shí)際效果,譬如說(shuō)轉(zhuǎn)化率、訂單情況等。

A/B測(cè)試時(shí),線(xiàn)上同時(shí)運(yùn)行多個(gè)版本的服務(wù),這些服務(wù)通常會(huì)有一些體驗(yàn)上的差異,譬如說(shuō)頁(yè)面樣式、顏色、操作流程不同。相關(guān)人員通過(guò)分析各個(gè)版本服務(wù)的實(shí)際效果,選出效果最好的版本。

a158c9ce-1e05-11ee-962d-dac502259ad0.png

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 微服務(wù)
    +關(guān)注

    關(guān)注

    0

    文章

    126

    瀏覽量

    7303
  • 系統(tǒng)
    +關(guān)注

    關(guān)注

    1

    文章

    1004

    瀏覽量

    21232

原文標(biāo)題:微服務(wù)的4種部署策略,你都清楚嗎?

文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何用ACM簡(jiǎn)化的Spring Cloud微服務(wù)環(huán)境配置管理

    服務(wù)的基本行為,或者不同環(huán)境之間的配置差異很大,那么可能就只能在一套環(huán)境中發(fā)現(xiàn)某個(gè)特定的問(wèn)題,這是極其痛苦的事情。 所以,如果存在不同環(huán)境之間的配置差異,應(yīng)該如何在部署流程中對(duì)其進(jìn)行處理呢?一
    發(fā)表于 02-02 14:18

    微服務(wù)架構(gòu)下分布式事務(wù)解決方案 —— 阿里GTS

    策略。為了滿(mǎn)足一致性的要求,confirm和cancel接口必須實(shí)現(xiàn)冪等。上述原因?qū)е耇CC方案大多被研發(fā)實(shí)力較強(qiáng)、有迫切需求的大公司所采用。微服務(wù)倡導(dǎo)服務(wù)的輕量化、易部署,而TCC
    發(fā)表于 03-16 11:14

    使用阿里云ACM簡(jiǎn)化的Spring Cloud微服務(wù)環(huán)境配置管理

    的配置管理面臨的挑戰(zhàn)》 里有長(zhǎng)篇幅的側(cè)面論述。如果測(cè)試、生產(chǎn)因?yàn)榕渲么虺鰜?lái)的包不一樣,如何保證的測(cè)試是有效的?關(guān)注微服務(wù)的開(kāi)發(fā)者一定拜讀過(guò)下面這本微服務(wù)圣經(jīng)在上書(shū)中的第6.7及6.8小節(jié)對(duì)于環(huán)境和配置
    發(fā)表于 07-04 17:16

    微服務(wù)架構(gòu)和CQRS架構(gòu)基本概念介紹

    微服務(wù)架構(gòu)現(xiàn)在很熱,到處可以看到各大互聯(lián)網(wǎng)公司的微服務(wù)實(shí)踐的分享總結(jié)。但是,我今天的分享和微服務(wù)沒(méi)有關(guān)系,希望可以帶給大家一些新的東西。如果一定要說(shuō)微服務(wù)和CQRS架構(gòu)的關(guān)系,那我覺(jué)得
    發(fā)表于 05-22 09:03

    運(yùn)維是如何看待微服務(wù)和容器的

    微服務(wù)在帶來(lái)良好的設(shè)計(jì)和架構(gòu)理念的同時(shí),也帶來(lái)了運(yùn)維上的額外復(fù)雜性,尤其是在服務(wù)部署服務(wù)監(jiān)控上。那么,運(yùn)維是如何看待微服務(wù)和容器的呢?傳統(tǒng)的單體應(yīng)用又該如何完成
    發(fā)表于 09-30 17:24 ?0次下載
    運(yùn)維是如何看待<b class='flag-5'>微服務(wù)</b>和容器的

    什么是微服務(wù)_微服務(wù)知識(shí)點(diǎn)全面總結(jié)

    微服務(wù)是一個(gè)新興的軟件架構(gòu),就是把一個(gè)大型的單個(gè)應(yīng)用程序和服務(wù)拆分為數(shù)十個(gè)的支持微服務(wù)。一個(gè)微服務(wù)策略可以讓工作變得更為簡(jiǎn)便,它可擴(kuò)展單個(gè)
    的頭像 發(fā)表于 02-07 16:06 ?1.5w次閱讀

    微服務(wù)和分布式的區(qū)別

    本文全面概述了微服務(wù)和分布式的區(qū)別。分布式和微服的架構(gòu)很相似,只是部署的方式不一樣而已。分布式:分散壓力。微服務(wù):分散能力。
    的頭像 發(fā)表于 02-09 10:52 ?8.1w次閱讀
    <b class='flag-5'>微服務(wù)</b>和分布式的區(qū)別

    微服務(wù)優(yōu)勢(shì)_微服務(wù)架構(gòu)的好處與不足

    微服務(wù)是用一組小服務(wù)的方式來(lái)構(gòu)建一個(gè)應(yīng)用,服務(wù)獨(dú)立運(yùn)行在不同的進(jìn)程中,服務(wù)之間通過(guò)輕量的通訊機(jī)制(如RESTful接口)來(lái)交互,并且服務(wù)可以
    發(fā)表于 02-23 11:24 ?4360次閱讀

    什么是微服務(wù)和容器?微服務(wù)和容器的作用是什么

    微服務(wù)是將應(yīng)用程序拆分為多個(gè)服務(wù)的一架構(gòu)類(lèi)型,這些服務(wù)具備構(gòu)成整個(gè)應(yīng)用程序的細(xì)粒度功能。每個(gè)微服務(wù)將具備針對(duì)您的應(yīng)用程序的不同邏輯功能。與
    的頭像 發(fā)表于 01-13 10:54 ?3.2w次閱讀
    什么是<b class='flag-5'>微服務(wù)</b>和容器?<b class='flag-5'>微服務(wù)</b>和容器的作用是什么

    微服務(wù)架構(gòu)的特點(diǎn)_微服務(wù)架構(gòu)適用場(chǎng)景

     微服務(wù)架構(gòu)是一項(xiàng)在云中部署應(yīng)用和服務(wù)的新技術(shù)。
    的頭像 發(fā)表于 05-17 17:28 ?4946次閱讀

    微服務(wù)架構(gòu)簡(jiǎn)介和優(yōu)勢(shì)

    微服務(wù)是小型的獨(dú)立服務(wù),可以獨(dú)立演進(jìn)并單獨(dú)部署,以支持持續(xù)集成和持續(xù)交付。微服務(wù)架構(gòu)促進(jìn)開(kāi)發(fā)和部署由獨(dú)立、自主、模塊化、自包含單元組成的應(yīng)用
    的頭像 發(fā)表于 11-30 15:41 ?1584次閱讀
    <b class='flag-5'>微服務(wù)</b>架構(gòu)簡(jiǎn)介和優(yōu)勢(shì)

    什么是微服務(wù)架構(gòu)?

    在Medium,我們的技術(shù)堆棧始于2012年的單片Node.js應(yīng)用程序。我們已經(jīng)構(gòu)建了幾個(gè)衛(wèi)星服務(wù),但我們還沒(méi)有制定一個(gè)系統(tǒng)地采用微服務(wù)架構(gòu)的策略。隨著系統(tǒng)變得越來(lái)越復(fù)雜并且團(tuán)隊(duì)不斷發(fā)展,我們?cè)?018年初轉(zhuǎn)向了
    的頭像 發(fā)表于 02-24 11:15 ?1269次閱讀
    什么是<b class='flag-5'>微服務(wù)</b>架構(gòu)?

    微服務(wù)架構(gòu)下的3部署策略

    不知道大家有了解過(guò)你們公司的軟件產(chǎn)品是如何部署的么?采用的什么部署策略?其實(shí)在軟件開(kāi)發(fā)生命周期中,部署是非常關(guān)鍵的一環(huán),需要考慮多方面的因
    的頭像 發(fā)表于 04-07 15:26 ?786次閱讀

    springcloud微服務(wù)架構(gòu)

    和可擴(kuò)展的微服務(wù)應(yīng)用。 微服務(wù)架構(gòu)通過(guò)將一個(gè)大型應(yīng)用拆分成一系列小型的、獨(dú)立可部署服務(wù)來(lái)提供解決方案。每個(gè)服務(wù)都有自己的數(shù)據(jù)存儲(chǔ)、業(yè)務(wù)邏輯
    的頭像 發(fā)表于 11-23 09:24 ?961次閱讀

    設(shè)計(jì)微服務(wù)架構(gòu)的原則

    微服務(wù)是一軟件架構(gòu)策略,有利于改善整體性能和可擴(kuò)展性。可能會(huì)想,我的團(tuán)隊(duì)需不需要采用微服務(wù),設(shè)計(jì)微服
    的頭像 發(fā)表于 11-26 08:05 ?465次閱讀
    設(shè)計(jì)<b class='flag-5'>微服務(wù)</b>架構(gòu)的原則