什么是灰度發布 大廠常用的3種灰度發布方案解析?


什么是灰度發布 大廠常用的3種灰度發布方案解析?

文章插圖
【什么是灰度發布 大廠常用的3種灰度發布方案解析?】什么是灰度發布?百度百科的解釋是這樣的:
從上述可以看出,灰度發布的作用有以下幾點:
  1. 降低發布帶來的影響,雖然功能都在測試環境測過,但畢竟沒有發布到生產環境,如果先讓少部分用戶先使用新版本,提前發現bug,或者性能問題,提前做好修復,就可以降低新版本帶來的影響;
  2. 通過對新老版本的對比,觀察新版本帶來的效果 。
結合工作中使用到的灰度發布實踐和對其他大廠的灰度發布調研,總結了以下灰度發布方案 。
一、灰度發布的劃分灰度發布如果按照端來分的話,可以分為web前端、客戶端、服務端灰度 。
無論是哪種灰度,一般需要滿足以下2點要求:
  1. 需要一個放量配置,給產品/運營等工作人員配置放量策略;
  2. 需要做到同一個用戶始終訪問的是同一個版本的代碼,如果同個用戶上個請求訪問的是A版本,下個請求訪問的是B版本,就可能會出問題 。
1. web前端灰度假設我們的前端資源存放在CDN上面:我們每次發布一個新版本,就把資源增量式地上傳到CDN,然后給它分配一個唯一的版本號,再把所有的版本號存儲起來 。當處理請求時,根據動態配置的分流策略來決定用戶使用哪個版本 。
比如分流策略是放量10%,即新版本隨機放量給10%的用戶使用,當用戶首次命中資源版本號時,需要把用戶id和版本號的映射關系存儲起來(可存到cookie),這樣就能保證同個用戶上次請求和下次請求訪問到的都是同個版本的代碼 。
那如果線上有緊急bug需要修復,又要重新發布新版本,該如何處理當前灰度的狀態?是趕緊結束上一個灰度然后全量發布還是一起發上去同時灰度?一般來說,再有新版本發布或者放量策略發生變化時,應該重新分流灰度 。
2. 服務端灰度服務端灰度分為兼容變更灰度和不兼容變更灰度 。
1)兼容變更
兼容變更又可分為物理灰度和邏輯灰度 。
  • 物理灰度:物理灰度比較簡單,根據機器維度進行灰度,直接部署新老版本在不同機器,流量均勻地打在新老版本上面 。這種方式雖然簡單,但不適用于不兼容變更;
  • 邏輯灰度:邏輯灰度就是根據更精確的流量策略來控制流量,這種灰度一般要寫一定的灰度代碼 。這種方式能比較精確地控制流量,但是增加了一定的灰度代碼,灰度完成后要刪除相關灰度代碼,有點麻煩 。
2)不兼容變更
不兼容變更指的是更改了當前功能,即接口邏輯跟之前版本發生很大變化,必須要前后端同時發布,否則會有一段時間服務不可用 。
一般的做法是引入接口版本號,新老版本接口并存,比如 /v1/api 和 /v2/api 。前端使用/v2/api版本,當過去一段穩定期后(可以是登錄態時間失效后),就可下掉/v1/api版本 。
3. 客戶端灰度web前端和服務端灰度發布可以在客戶無感知的情況下平滑進行,遇到問題也可以快速回滾,但是移動客戶端涉及到用戶的主動安裝行為,所以上述的方式已經不適用 。
如果一個帶有bug的安裝包全量發布出去,一旦有問題,我們只能快速定位問題來提醒用戶安裝新版本,是否安裝取決于用戶,所以客戶端灰度發布是非常有必要的 。
客戶端在啟動時,會向灰度系統發起請求,灰度系統根據客戶端傳過來的參數和當前的放量策略來決定是否要給客戶端升級提醒 。一般會根據以下幾種策略來決定給予用戶升級提醒:
  1. 根據用戶設備的系統和應用版本;
  2. 根據渠道:發布到不同應用市場的app都會被打上渠道標簽,所以可以根據渠道來區分用戶;
  3. 根據設備ID和用戶ID 。
通過設備ID主要是為了控制提醒頻率,用戶ID主要是為了區分出特性用戶,比如對活躍用戶發送提醒 。
二、灰度放量策略流量策略一般分為以下幾種:
1. 按流量百分比先到先得的方式比如限制10%的用戶體驗的是新版本,90%的用戶體驗的是老版本 。先訪問網站的用戶就優先命中新版本,直到流量用完為止 。
2. 按人群劃分
  1. 按用戶id、用戶ip、設備類型比如可通過平時的埋點上報數據得知用戶的pv、uv、頁面平均訪問時長等數據,根據用戶活躍度來讓用戶優先體驗新版本,進而快速觀察使用效果 。
  2. 按地域、性別、年齡等用戶畫像比如可通過用戶的性別、年齡等做下新老版本的對比效果來看看目標用戶在新版本的使用年齡段,性別范圍是多少 。

    推薦閱讀