灰度發布


一、灰度概念

  灰度發布(又名金絲雀發布)是指在黑與白之間,能夠平滑過渡的一種發布方式。在其上可以進行A/B testing,即讓一部分用戶繼續用產品特性A,一部分用戶開始用產品特性B,如果用戶對B沒有什么反對意見,那么逐步擴大范圍,把所有用戶都遷移到B上面來。灰度發布可以保證整體系統的穩定,在初始灰度的時候就可以發現、調整問題,以保證其影響度(概念from百度百科)

二、基本框架和思路

  客戶端發起請求首先經過ALB(Application Loader Balance),ALB根據分流策略或規則控制引流,從而路由到不同版本的目標服務,基本架構和思路如下圖。

  

三、前台Web灰度實現思路

   前台Web應用的灰度發布實現主流實現為nginx+lua+redis,基本思路為請求經過nginx時,根據用戶請求cookie或請求header中約定key對應的value來匹配redis中事先存放的關鍵字,從而判斷是否轉發到灰度目標前台地址。

  

 

四、Web-Service灰度實現思路

   服務的路由一般根據服務的版本號來區分,所以在做服務路由,或服務上報時,留着版本號和擴展字段是很必要的,經過前台應用往后台服務路由時,可拿經過nginx獲取的userid在redis中過濾,拿到userid對應的服務版本號,該版本號即該用戶即將調用的版本服務。

  

五、全流程灰度

   用戶發起請求,請求中帶上userid,region,env等字段,經過nginx+lua處理時,經過redis過濾是否經過灰度Web,路由至所需Web后,經過redis過濾用戶對應使用的服務版本是哪個,由於服務會上報版本到服務管控中心,所以Web端拿到version后,經過ALB去服務管控拿到對應版本的目標服務地址,從而發起調用,實現了全流程的灰度。其中由於涉及到不同環境區域的Web和Service,可在全流程中貫穿的傳遞userid,region,env等關鍵字段,可選的為應用所屬的appid和subappid。

  

六、消息系統的灰度

  消息的灰度發布實現是比較困難的,因為消息的收發經過消息服務器,沒有中介者可以干預路由,但有一個簡單的思路,即生產者到消費者的過程中,消費者消費完消息,不做具體的業務邏輯,而是將消息通過服務調用的方式,調用不同版本的服務,在不同的服務中去做不同的業務邏輯,從而實現了消息的灰度。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM