<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>

          當(dāng)我們說(shuō)做灰度發(fā)布的時(shí)候我們?cè)谧鍪裁?/h1>

          共 2911字,需瀏覽 6分鐘

           ·

          2021-06-01 04:55

          點(diǎn)擊上方關(guān)注 TianTianUp一起學(xué)習(xí),天天進(jìn)步

          作者:眠云

          原文地址:https://juejin.im/post/5eb21058f265da7bd9703fe7

          ? ? 現(xiàn)在對(duì)于穩(wěn)定性的要求越來(lái)越高,同時(shí)在維護(hù)的應(yīng)用中有一個(gè)正在進(jìn)行遷移,需要采取一些措施來(lái)實(shí)現(xiàn)平穩(wěn)升級(jí)和遷移。采用灰度發(fā)布是一個(gè)可行的方案。

          什么是灰度發(fā)布

          ? ? 百度百科上的解釋是這樣的

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

          從上面的解釋,我們不難看出,灰度發(fā)布包括三個(gè)要點(diǎn):

          1. 分別部署A,B兩個(gè)版本

          2. 選擇測(cè)試用戶并逐漸切流

          3. 將測(cè)試用戶切到B版本,不能影響到政策用戶對(duì)A版本的使用

          灰度發(fā)布主要的作用也顯而易見(jiàn):

          1. 降低發(fā)布帶來(lái)的影響。即使在日常和預(yù)發(fā)環(huán)境進(jìn)行充分測(cè)試,但也沒(méi)人能保證線上一定是好的。測(cè)試環(huán)境和線上畢竟不是完全一樣,測(cè)試也不可能覆蓋所有地方

          2. 通過(guò)新老版本對(duì)比,驗(yàn)證新版本帶來(lái)的效果

          怎么做灰度發(fā)布

          ? ? 在開(kāi)始介紹灰度發(fā)布之前,我們先看一下沒(méi)有灰度的發(fā)布流程是怎么樣的:

          直接替換部署

          如果變更是兼容的:

          ? ? 通常的發(fā)布方式是底層服務(wù)先進(jìn)行發(fā)布,然后上層應(yīng)用跟著進(jìn)行發(fā)布。前端CDN比較特殊,會(huì)在web層之前進(jìn)行非覆蓋式發(fā)布(CDN 本質(zhì)是一個(gè)OSS文件,每次發(fā)布CDN版本+1,并保留之前的版本)。web層帶著最新的CDN版本在最后發(fā)布

          一般應(yīng)用通常會(huì)引入配置服務(wù)器來(lái)管理一些配置項(xiàng),可以實(shí)現(xiàn)不重新發(fā)布應(yīng)用的情況下做一些變更。比如切換CDN版本號(hào)來(lái)實(shí)現(xiàn)前端發(fā)布

          滾動(dòng)部署和藍(lán)綠部署

          ? ? 現(xiàn)在應(yīng)用基本都會(huì)有多臺(tái)機(jī)器和負(fù)載均衡。發(fā)布方式則會(huì)變成每次發(fā)布一部分機(jī)器,從負(fù)載均衡上去掉并更新,更新完成之后負(fù)載均衡重新接入這部分機(jī)器。這就是滾動(dòng)部署。

          ? ? 藍(lán)綠部署也是類似。區(qū)別在于,先升級(jí)一部分,然后通過(guò)負(fù)載均衡把流量導(dǎo)入到新服務(wù),最后升級(jí)另一部機(jī)器并重新接入負(fù)載均衡。

          不兼容變更

          ? ? 上面討論的都是兼容的變更,但有時(shí)候我們會(huì)需要做一些 breaking change ,這個(gè)時(shí)候就要前后端同時(shí)發(fā)布,否則會(huì)有一段時(shí)間服務(wù)不可用。如果是用最原始的部署方式,web層帶著最新的前端代碼(或CDN版本號(hào))一起發(fā)布就好了。但是在有了配置服務(wù)器之后,雖然多數(shù)場(chǎng)景為我們提供了便利,但對(duì)這種場(chǎng)景卻不是很友好。前端發(fā)布通過(guò)配置服務(wù)器的方式獨(dú)立于后端的發(fā)布,兩次發(fā)布會(huì)有短暫的服務(wù)不可用的時(shí)間
          ? ? 實(shí)現(xiàn)不兼容變更的平滑發(fā)布,常見(jiàn)做法是引入版本號(hào),一部分機(jī)器升級(jí)到 v2 版本,/v1/api 和 /v2/api 共存。前端應(yīng)用使用新版本 /v2/api 的接口。在發(fā)布完成之后視情況去掉 v1 版本相關(guān)的代碼。

          灰度發(fā)布的分類

          ? ? 結(jié)合上面灰度發(fā)布的定義和在不做灰度發(fā)布時(shí)的部署方式,對(duì)于怎么做灰度發(fā)布基本能想象它的脈絡(luò)。核心就在于先升級(jí)部分機(jī)器并根據(jù)一定條件把部分用戶引導(dǎo)到新服務(wù)。
          在介紹具體做法前,先整體的分一下類:從灰度的方式劃分,可以分為物理灰度邏輯灰度。從灰度的范圍又可以分為功能級(jí)別灰度和應(yīng)用級(jí)別灰度。

          從灰度方式劃分

          ? ? 物理灰度做法比較簡(jiǎn)單,其實(shí)就是根據(jù)機(jī)器維度進(jìn)行灰度。和上文提到的直接部署一樣,機(jī)器部署應(yīng)用之后,流量均勻的打到新老版本上。好處是這種方式很簡(jiǎn)單,不需要做額外的事情。缺點(diǎn)上面也提到了,對(duì)于不兼容的變更不適用

          邏輯灰度相比物理灰度,變化的點(diǎn)只有把均勻的流量變成根據(jù)一定邏輯切換流量。

          ? ? 邏輯灰度可以更精確的控制流量,如果出現(xiàn)問(wèn)題,回滾也方便,流量切走就是了。對(duì)于有訴求要做更進(jìn)一步的AB測(cè)試同學(xué),更是必須要做的事。但這種方式在灰度結(jié)束之后,往往需要清除灰度相關(guān)的代碼

          if(灰度條件成立){
            灰度服務(wù) 
          }else{
            穩(wěn)定服務(wù)
          }

          ? ? 如果灰度的服務(wù)涉及到多個(gè)功能點(diǎn),類似的if else就會(huì)多了起來(lái)。如果灰度的條件要處理一些用戶信息,代碼會(huì)更多(比如對(duì)某人群進(jìn)行灰度,會(huì)額外增加人群判斷的邏輯)。在結(jié)束之后刪除這些代碼并發(fā)布也是一件麻煩事,如果留到下次需求再去掉,人的惰性,不求有功但求無(wú)過(guò)的心理,維護(hù)人員調(diào)整等等原因都可能會(huì)增加項(xiàng)目維護(hù)的難度。為了緩解這個(gè)問(wèn)題,我們可以把灰度的邏輯單獨(dú)抽出來(lái):

          這樣一來(lái),灰度結(jié)束的時(shí)候就只用刪掉 if else 而沒(méi)有灰度的邏輯。
          ? ? 還有另一種更加棘手的情況。在灰度的過(guò)程中,有另一個(gè) feature 需要發(fā)布的話怎么處理,是趕緊結(jié)束上一個(gè)的灰度,全量發(fā)布還是一起發(fā)上去同時(shí)灰度?feature 還好處理,如果出現(xiàn)了線上問(wèn)題,急需 hotfix 呢。這些都是需要思考的問(wèn)題

          從灰度范圍劃分

          ? ? 功能級(jí)別的灰度很好理解,就是對(duì)單個(gè)功能進(jìn)行灰度。和上面提到的方式一致。可能遇到的麻煩點(diǎn)也是可能存在多個(gè)功能同時(shí)需要灰度,并且灰度標(biāo)簽不一致。通過(guò)提取灰度條件SDK 的方式可以緩解

          ? ? 應(yīng)用級(jí)別的灰度服務(wù)端可以通過(guò) v1,v2這種版本號(hào)標(biāo)識(shí)即可。前端會(huì)相對(duì)特殊,因?yàn)榍岸耸且蕾囉诜?wù)端的,雖然同時(shí)存在多個(gè)前端版本很容易(無(wú)非是多個(gè)CDN版本共存)。但出于同一次發(fā)布和同一次灰度關(guān)聯(lián),"今日事今日畢" 的原則,在發(fā)布流程上前端會(huì)多一個(gè) betaVersion 版本,區(qū)別于正式的 version 版本。先發(fā)布 betaVersion,并切流驗(yàn)證,驗(yàn)證無(wú)誤之后發(fā)布正式版本,切流完成。

          總結(jié)

          ? ? 講了這么多,相信大家對(duì)于灰度發(fā)布怎么做已經(jīng)很清晰了。我們?cè)僮詈罂偨Y(jié)一下,灰度的流程大概可以分為:
          制定灰度策略 -> 篩選用戶 -> 部署系統(tǒng) -> 觀察灰度情況 -> 增大/降低灰度比例 -> 灰度結(jié)束 -> 刪除灰度代碼


          灰度發(fā)布有諸多好處,但也不是沒(méi)有成本。但如果我們能夠因地制宜的選擇灰度發(fā)布的方式,可以充分享受灰度的好處而將成本降到最低

          參考文章:

          常見(jiàn)應(yīng)用發(fā)布方式淺析:http://www.yunxiaobai.net/archives/997

          灰度發(fā)布:灰度很簡(jiǎn)單,發(fā)布很復(fù)雜:http://www.woshipm.com/pmd/573429.html

          最后

          面試交流群持續(xù)開(kāi)放,分享了近 許多 個(gè)面經(jīng)。
          加我微信: DayDay2021,備注面試,拉你進(jìn)群。

          我是 TianTian,我們下篇見(jiàn)~

          如何使用GPU改善JavaScript性能

          2021-05-28

          編譯的速度與激情:從10mins到1s

          2021-05-26

          使用React 360創(chuàng)建虛擬現(xiàn)實(shí)體驗(yàn)

          2021-05-24


          在看點(diǎn)這里
          瀏覽 69
          點(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>
                  天天干天天操天天干天天操天天干 | 日韩黄色无码视频 | 午夜视频在线播放 | 亚洲最大免费在线观看视频 | 在线日本视频 |