如何進行灰度發(fā)布,考慮啥

灰度發(fā)布的定義:

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

灰度發(fā)布結(jié)構(gòu)圖如下:


灰度發(fā)布/金絲雀發(fā)布由以下幾個步驟組成:

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

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

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

對應(yīng)用進行自動化測試。

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

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

除此之外灰度發(fā)布還可以設(shè)置路由權(quán)重,動態(tài)調(diào)整不同的權(quán)重來進行新老版本的驗證。


灰度發(fā)布涉及到的專有名詞解釋:

灰度期:灰度發(fā)布開始到結(jié)束期間的這一段時間,稱為灰度期。

灰度發(fā)布引擎:對于一般的小系統(tǒng)并不需要單獨的灰度發(fā)布引擎,可以參考A/B測試中做法,在頁面javascript或服務(wù)器端實現(xiàn)分流的規(guī)則即可。但對于大型的互聯(lián)網(wǎng)應(yīng)用而言,單獨的用于管理用戶分流的發(fā)布引擎就很有必要了。

用戶標(biāo)識:用于區(qū)分用戶,輔助數(shù)據(jù)統(tǒng)計,保證灰度發(fā)布過程中用戶體驗的連貫性(避免用戶在新舊版本中跳變,匿名Web應(yīng)用比較容易有這個問題)。匿名Web應(yīng)用可采用IP、Cookie等,需登錄的應(yīng)用可直接采用應(yīng)用的帳號體系。

目標(biāo)用戶選取策略:即選取哪些用戶先行體驗新版本,是強制升級還是讓用戶自主選擇等。強制升級可考慮的因素很多,包括但不限于地理位置、用戶終端特性、用戶自身特點等。用戶自主選擇,讓用戶自主選擇采用stable、beta、unstable channel的版本。在用戶有明確預(yù)期的情況下自行承擔(dān)試用風(fēng)險。

數(shù)據(jù)反饋:用戶數(shù)據(jù)反饋:在得到用戶允許的前提下,收集用戶的使用新版本應(yīng)用的情況。如客戶端性能、客戶端穩(wěn)定性、使用次數(shù)、使用頻率等。用于與舊版本進行對比,決策后續(xù)是繼續(xù)擴大新版本投放范圍還是回滾。服務(wù)端數(shù)據(jù)反饋:新版本服務(wù)端性能、服務(wù)端穩(wěn)定性等,作用與用戶數(shù)據(jù)反饋類似。

新版本公關(guān)運營支持:對于改版級別的大型升級,需要配合公關(guān)運營支持,用于及時處理用戶在微博、博客等渠道給出的“顯式反饋”。對比通過隱式數(shù)據(jù)反饋得到的結(jié)論后,綜合考慮應(yīng)對策略。


實現(xiàn)灰度發(fā)布的兩種技術(shù)方式:

一、在代碼中做。一套線上環(huán)境,代碼中做開關(guān),對于不同的用戶走不同的邏輯

二、在接入層做。多套(隔離的)線上環(huán)境,接入層針對不同用戶轉(zhuǎn)發(fā)到不同的環(huán)境中

接入層采用nginx,可以基于IP或cookie的方式進行分流,由于我們是商業(yè)ERP系統(tǒng),有用戶登錄的邏輯,自然選擇基于cookie的策略。

就基于cookie的分流策略而言,又有兩種實現(xiàn)方案

nginx維護Cookie名單文件,每來一個請求看Cookie是否在名單中,做不同的轉(zhuǎn)發(fā)

nginx不維護Cookie名單文件,根據(jù)Cookie的特征進行轉(zhuǎn)發(fā)

第一種方案的缺點顯而易見,每次請求判斷是否是灰度用戶時間復(fù)雜度為O(N);且變更名單,需要操作接入層服務(wù)。第二種方案具體的實現(xiàn)策略:

1 業(yè)務(wù)中維護白名單文件(存放在數(shù)據(jù)庫中)

2 在登陸時,如果用戶在名單中則給用set特定標(biāo)識的Cookie;退出或Session過期后Cookie失效

3 nginx匹配特定Cookie,做轉(zhuǎn)發(fā)

這樣,調(diào)整灰度的范圍,只需要操作數(shù)據(jù)庫即可,無需重啟服務(wù)。


灰度發(fā)布的企業(yè)實際案例:

淘寶網(wǎng)灰度發(fā)布(轉(zhuǎn)載):

從產(chǎn)品經(jīng)理的角度來看:淘寶的發(fā)布流程一般是這樣的,首先產(chǎn)品經(jīng)理說服老板、老板的老板、開發(fā)Leader、開發(fā)成員、測試、設(shè)計師、BI等等我們要做的這個產(chǎn)品是牛逼而且有價值的。然后確認(rèn)改版的設(shè)計并完成開發(fā)。開發(fā)后的版本會在內(nèi)部工程用的服務(wù)器上(需要指向特定 URL)可以看到,然后是時間1周~2個月的測試,測試完成驗收達(dá)到設(shè)計目標(biāo)和發(fā)布標(biāo)準(zhǔn)后,會進行內(nèi)部發(fā)布。內(nèi)部發(fā)布后的版本,阿里巴巴內(nèi)網(wǎng)上淘寶看到的就都是新版本了,這叫做“小淘寶”發(fā)布。這個階段可能持續(xù)1天~1個月,內(nèi)部員工會看到新的頁面并吐槽或發(fā)現(xiàn)bug并提交修改。

然后根據(jù)產(chǎn)品的不同,會有一個逐步上線切換的過程,比如先切5%全網(wǎng)流量,這個時候可以收集到真實的用戶數(shù)據(jù)了,這個階段性相當(dāng)于AB test,通過AB我們知道產(chǎn)品的表現(xiàn)是否達(dá)到了設(shè)計時吹的牛逼。如果牛逼能夠圓上,并且沒有出bug,那么就會逐步加碼流量直到50%-100%。淘寶有非常完善的工具鏈可以讓產(chǎn)品經(jīng)理實時地看到不同版本bucket下的PV UV 引導(dǎo)成交等指標(biāo)性數(shù)據(jù)。

不同產(chǎn)品的AB控制是不同的,有的是在web服務(wù)器層,有的是接口層,算法產(chǎn)品則更有非常完善自動化的工具鏈,可以做到新的算法開發(fā)通過驗收后瞬間發(fā)布并進行灰度?;叶葦?shù)值填寫后瞬間生效瞬間看到數(shù)據(jù)。一天多的情況下可以進行多達(dá)10輪AB test并且支持超過10個算法同時跑在線上賽馬看哪個稍微不傻逼一點。

總結(jié)下來,發(fā)布流程是這樣的:

產(chǎn)品需求收集和確定-->技術(shù)方案出具和分工協(xié)調(diào)-->開發(fā)編碼-->內(nèi)部服務(wù)器環(huán)境的測試+聯(lián)調(diào)(又名預(yù)發(fā)布環(huán)境)-->小淘寶環(huán)境發(fā)布,內(nèi)部員工噴噴噴-->小流量(具體有多小取決于業(yè)務(wù)影響面)公網(wǎng)測試-->收集數(shù)據(jù)寫反饋-->全量上線。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評論 19 139
  • 在項目迭代的過程中,不可避免需要”上線“。上線對應(yīng)著部署,或者重新部署;部署對應(yīng)著修改;修改則意味著風(fēng)險。 目前有...
    小程故事多閱讀 72,060評論 5 131
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,027評論 25 709
  • 我以為自己一生走遍很多地方,結(jié)交了不少朋友,所以以后到每一個地方,都會收到有朋自遠(yuǎn)方來不亦樂乎的歡迎。 但是,今天...
    154d736abd3e閱讀 216評論 1 0
  • 每天隨手拍,留住瞬間的美好~加倍美好!我們來啦! 本周主持——邊走邊忘本周主題——【窗外】 1、水若——路邊的美~...
    水若_小水囈夢閱讀 281評論 0 4

友情鏈接更多精彩內(nèi)容