<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          應(yīng)用不停機(jī)發(fā)布的思考與初識(shí) | IDCF

          共 7627字,需瀏覽 16分鐘

           ·

          2021-11-23 11:21

          c675b66f970e50b0e4f5d6ed6cce4c7c.webp

          來(lái)源:技術(shù)奇妙物語(yǔ)作者:陳俊?
          應(yīng)用發(fā)布,簡(jiǎn)單來(lái)說(shuō)就是將已開(kāi)發(fā)完成的系統(tǒng)功能部署到生產(chǎn)環(huán)境,并可正常對(duì)用戶提供服務(wù)。傳統(tǒng)的應(yīng)用發(fā)布步驟一般采用“三步曲”:
          • 第一步:停止應(yīng)用

          • 第二步:更新應(yīng)用

          • 第三步:?jiǎn)?dòng)應(yīng)用

          那你肯定會(huì)問(wèn),從停止應(yīng)用一直到啟動(dòng)應(yīng)用期間,系統(tǒng)功能是不是無(wú)法正常使用?沒(méi)錯(cuò)。在應(yīng)用發(fā)布過(guò)程中,可能會(huì)出現(xiàn)頁(yè)面白屏、訪問(wèn)超時(shí)等各種異常,而且一般會(huì)持續(xù)很久,所以發(fā)布時(shí)間基本上都集中在凌晨,講究點(diǎn)的可能就配上一句友好提示“系統(tǒng)正在維護(hù),請(qǐng)稍后訪問(wèn)!”。這種情況大部分都出現(xiàn)在傳統(tǒng)行業(yè),原因可能是覺(jué)得沒(méi)有必要,因?yàn)椋?/span>
          • 傳統(tǒng)行業(yè)的業(yè)務(wù)一般都集中的日間,也就是說(shuō)凌晨基本沒(méi)有業(yè)務(wù),或者非重要業(yè)務(wù)。

          • 就算凌晨無(wú)法使用這些功能,覺(jué)得也沒(méi)關(guān)系,第二天再來(lái)就是了,客戶又不會(huì)跑了。

          但真的是這樣嗎?如今越來(lái)越多的傳統(tǒng)行業(yè),都在向互聯(lián)網(wǎng)服務(wù)模式轉(zhuǎn)型,其服務(wù)主要特點(diǎn):“全天”不間斷為客戶提供“優(yōu)質(zhì)”的“線上”服務(wù),拆分一下關(guān)鍵詞:
          • “全天”代表著任何時(shí)間

          • “優(yōu)質(zhì)”代表著客戶體驗(yàn)

          • “線上”代表著線上自助

          所以說(shuō),一個(gè)優(yōu)質(zhì)的客戶服務(wù)勢(shì)必會(huì)對(duì)服務(wù)可用性提出更高的要求,而傳統(tǒng)的停機(jī)發(fā)布不但會(huì)對(duì)客戶造成使用影響,還會(huì)變向?qū)ζ髽I(yè)造成非直接經(jīng)濟(jì)損失。例如:客戶體驗(yàn)下降導(dǎo)致的客戶流失。僅此而已?非也!作為曾經(jīng)也同樣是一名運(yùn)維工程師的我來(lái)說(shuō),凌晨發(fā)布家常便飯,還時(shí)不時(shí)來(lái)一次長(zhǎng)達(dá)8小時(shí)的“長(zhǎng)途之旅”,身體就直接被掏空,加上第二天還在“補(bǔ)血”中,還會(huì)被各種騷擾電話轟炸,這簡(jiǎn)直就是一場(chǎng)噩夢(mèng)。由此可見(jiàn),應(yīng)用不停機(jī)發(fā)布的重要性,通過(guò)它可以幫助我們:一是在應(yīng)用發(fā)布過(guò)程中線上服務(wù)持續(xù)可用,提升服務(wù)可用性;二是可在白天或是任何時(shí)間發(fā)布,提升運(yùn)維人員的機(jī)動(dòng)性。那么我們需要怎么做,才能實(shí)現(xiàn)應(yīng)用不停機(jī)發(fā)布呢?那接下來(lái)就讓我們進(jìn)入正題。

          ? Part 1

          6151e5a5aecab2fdedac17095242610c.webp



          應(yīng)用不停機(jī)發(fā)布,從字面上很好理解,就是應(yīng)用發(fā)布過(guò)程中服務(wù)不中斷。

          但仔細(xì)回想一下,原先應(yīng)用發(fā)布過(guò)程中,反正服務(wù)會(huì)中斷,那就在應(yīng)用發(fā)布完成后,通過(guò)網(wǎng)絡(luò)屏蔽外部流量的方式,先進(jìn)行核心或常用功能的內(nèi)部驗(yàn)證,在確保沒(méi)有問(wèn)題后,再解除網(wǎng)絡(luò)屏蔽,并對(duì)外提供服務(wù)。

          那現(xiàn)在呢?應(yīng)用發(fā)布后直接對(duì)外?不需要進(jìn)行內(nèi)部或小流量驗(yàn)證?想必每個(gè)人的答案都有所不同。對(duì)此,可以對(duì)應(yīng)用不停機(jī)發(fā)布能力,簡(jiǎn)單定義三個(gè)成熟度。

          成熟度成熟度能力
          成熟度一級(jí)應(yīng)用發(fā)布過(guò)程服務(wù)不中斷
          成熟度二級(jí)應(yīng)用發(fā)布過(guò)程服務(wù)不中斷,單應(yīng)用功能可先進(jìn)行內(nèi)部/小流量驗(yàn)證
          成熟度三級(jí)應(yīng)用發(fā)布過(guò)程服務(wù)不中斷,多應(yīng)用(聯(lián)動(dòng))功能可先進(jìn)行內(nèi)部/小流量驗(yàn)證

          注:不同的成熟度對(duì)技術(shù)能力的要求會(huì)有所不同,建議通過(guò)逐步演進(jìn)的方式來(lái)提升成熟度,并在演進(jìn)過(guò)程中對(duì)不同的技術(shù)能力進(jìn)行驗(yàn)證,從而不斷完善。

          有人會(huì)說(shuō)藍(lán)綠發(fā)布,或有人會(huì)說(shuō)滾動(dòng)發(fā)布,灰度發(fā)布就可以實(shí)現(xiàn)以上能力。但其實(shí),這些答案并不準(zhǔn)確,或者說(shuō)并不全面,它們雖有交集,但無(wú)法涵蓋。

          既然提到發(fā)布模式,那我們先來(lái)簡(jiǎn)單比較一下幾種發(fā)布模式的優(yōu)缺點(diǎn)。


          藍(lán)綠發(fā)布滾動(dòng)發(fā)布灰度發(fā)布
          資源成本生產(chǎn)等比例資源投入,成本較高基本無(wú)需額外資源投入,成本較低基本無(wú)需額外資源投入,成本較低
          回滾時(shí)長(zhǎng)兩套環(huán)境直接切換,時(shí)長(zhǎng)較短根據(jù)滾動(dòng)速率決定,時(shí)長(zhǎng)較長(zhǎng)灰度部分實(shí)例回滾,時(shí)長(zhǎng)適中
          技術(shù)難點(diǎn)資源完全隔離,技術(shù)難點(diǎn)較低需制定滾動(dòng)策略,技術(shù)難點(diǎn)適中引入流量路由能力,技術(shù)難點(diǎn)較高
          影響范圍影響所有用戶,影響面較大影響所有用戶,影響面較大影響少量用戶,影響面較小

          注:大部分的技術(shù)文章里都會(huì)提到,可通過(guò)以上任何一種發(fā)布模式,做到用戶無(wú)感知的應(yīng)用發(fā)布,但在實(shí)際情況下,并不完全足夠,還需要通過(guò)一些輔助手段組合在一起才能實(shí)現(xiàn)。

          結(jié)合以上發(fā)布模式的優(yōu)缺點(diǎn),如果你的組織在基礎(chǔ)架構(gòu)技術(shù)能力上已經(jīng)非常成熟,那么灰度發(fā)布一定是最佳之選,但如果還處于初級(jí)階段,那可能并不是,而藍(lán)綠發(fā)布的資源投入較高,也不是一種非常好的選擇。

          剩下的只有滾動(dòng)發(fā)布,但滾動(dòng)發(fā)布的發(fā)布策略會(huì)比較復(fù)雜,特別在容器環(huán)境下,同一應(yīng)用多個(gè)服務(wù)實(shí)例的滾動(dòng)策略還需要單獨(dú)來(lái)實(shí)現(xiàn)。

          所以,前期可以選擇一種折中的方式,即:單獨(dú)搭建一套預(yù)發(fā)驗(yàn)證環(huán)境,應(yīng)用架構(gòu)需對(duì)齊生產(chǎn)環(huán)境,但容量方面可以最小化,一般一個(gè)應(yīng)用至少2個(gè)服務(wù)實(shí)例。

          這樣,我們就可以在對(duì)生產(chǎn)環(huán)境做應(yīng)用發(fā)布前,事先對(duì)生產(chǎn)預(yù)驗(yàn)證環(huán)境進(jìn)行應(yīng)用發(fā)布,發(fā)布后僅對(duì)內(nèi)部用戶可見(jiàn),驗(yàn)證通過(guò)后,再對(duì)生產(chǎn)環(huán)境采用全量應(yīng)用發(fā)布。


          ? Part 2

          6151e5a5aecab2fdedac17095242610c.webp



          應(yīng)用不停機(jī)發(fā)布是一項(xiàng)綜合性能力,當(dāng)明確好一種發(fā)布模式后,就需要逐步識(shí)別會(huì)涉及到哪些技術(shù)組件,以及明確技術(shù)組件在整個(gè)解決方案中所擔(dān)任的職責(zé)邊界,從而使它們能夠相互協(xié)同工作。

          如下列舉了一些主要的技術(shù)組件:

          技術(shù)組件職責(zé)邊界
          應(yīng)用管理平臺(tái)主要負(fù)責(zé)控制整個(gè)應(yīng)用發(fā)布流程,以及集成并調(diào)度不同的技術(shù)組件,協(xié)同完成應(yīng)用不停機(jī)發(fā)布

          負(fù)載均衡(4層)?

          主要負(fù)責(zé)服務(wù)請(qǐng)求的流量接入,可根據(jù)所識(shí)別的流量特征,負(fù)載分發(fā)到不同的負(fù)載均衡(7層)

          負(fù)載均衡(7層)?

          主要負(fù)責(zé)服務(wù)請(qǐng)求的流量路由,可根據(jù)所識(shí)別的流量特征,路由分發(fā)到同一應(yīng)用的不同實(shí)例

          容器/虛擬機(jī)平臺(tái)?

          主要負(fù)責(zé)容器/虛擬機(jī)資源管理,包括容器/虛擬機(jī)的創(chuàng)建、更新、銷毀等

          域名解析系統(tǒng)

          主要負(fù)責(zé)域名地址管理,包括域名的注冊(cè)、更新、解析等,以及提供用戶訪問(wèn)應(yīng)用或應(yīng)用間訪問(wèn)等尋址能力

          注冊(cè)中心

          主要負(fù)責(zé)服務(wù)資源管理,包括服務(wù)的注冊(cè)、更新、注銷等,以及提供服務(wù)請(qǐng)求方發(fā)現(xiàn)服務(wù)提供方的能力

          在明確技術(shù)組件后,還需要對(duì)技術(shù)組件進(jìn)行合理的架構(gòu)規(guī)劃,以適配不同的網(wǎng)絡(luò)架構(gòu)要求。

          本次主要將對(duì)負(fù)載均衡進(jìn)行特別說(shuō)明,一方面它是負(fù)責(zé)處理流量的核心技術(shù)組件,另一方面網(wǎng)絡(luò)架構(gòu)的不同,對(duì)它的部署架構(gòu)影響可能也是最大的。

          在傳統(tǒng)的網(wǎng)絡(luò)架構(gòu)環(huán)境中,出于對(duì)網(wǎng)絡(luò)安全或其他考慮因素,通常會(huì)劃分出多個(gè)不同的網(wǎng)絡(luò)區(qū)域,網(wǎng)絡(luò)區(qū)域間的訪問(wèn)需要通過(guò)開(kāi)設(shè)防火墻訪問(wèn)策略才可以進(jìn)行互通。

          但這種方式必然會(huì)對(duì)應(yīng)用服務(wù)間直接進(jìn)行點(diǎn)對(duì)點(diǎn)訪問(wèn)的方式造成影響,主要原因是虛擬機(jī)或容器環(huán)境中,應(yīng)用的IP地址可能會(huì)發(fā)生變化,導(dǎo)致無(wú)法提前明確防火墻訪問(wèn)策略。

          所以,一般都會(huì)考慮使用負(fù)載均衡(代理模式)來(lái)解決這個(gè)問(wèn)題。

          7a426e590b3a4a6c3aa237ba0e764da7.webp

          建議前期優(yōu)先選擇方案三,雖然鏈路較長(zhǎng)會(huì)小幅影響性能,但此部署方案相對(duì)較為成熟,一方面可以避免流量負(fù)載不均的問(wèn)題,另一方面對(duì)于應(yīng)用的改造成本也會(huì)相對(duì)較低。

          注:除網(wǎng)絡(luò)區(qū)域隔離會(huì)遇到這種情況外,在某些網(wǎng)絡(luò)架構(gòu)中,不同的容器集群間也同樣無(wú)法訪問(wèn),所以也同樣適用。

          另外,除必要情況下,也應(yīng)盡量減少跨網(wǎng)絡(luò)區(qū)域或跨容器集群間的訪問(wèn),例如:優(yōu)先容器集群內(nèi)路由訪問(wèn),跨網(wǎng)絡(luò)區(qū)域頻繁交互的應(yīng)用服務(wù)建議遷移至同一網(wǎng)絡(luò)區(qū)域等。

          負(fù)載均衡通常可以分為4層模式和7層模式,其中4層更關(guān)注流量負(fù)載,而7層更關(guān)注流量路由。

          一般建議將負(fù)載均衡(4層)和負(fù)載均衡(7層)進(jìn)行分層部署,以充分發(fā)揮它們的強(qiáng)項(xiàng)。

          393153c323f1daa7b93975c69ad7c32f.webp

          建議前期優(yōu)先選擇方案二,雖然無(wú)法實(shí)現(xiàn)多容器集群間的全局流量調(diào)度,但對(duì)于當(dāng)前可觀測(cè)性和排障能力還不夠健全的組織,通過(guò)物理隔離降低運(yùn)維難度也是一種不錯(cuò)的選擇。

          綜上架構(gòu)決策,最終的全局流量鏈路大致如下,默認(rèn)情況下,數(shù)據(jù)中心間流量隔離,即:?jiǎn)螖?shù)據(jù)中心流量收斂,但可根據(jù)實(shí)際情況進(jìn)行選擇性放行。

          4b2f943b6af191537d7f219fb9ce7311.webp


          Part 3

          6151e5a5aecab2fdedac17095242610c.webp



          應(yīng)用不停機(jī)發(fā)布的基礎(chǔ)是服務(wù)路由,在這里,我們可以把應(yīng)用服務(wù)分為兩種角色,服務(wù)請(qǐng)求方或服務(wù)提供方,而服務(wù)請(qǐng)求方通過(guò)不同的尋址方式,最終訪問(wèn)到服務(wù)提供方的形式,可以稱之為服務(wù)路由。

          服務(wù)路由可以分為南北向和東西向。

          • 南北向:服務(wù)請(qǐng)求方—>負(fù)載均衡(4層)—>負(fù)載均衡(7層)—>服務(wù)提供方
          • 東西向:服務(wù)請(qǐng)求方—>服務(wù)提供方
          不難發(fā)現(xiàn),其主要區(qū)別就是,南北向服務(wù)請(qǐng)求方需借助負(fù)載均衡(代理模式)訪問(wèn)服務(wù)提供方,而東西向服務(wù)請(qǐng)求方直接訪問(wèn)服務(wù)提供方。d4ec89339fa0ff5fc4a53ec5ea6ca08d.webp注:域名解析結(jié)果會(huì)緩存在本地,可緩解域名解析服務(wù)壓力,但緩存時(shí)間應(yīng)根據(jù)不同的服務(wù)水平進(jìn)行評(píng)估,否則將會(huì)延長(zhǎng)解析地址切換及故障轉(zhuǎn)移時(shí)長(zhǎng)。有條件的話建議采用httpdns來(lái)解決本地緩存問(wèn)題。但不管是南北向還是東西向,服務(wù)提供方在被訪問(wèn)前,得讓服務(wù)請(qǐng)求方感知或可見(jiàn),常見(jiàn)的方式主要有兩種,一種是不依賴注冊(cè)中心的,而另一種則是依賴注冊(cè)中心的。如果當(dāng)前應(yīng)用架構(gòu)上暫未使用微服務(wù)框架,即:不依賴注冊(cè)中心,服務(wù)提供方可以手動(dòng)或自動(dòng)將服務(wù)在負(fù)載均衡上進(jìn)行服務(wù)注冊(cè),服務(wù)請(qǐng)求方直接調(diào)用負(fù)載均衡。ac93474c8c11ce5047686b926b2918d3.webp如果當(dāng)前應(yīng)用架構(gòu)上已經(jīng)使用微服務(wù)框架,即:依賴注冊(cè)中心,服務(wù)提供方可以在注冊(cè)中心上進(jìn)行服務(wù)注冊(cè),服務(wù)請(qǐng)求方在注冊(cè)中心進(jìn)行服務(wù)發(fā)現(xiàn),或者由負(fù)載均衡在注冊(cè)中心進(jìn)行服務(wù)發(fā)現(xiàn),服務(wù)請(qǐng)求方直接調(diào)用負(fù)載均衡。da988ff327b5b6f926689e26a47e510a.webp注:在多注冊(cè)中心的場(chǎng)景下,可通過(guò)統(tǒng)一注冊(cè)中心完成異構(gòu)注冊(cè)中心的服務(wù)發(fā)現(xiàn)。另外,我們還會(huì)對(duì)同一應(yīng)用的不同服務(wù)實(shí)例進(jìn)行分組,分組策略可根據(jù)不同的條件來(lái)決定,例如:不同環(huán)境、不同版本等。假設(shè)根據(jù)不同環(huán)境(預(yù)生產(chǎn)環(huán)境和生產(chǎn)環(huán)境)這個(gè)條件,可以把部署在預(yù)發(fā)驗(yàn)證環(huán)境的應(yīng)用服務(wù)分為預(yù)發(fā)組,把部署在生產(chǎn)環(huán)境的應(yīng)用服務(wù)分為線上組。然后通過(guò)配置路由策略,下發(fā)到負(fù)載均衡或應(yīng)用服務(wù),就可以實(shí)現(xiàn)簡(jiǎn)單的服務(wù)路由了。例如:不同分組間默認(rèn)情況下不允許服務(wù)路由,但特殊場(chǎng)景下允許預(yù)發(fā)組服務(wù)路由至線上組。41bc6818b5e762c9d6901b0a44672134.webp注:若服務(wù)請(qǐng)求方是前端頁(yè)面或客戶端,也可以對(duì)前端流量也進(jìn)行分組,例如:根據(jù)網(wǎng)絡(luò)環(huán)境,將接入公司W(wǎng)I-FI網(wǎng)絡(luò)環(huán)境的流量識(shí)別成預(yù)發(fā)組。


          Part 4

          6151e5a5aecab2fdedac17095242610c.webp



          應(yīng)用不停機(jī)發(fā)布的核心是應(yīng)用如何優(yōu)雅停止,光有服務(wù)路由可能還不夠,它雖然已經(jīng)解決了大部分問(wèn)題,但離成功還差最后一步。

          前面我們提到過(guò)應(yīng)用發(fā)布要做到用戶無(wú)感知,那如果應(yīng)用發(fā)布過(guò)程中出現(xiàn)瞬斷或短時(shí)間中斷,而用戶又正好在使用,那算不算用戶就感知到了呢?

          不過(guò),如果你覺(jué)得線上服務(wù)中斷5分鐘也可以忍受,那我只能呵呵了。但我相信大部分具備互聯(lián)網(wǎng)服務(wù)模式的頭部公司,別說(shuō)發(fā)布一次服務(wù)停止5分鐘,可能就連5秒鐘也無(wú)法忍受。

          那我們先來(lái)分析一下為什么會(huì)出現(xiàn)瞬斷或短時(shí)間中斷:

          • 服務(wù)請(qǐng)求處理還沒(méi)完成,應(yīng)用就被強(qiáng)行停止(例如:運(yùn)維必備大招之kill -9 進(jìn)程),導(dǎo)致處理中的請(qǐng)求無(wú)法正常返回。
          • 服務(wù)提供方雖然已停止,但未通知服務(wù)請(qǐng)求方,服務(wù)請(qǐng)求方仍然繼續(xù)訪問(wèn)已停止的服務(wù)提供方,導(dǎo)致出現(xiàn)異常。
          04615f94da0c8355cfc2d75f66124b08.webp針對(duì)以上兩種情況,還需要分南北向和東西向進(jìn)行討論。在南北向,服務(wù)請(qǐng)求方與服務(wù)提供方間是通過(guò)負(fù)載均衡進(jìn)行服務(wù)路由,所以,在應(yīng)用發(fā)布時(shí),需要在負(fù)載均衡上進(jìn)行一些特殊處理。1)在負(fù)載均衡上,逐一對(duì)應(yīng)用服務(wù)實(shí)例進(jìn)行流量屏蔽,該屏蔽只會(huì)影響新的請(qǐng)求,等待服務(wù)請(qǐng)求處理完成后,再執(zhí)行如下操作:
          • 容器:銷毀服務(wù)實(shí)例,創(chuàng)建新版本服務(wù)實(shí)例。
          • 虛擬機(jī):更新服務(wù)實(shí)例,更新后解除屏蔽。
          277a2c48e9cec4483bd2dab2513ba66a.webp注:商業(yè)化的負(fù)載均衡一般都支持優(yōu)雅下線/上線。2)因服務(wù)請(qǐng)求方的請(qǐng)求都會(huì)先經(jīng)過(guò)負(fù)載均衡,而負(fù)載均衡的成員節(jié)點(diǎn)只要確保至少有1個(gè)服務(wù)實(shí)例存在即可,該場(chǎng)景不需要通知,因此不適用。在東西向,服務(wù)請(qǐng)求方與服務(wù)提供方間是直接進(jìn)行服務(wù)路由的,所以,在應(yīng)用發(fā)布時(shí),需要分別在服務(wù)請(qǐng)求方和服務(wù)提供方進(jìn)行一些特殊處理,而這些處理方式受限于應(yīng)用框架,這里先介紹一種常用框架,即:Springboot+Eureka應(yīng)用框架。
          1. 在服務(wù)提供方上實(shí)現(xiàn)Shutdown hook,即:等待服務(wù)請(qǐng)求處理完成后,再進(jìn)行應(yīng)用停止。
          2. 在服務(wù)提供方停止前,需通知所有服務(wù)請(qǐng)求方,并在完成通知后再進(jìn)行應(yīng)用停止。
          其中第2點(diǎn)看上去似乎很簡(jiǎn)單,但實(shí)際上會(huì)比較復(fù)雜,對(duì)此我做了一些降級(jí),用于權(quán)衡收益價(jià)值和改造成本。
          實(shí)現(xiàn)效果改造成本
          方式一:最多中斷5秒對(duì)容器/虛擬機(jī)平臺(tái)進(jìn)行少量改造
          方式二:不中斷(不通知)對(duì)容器/虛擬機(jī)平臺(tái)進(jìn)行改造
          方式三:不中斷(通知)對(duì)容器/虛擬機(jī)平臺(tái)進(jìn)行改造;對(duì)注冊(cè)中心/統(tǒng)一注冊(cè)中心進(jìn)行改造

          方式一:最多中斷5秒

          step1:依賴spring-boot-starter-actuator組件,暴露/shutdown端點(diǎn)。

          management:
          endpoint:
          shutdown:
          enabled: true
          endpoints:
          web:
          exposure:
          include: shutdown

          step2:調(diào)整Eureka配置參數(shù),該調(diào)整會(huì)分別增加Eureka客戶端和服務(wù)端性能壓力。

          配置項(xiàng)配置描述缺省值建議值
          eureka.client.registry-fetch-interval-secondsEureka客戶端獲取服務(wù)注冊(cè)信息頻率304
          ribbon.ServerListRefreshIntervalEureka客戶端ribbon刷新時(shí)間301
          eureka.server.useReadOnlyResponseCacheEureka服務(wù)端是否使用只讀緩存truefalse

          step3:容器銷毀服務(wù)實(shí)例或虛擬機(jī)更新服務(wù)實(shí)例前,請(qǐng)求如下地址進(jìn)行應(yīng)用服務(wù)實(shí)例停止。

          curl -X http://應(yīng)用服務(wù)地址/actuator/shutdown

          88d1d647899fa8c036051dd03a12e406.webp

          方式二:不中斷(不通知)

          step1:依賴spring-boot-starter-actuator組件,暴露/shutdown和/service- registry端點(diǎn)。

          management:
          endpoint:
          shutdown:
          enabled: true
          endpoints:
          web:
          exposure:
          include: shutdown,service-registry

          step2:調(diào)整Eureka配置參數(shù),該調(diào)整會(huì)分別增加Eureka客戶端和服務(wù)端性能壓力。

          配置項(xiàng)配置描述缺省值建議值
          eureka.client.registry-fetch-interval-secondsEureka客戶端獲取服務(wù)注冊(cè)信息頻率304
          ribbon.ServerListRefreshIntervalEureka客戶端ribbon刷新時(shí)間301
          eureka.server.useReadOnlyResponseCacheEureka服務(wù)端是否使用只讀緩存truefalse

          step3:容器銷毀服務(wù)實(shí)例或虛擬機(jī)更新服務(wù)實(shí)例前,請(qǐng)求如下地址進(jìn)行應(yīng)用服務(wù)實(shí)例下線。

          curl -X http://應(yīng)用服務(wù)地址/actuator/service-registry?status=DOWN

          注:此時(shí),服務(wù)提供方仍然可以提供服務(wù),但再次獲取服務(wù)實(shí)例的服務(wù)請(qǐng)求方不會(huì)再獲取該服務(wù)實(shí)例。

          step4:服務(wù)請(qǐng)求方最多等待5秒后會(huì)更新服務(wù)列表,所以,在完成以上操作后,可以休眠5秒鐘,再請(qǐng)求如下地址停止應(yīng)用服務(wù)實(shí)例。

          curl -X http://應(yīng)用服務(wù)地址/actuator/shutdown

          注:eureka.client.registry-fetch-interval-seconds+ribbon.ServerListRefreshInterval=5秒。

          9d3b760c4e7694107b451f823dc8511f.webp

          方式三:不中斷(通知)

          step1:依賴spring-boot-starter-actuator組件,暴露/shutdown和/service-registry端點(diǎn)。

          management:
          endpoint:
          shutdown:
          enabled: true
          endpoints:
          web:
          exposure:
          include: shutdown,service-registry

          step2:調(diào)整Eureka配置參數(shù),該調(diào)整會(huì)增加Eureka服務(wù)端性能壓力。

          配置項(xiàng)配置描述缺省值建議值
          eureka.server.useReadOnlyResponseCacheEureka服務(wù)端是否使用只讀緩存truefalse

          step3:容器銷毀服務(wù)實(shí)例或虛擬機(jī)更新服務(wù)實(shí)例前,請(qǐng)求如下地址進(jìn)行應(yīng)用服務(wù)實(shí)例下線。

          curl -X http://應(yīng)用服務(wù)地址/actuator/service-registry?status=DOWN

          注:此時(shí),服務(wù)提供方仍然可以提供服務(wù),但再次獲取服務(wù)實(shí)例的服務(wù)請(qǐng)求方不會(huì)再獲取該服務(wù)實(shí)例。

          step4:在注冊(cè)中心上記錄當(dāng)前正訂閱該服務(wù)實(shí)例的服務(wù)請(qǐng)求方列表,并根據(jù)列表通知它們立即重新獲取最新的服務(wù)實(shí)例,通知完成后再請(qǐng)求如下地址停止應(yīng)用服務(wù)實(shí)例。

          curl -X http://應(yīng)用服務(wù)地址/actuator/shutdown

          1b5358d868f03bec9b5cb82e822cf1a6.webp

          以上三種方式,可以結(jié)合價(jià)值收益和改造成本進(jìn)行權(quán)衡,接受瞬斷的可以選擇方式一,而對(duì)技術(shù)有極致追求的可以選擇方式三,如果兩個(gè)都不是,那就選擇方式二吧。

          注:每個(gè)應(yīng)用服務(wù)的Eureka配置參數(shù)并不一定能夠完全統(tǒng)一,這樣可能就會(huì)造成大量配置管理成本的增加,但如果可以統(tǒng)一,那方式二還是不錯(cuò)的選擇。


          Part 5

          6151e5a5aecab2fdedac17095242610c.webp



          在具備以上條件能力后,應(yīng)用發(fā)布不停機(jī)的基本框架已成型,但這樣應(yīng)用發(fā)布就能實(shí)現(xiàn)不停機(jī)了?

          那有這么簡(jiǎn)單,我們?cè)陂_(kāi)發(fā)上還需要遵循一些規(guī)范,但符合這些規(guī)范的話,可能會(huì)增加我們的一些開(kāi)發(fā)成本。

          因此,并不是說(shuō)每次應(yīng)用發(fā)布都強(qiáng)行需要實(shí)現(xiàn)不停機(jī)發(fā)布,而是應(yīng)該進(jìn)行合理的取舍。不過(guò),一個(gè)好的系統(tǒng)設(shè)計(jì)必然能做到既能遵循開(kāi)發(fā)規(guī)范,也不會(huì)增加太多開(kāi)發(fā)成本。

          如下列舉了一些常用的開(kāi)發(fā)規(guī)范,實(shí)際情況可按需調(diào)整,其目的是為了不管是接口更新還是數(shù)據(jù)庫(kù)更新等,都應(yīng)盡量做到向上兼容。

          涉及方面開(kāi)發(fā)規(guī)范及原則
          接口

          1.允許新增字段,必填字段需要設(shè)置缺省值

          2.允許原有字段擴(kuò)展長(zhǎng)度或新增字典值

          3.不允許修改原有字段的語(yǔ)義及格式

          4.不允許刪除原有字段

          5.無(wú)法兼容時(shí),應(yīng)新增接口;

          6.接口下線前,需確保無(wú)調(diào)用方。

          數(shù)據(jù)庫(kù)

          1.允許新增字段,必填字段需要設(shè)置缺省值

          2.允許原有字段擴(kuò)展長(zhǎng)度或新增字典值

          3.不允許修改原有字段的語(yǔ)義及格式

          4.不允許刪除原有字段;

          5.無(wú)法兼容時(shí),應(yīng)新增表;

          6.新老表并存期間,數(shù)據(jù)統(tǒng)計(jì)需聚合處理;

          7.老表下線前,需進(jìn)行數(shù)據(jù)遷移。

          消息

          1.優(yōu)先考慮新老格式兼容;

          2.無(wú)法兼容時(shí),生產(chǎn)者和消費(fèi)者可共同約定新的主題;

          3.若生產(chǎn)者無(wú)法約定新的主題,消費(fèi)者可增加消息分發(fā)層進(jìn)行主題重命名。

          緩存

          1.優(yōu)先考慮新老格式兼容;

          2.無(wú)法兼容時(shí),則需要對(duì)不同的業(yè)務(wù)邏輯進(jìn)行額外特殊處理。


          寫(xiě)在最后

          6151e5a5aecab2fdedac17095242610c.webp



          感謝你可以很耐心的讀到這里,整篇文章主要圍繞應(yīng)用不停機(jī)發(fā)布進(jìn)行了思考,從為什么要做,能帶來(lái)什么價(jià)值,一直到應(yīng)該怎么做,要關(guān)心哪些方面,進(jìn)行了簡(jiǎn)要說(shuō)明,主要目的是為了能讓大家,對(duì)應(yīng)用不停機(jī)發(fā)布有一個(gè)大概的框架認(rèn)識(shí)。

          實(shí)現(xiàn)應(yīng)用不停機(jī)發(fā)布的手段,也并非僅有文章中說(shuō)的那些方式,涉及到的技術(shù)組件可能也不止這些,但其解決思路基本都差不多,具體的技術(shù)實(shí)現(xiàn)方式,可以結(jié)合自身的架構(gòu)環(huán)境再進(jìn)行適配和調(diào)整。

          4dfab3ab8326becc045ec307ed5fee17.webp

          玩樂(lè)高,學(xué)敏捷,【規(guī)模化敏捷聯(lián)合作戰(zhàn)沙盤(pán)之「烏托邦計(jì)劃」】,12月25-26日登陸深圳將“多團(tuán)隊(duì)敏捷協(xié)同”基因內(nèi)化在研發(fā)流程中,為規(guī)模化提升研發(fā)效能保駕護(hù)航!!???

          企業(yè)組隊(duì)和個(gè)人均可報(bào)名參加,一起挑戰(zhàn)極客烏托邦c3ffc8d5c68c27349604132b83b1a68f.webp


          瀏覽 75
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美成人性爱免费在线 | 午夜成人精品偷拍在线 | 天天日日天天爱人人爱人人爽 | 色综合天天综合网天天狠天天 | Safari帮我打开日韩av三级片 |