設置用戶標識策略
用于區(qū)分用戶,輔助數據統(tǒng)計淹朋,保證灰度發(fā)布過程中用戶體驗的連貫性(避免用戶在新舊版本中跳變笙各,匿名Web應用比較容易有這個問題)钉答。匿名Web應用可采用IP、Cookie等杈抢,需登錄的應用可直接采用應用的帳號體系数尿。
目標用戶選取策略
即選取哪些用戶先行體驗新版本,是強制升級還是讓用戶自主選擇等惶楼∮冶模可考慮的因素很多,包括但不限于地理位置歼捐、用戶終端特性(如分辨率何陆、性能)、用戶自身特點(性別豹储、年齡贷盲、忠誠度等)。對于細微修改(如文案剥扣、少量控件位置調整)可直接強制升級巩剖,對于類似新浪微博改版這樣的大型升級,應讓用戶自主選擇钠怯,最好能夠提供讓用戶自主回滾至舊版本的渠道佳魔。對于客戶端應用,可以考慮類似Chrome的多channel升級策略晦炊,讓用戶自主選擇采用stable鞠鲜、beta、unstable channel的版本断国。在用戶有明確預期的情況下自行承擔試用風險贤姆。
提供數據反饋入口
用戶數據反饋:在得到用戶允許的前提下,收集用戶的使用新版本應用的情況并思。如客戶端性能庐氮、客戶端穩(wěn)定性、使用次數宋彼、使用頻率等弄砍。用于與舊版本進行對比,決策后續(xù)是繼續(xù)擴大新版本投放范圍還是回滾输涕。服務端數據反饋:新版本服務端性能音婶、服務端穩(wěn)定性等,作用與用戶數據反饋類似莱坎。
新版本回滾策略
當新版本灰度發(fā)布表現不佳時衣式,應回滾至舊版本。對于純粹的Web應用而言,回滾相對簡單碴卧。主要難點在于用戶數據的無縫切換弱卡。對于客戶端應用,如果期待用戶自行卸載新版本另行安裝舊版本住册,成本和流失率都太高婶博。可以考慮通過快速另行發(fā)布新版本荧飞,利用升級來“回滾”凡人,覆蓋上次灰度發(fā)布的修改。對于移動客戶端叹阔,新版本發(fā)布成本較高挠轴,需要Appstore、Market審核耳幢。盡量將客戶端打造成Web App岸晦,會更有利于升級和回滾。
后端服務一般都會在負載均衡層(nginx)做灰度方案等睛藻,業(yè)界成熟的方案大多為:
1. 簡單灰度邏輯通過 nginx 配置做規(guī)則判斷(路由委煤、參數、ip等)然后動態(tài)分配接口流量切換至a/b服務修档。
2. 復雜灰度邏輯通過 nginx+lua 結合自己業(yè)務來做流量的灰度、切換等府框。
前端靜態(tài)資源要做到灰度或 A/B 測試的效果吱窝,幾種方案為:
1. JS 代碼中做埋點判斷,通過對用戶特征(UA迫靖、cookie院峡、或后端提供字段等)的判斷顯示為不同功能等。
2. 服務端動態(tài)渲染系宜,在服務端通過特征規(guī)則判斷顯示不同分支版本或功能照激。
3. 控制入口文件,使用 nginx 判斷變量盹牧,動態(tài)分配接口流量切換至a/b服務俩垃,靜態(tài)文件將流量切換至a/b路徑或主機。
方案1汰寓,對業(yè)務的入侵性大口柳,灰度規(guī)則與代碼耦合,增加了文件的大小有滑。
方案2跃闹,因為控制了渲染入口,能做的很多,但也增加了服務端渲染的復雜度望艺,使用場景有限苛秕。
方案3,前端入口一般都是一個 html 文件找默,后再去加載各種靜態(tài)資源艇劫,通過對入口文件的控制,結合 nginx 方案可以做到很好的灰度和 A/B 測試方案啡莉。
基于nginx的灰度發(fā)布方案
一般有三種方式:nginx + lua港准,nginx 根據cookie分流,nginx 根據來源IP分流
客戶端可根據變量動態(tài)設置 cookie咧欣,然后 nginx 判斷 cookie 值來分流浅缸。如根據 cookie 鍵為 version 的值為 V1 則轉發(fā)到 hilinux_01