你還在生產環境改程式碼麼?函式計算版本管理(三)使用別名進行灰度釋出

ylxn發表於2018-12-17

通過了解阿里雲函式計算新功能版本管理在事件驅動模式中的使用,我們看到了別名是如何簡化新版本上線的過程的。然而現實是殘酷的,直接更改別名指向的版本來升級服務時,往往會出現新版本引入帶來的不穩定,有沒有更好的方法呢?別名的灰度釋出功能該登場了。函式計算提供的別名,可以指向一個主版本和一個灰度版本,並指定灰度版本的權重。這樣就可以靈活調整兩個版本間的流量分佈,很大限度地減少上線新版本引起的不穩定。

dark launch

如上圖所示,假設我們已經有別名Prod指向穩定的版本1,此時版本2也已經發布好準備上線。我們可以採用灰度釋出的方式,更改Prod別名將灰度版本設定為2,灰度百分比設定為5%。更新後Prod指向的主版本仍然為版本1,函式計算會轉移5%的流量到版本2,剩餘95%的流量仍然由版本1來服務。當確定版本2穩定執行後,再更新別名Prod的主版本為版本2,從而完全切換到新版本。

 

當別名的灰度釋出功能被使用時,您可以通過以下三種方式來確定被呼叫的服務版本:

  1. 如果您為自己的服務配置了日誌服務,每次函式呼叫,都可以檢視到相關日誌。日誌中的“isDarkLaunch”欄位表示此次呼叫命中的是灰度釋出的版本,“externalServiceVersion”欄位表示此次呼叫使用的具體服務版本。
  2. 每次函式呼叫,Context物件的Service資訊中會包括版本資訊,其中 “qualifier”欄位表示呼叫函式時傳入的版本資訊,“versionId”表示根據qualifier解析出的具體版本號。

  3. 每次同步函式呼叫,響應中都包含 “x-fc-invocation-service-version” header以指示呼叫的服務版本。

通過別名的灰度釋出功能,流量可以在不同的版本間輕鬆切換,讓新版本的上線更安全!總結一下:

  1. 使用別名Prod指向穩定的版本1,線上的呼叫都通過別名來進行。
  2. 當新版本2準備上線時,將Prod的灰度版本設為版本2,權重從5%開始。
  3. 觀察版本2線上上表現穩定後,更新別名Prod指向版本2。

版本管理功能文件:


相關文章