概述
灰階釋出(又名金絲雀釋出)是指在黑與白之間,能夠平滑過渡的一種釋出方式。
- 可以進行A/B testing,即讓一部分使用者繼續用産品特性A,一部分使用者開始用産品特性B,如果使用者對B沒有什麼反對意見,那麼逐漸擴大範圍,把所有使用者都遷移到B上面來。
- 降低産品更新所影響的使用者範圍
在前幾篇的章節寫了spring-cloud-gray的灰階架構介紹,但是為了做一下對比,我們對Discovery有進行了詳細的調研,git位址:https://github.com/Nepxion/Discovery,
此架構對Spring Cloud & Spring Cloud Alibaba,Discovery服務注冊發現、Ribbon負載均衡、Feign和 RestTemplate調用、Spring Cloud Gateway和Zuul過濾等元件進行了全方位增強的開源解決方案,更貼近企業級需求,更具有企業級的插件引入、開箱即用特征。
原理圖
因為他是通過配置中心下發灰階配置,是以不需要額外引入控制台,隻需要在應用的業務配置中增加灰階配置即可。
概念說明
藍綠釋出
藍綠釋出 Blue-Green Deployment
- 概念
- 不停機舊版本,部署新版本,通過使用者标記将流量在新版本和老版本切換,屬無損釋出
- 優點
- 新版本更新和老版本復原迅速。使用者可以靈活控制流量走向
- 缺點
- 成本較高,需要部署兩套環境(藍/綠)。新版本出現問題,切換不及時,會造成部分故障
灰階釋出
灰階釋出 Gray Release(又名金絲雀釋出 Canary Release)
- 概念
- 不停機舊版本,部署新版本,低比例流量(例如:5%)切換到新版本,高比例流量(例如:95%)走舊版本,通過監控觀察無問題, 逐漸擴大範圍,最終把所有流量都遷移到新版本上,下線舊版本。屬無損釋出
- 優點
- 靈活簡單,不需要使用者标記驅動。安全性高,新版本如果出現問題,隻會發生在低比例的流量上
- 缺點
- 流量配比遞增的配置修改,帶來額外的操作成本。使用者覆寫狹窄,低比例流量未必能發現所有問題
滾動釋出
- 概念
- 每次隻更新一個或多個服務,更新完成監控觀察,不斷執行這個過程,直到叢集中的全部舊版本更新到新版本。停止舊版本的過程 中,無法精确計算舊版本是否已經完成它正在執行的工作,需要靠業務自身去判斷。屬有損釋出
- 優點
- 出現問題影響範圍很小,隻會發生在若幹台正在滾動釋出的服務上
- 缺點
- 釋出和復原需要較長的時間周期。按批次停止舊版本,啟動新版本,由于舊版本不保留,一旦全部更新完畢後才發現問題,則無法快速復原,必須重新降級部署
-
實施圖
-
全鍊路域網關并行藍綠灰階釋出
-
使用場景,圖中文字描述很清楚
-
全鍊路非域網關并行藍綠灰階釋出
使用場景,圖中文字描述很清楚
-
全鍊路全局訂閱下并行藍綠灰階釋出
使用場景,圖中文字描述很清楚
-
性能測試報告
- 準備兩台機器部署Spring Cloud應用
- 準備一台機器部署網關(Spring Cloud或者Zuul)
- 準備一台機器部署壓測工具
服務 配置 數目 Spring cloud gateway 16c 32G 1 Zuul 1.x 16c 32G 1 Service 4c 8G 2 - 優化方式
- Spring Cloud Gateway,不需要優化
- Zuul 1.x,優化如下:
zuul.host.max-per-route-connections=1000 zuul.host.max-total-connections=1000 zuul.semaphore.max-semaphores=5000
- 基于WRK極限壓測,報告如下
壓測報告可見對應用資源效果基本在0.3%到0.5%之間,可以忽略不計。
官方文檔寫的非常詳細讀者可以參考官方文檔。