前景
近期使用了k8s,目的主要是為了配置灰度環境,其次是降低服務器運維成本,下面簡單介紹下灰度的策略
解決方案
1、接口以及網頁,最簡單粗暴的方法就是直接請求灰度相關的域名
2、在不更換接口域名的前提下,在請求原有生產環境的接口上帶上一個灰度的標記,例如Cookie,通過k8s的路由機制,對請求的數據進行處理,如果遇到帶有灰度標記的Cookie,就把這個請求轉發到灰度的k8s服務里面
3、在不更換網頁域名的前提下,在正常網頁里面,每當用戶刷新或者打開網頁的時候,先判斷此用戶是否在灰度環境中,若在灰度環境中,強制加上灰度的標志(即Cookie),然后借由網頁的機制進行301重定向,接着重復第2步的流程
4、定時任務處理的時候加上用戶灰度環境的判斷,只對當前環境的數據進行處理
5、消息隊列,在發送消息隊列的時候也需要對灰度環境進行判斷,若是灰度環境的消息,則發送到灰度的隊列里面,處理消息也同理
6、Mysql的binlog日志處理,由於灰度環境跟生產環境是公用一個數據庫,此時這個日志信息處理只能跑一個,不能灰度跟生產環境同時跑,可以在代碼中加上一個版本號,只有當灰度環境的版本號大於生產環境的,才在灰度環境中開啟進程處理binlog日志
7、app升級(這里只討論安卓版本的app,iOS比較復雜這里不展開討論),app端請求版本接口的時候無需帶上Cookie,只需要帶上用戶的ID,接口這邊判斷用戶是否在灰度環境中,是的話則返回灰度環境下最新的版本號
8、小程序升級,由於小程序升級是在網頁段進行升級的,這里類似第3點,判斷用戶是否在灰度環境中,是的話用灰度環境的小程序模板ID等信息提交小程序審核
9、做一套可以隨時將用戶拉入以及剔除灰度名單的功能(可結合redis處理)
小結
其實灰度環境的好處挺多的,其中最明顯的就是觀察用戶反饋,即時調整產品的方向,避免因為直接上線導致用戶一時半會兒適應不了新系統,導致用戶流失。此外還有助於降低上線的成本,如人力成本(一般大版本上線是深更半夜,開發比較疲憊)、降低bug數量等,如果發現灰度環境的問題,可以及時把用戶剔除灰度名單,盡可能減少用戶的損失