灰度發布也叫 A/B 測試,原理是一套系統在實現了負載均衡,全國節點都部署了系統之后,可以在新功能上線后,讓一小部分用戶先使用,從中收集使用信息來做對比和發現bug,及時調整,最終分發到全國的節點。
實現灰度發布的幾個思路:
1、以nginx為例的分流,IP是最終的關鍵,從而以IP圍繞中心,可以衍生出很多定義,比如用戶標識、用戶分組、設備ID及分組等,但是最終還是離不開IP去分流。
2、nginx支持模塊開發,如果在一套成熟的系統中,可以開發自己的模塊,從而脫離IP為分流導向,指定自己的精確分流的導向,比如設備ID這樣更小顆粒度的定向風流。
3、nginx支持一些lua腳本的配置,比如lua更新nginx的配置,可以通過熱重啟重新加載lua腳本配置,但是現在我發現還有一種更簡單的方法,就是nginx本身的配置文件,針對特定的IP分流配置,可以通過熱重啟nginx(也叫重新加載nginx的配置文件)來進行重新加載。
4、要實現灰度發布,還有一種非常重要的點,就是日志的收集,針對負載均衡的系統,由於節點很多,日志的收集非常重要,所以需要一套統一的日志平台進行收集和分析平台。
實現的具體方式:
在github上,我發現了在發布時,通過修改配置文件的形式,讓nginx進行熱重啟重新加載配置文件的方式去實現;比如實現一套管理nginx的配置系統,再結合配置系統開發自己特定的業務發布平台,然后生成的配置文件上傳到nginx上,最終重新讓nginx加載新配置文件。
下面是我收集的一些鏈接,可以作為參考:
https://github.com/CNSRE/ABTestingGateway
https://github.com/boylegu/regal
https://github.com/Web4Nginx/Web4Nginx
https://github.com/pbchen/versionSwitchTool
https://github.com/zenxds/grey
https://github.com/songweihang/knight
https://github.com/xausky/ngx_http_dyabt_module
在github上搜索的關鍵字:灰度部署,灰度發布,AB TEST
現在這里做個思路研究記號,后續再實現。
