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

          項(xiàng)目開發(fā)常說的灰度發(fā)布、藍(lán)綠發(fā)布、滾動(dòng)發(fā)布到底是個(gè)啥?

          共 3273字,需瀏覽 7分鐘

           ·

          2021-12-09 11:35

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

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

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

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

          藍(lán)綠部署中,一共有兩套系統(tǒng):一套是正在提供服務(wù)系統(tǒng)(也就是上面說的舊版),標(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)。

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

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

          藍(lán)色系統(tǒng)經(jīng)過反復(fù)的測試、修改、驗(yàn)證,確定達(dá)到上線標(biāo)準(zhǔn)之后,直接將用戶切換到藍(lán)色系統(tǒng), 切換后的一段時(shí)間內(nèi),依舊是藍(lán)綠兩套系統(tǒng)并存,但是用戶訪問的已經(jīng)是藍(lán)色系統(tǒng)。這段時(shí)間內(nèi)觀察藍(lán)色系統(tǒng)(新系統(tǒng))工作狀態(tài),如果出現(xià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)可以銷毀,將資源釋放出來,用于[部署下一個(gè)藍(lán)色系統(tǒng)。

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

          1. 藍(lán)綠部署的目的是減少發(fā)布時(shí)的中斷時(shí)間能夠快速撤回發(fā)布。
          2. 兩套系統(tǒng)沒有耦合的時(shí)候才能百分百保證不干擾

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

          藍(lán)綠部署只是[上線策略中的一種,它不是可以應(yīng)對(duì)所有情況的萬能方案。藍(lá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ù)庫后端無法處理,會(huì)是一個(gè)比較麻煩的問題;

          • 可能會(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ù)庫與應(yīng)用部署同步遷移 /回滾的問題。
          • 藍(lán)綠部署需要有基礎(chǔ)設(shè)施支持。
          • 在非隔離基礎(chǔ)架構(gòu)( VM 、 Docker 等)上執(zhí)行藍(lán)綠[部署,藍(lán)色環(huán)境和綠色環(huán)境有被摧毀的風(fēng)險(xiǎn)。

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

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

          發(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, 替換下來的物理機(jī)又可以繼續(xù)部署Server2的新版本, 然后去替換正在工作的Server2 , 以此類推, 直到替換完所有的服務(wù)器, 至此 ,服務(wù)更新完成。

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

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

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

          1. 滾動(dòng)發(fā)布沒有一個(gè)確定可行的環(huán)境。使用藍(lán)綠[部署,我們能夠清晰地知道老版本是可行的,而使用滾動(dòng)發(fā)布,我們無法確定。
          2. 修改了現(xiàn)有的環(huán)境。
          3. 回滾困難。舉個(gè)例子,在某一次發(fā)布中,我們需要更新100個(gè)實(shí)例,每次更新10個(gè)實(shí)例,每次部署需要5分鐘。當(dāng)滾動(dòng)發(fā)布到第80個(gè)實(shí)例時(shí),發(fā)現(xiàn)了問題,需要回滾,這個(gè)回滾卻是一個(gè)痛苦,并且漫長的過程。
          4. 有的時(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)。
          5. 因?yàn)槭侵鸩礁?,那么我們在上線代碼的時(shí)候,就會(huì)短暫出現(xiàn)新老版本不一致的情況,如果對(duì)上線要求較高的場景,那么就需要考慮如何做好兼容的問題。

          07、灰度發(fā)布

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

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

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

          過程:

          1. 準(zhǔn)備好部署各個(gè)階段的工件,包括:構(gòu)建工件,測試腳本,配置文件和部署清單文件。
          2. 將“金絲雀”服務(wù)器部署進(jìn)服務(wù)器中, 測試。
          3. 從負(fù)載均衡列表中移除掉“金絲雀”服務(wù)器。
          4. 升級(jí)“金絲雀”應(yīng)用(排掉原有流量并進(jìn)行[部署)。
          5. 對(duì)應(yīng)用進(jìn)行自動(dòng)化測試。
          6. 將“金絲雀”服務(wù)器重新添加到負(fù)載均衡列表中(連通性和健康檢查)。
          7. 如果“金絲雀”在線使用測試成功,升級(jí)剩余的其他服務(wù)器。(否則就回滾)

          08、A/B測試

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

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

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

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

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

          來源 |?https://www.cnblogs.com/Courage129/p/14498788.html
          ············? END? ··············

          也許你還想看
          ??|?官宣!我升級(jí)了!!!
          ? |?我在 B 站淘了 2 個(gè) Java 實(shí)戰(zhàn)項(xiàng)目! 小破站,YYDS!
          ? |?官宣!Mybatis-Plus 官方神器發(fā)布?。?!
          ? |?7年前,24歲,出版了一本 Redis 神書
          ? |?京東二面:為什么需要分布式ID?你項(xiàng)目中是怎么做的?
          ? |?再見 Spring Task,這個(gè)定時(shí)任務(wù)框架真香!
          ? |?一鍵生成數(shù)據(jù)庫文檔,堪稱數(shù)據(jù)庫界的Swagger
          ? |?好家伙!國外小哥也看 Java 八股文?
          ? |?阿里開源的15個(gè)頂級(jí)Java項(xiàng)目!!!

          我是 Guide哥,一個(gè)工作2年有余,接觸編程已經(jīng)6年有余的程序員。大三開源 JavaGuide,目前已經(jīng) 100k+ Star。未來幾年,希望持續(xù)完善 JavaGuide,爭取能夠幫助更多學(xué)習(xí) Java 的小伙伴!共勉!凎!點(diǎn)擊即可了解我的個(gè)人經(jīng)歷。

          簡歷指導(dǎo)/Java 學(xué)習(xí)/面試指導(dǎo)/面試小冊,歡迎加入我的知識(shí)星球(公眾號(hào)后臺(tái)回復(fù)“星球”即可)。

          瀏覽 162
          點(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>
                  啪啪免费网站 | 国产一区二区大鸡巴操女女在线视频91 | 五月天最新网址 | 影音先锋五月天 | 国产福利性爱小视频 |