什麽是灰度發布,以及灰度發布A/B測試
為了解決這些問題,人們研究出了多種發布策略,下面我們一一介紹。
藍綠部署
所謂藍綠部署,是指同時運行兩個版本的應用,如上圖所示,藍綠部署的時候,並不停止掉老版本,而是直接部署一套新版本,等新版本運行起來後,再將流量切換到新版本上。但是藍綠部署要求在升級過程中,同時運行兩套程序,對硬件的要求就是日常所需的二倍,比如日常運行時,需要10臺服務器支撐業務,那麽使用藍綠部署,你就需要購置二十臺服務器。
滾動發布
滾動發布能夠解決掉藍綠部署時對硬件要求增倍的問題。
所謂滾動升級,就是在升級過程中,並不一下子啟動所有新版本,是先啟動一臺新版本,再停止一臺老版本,然後再啟動一臺新版本,再停止一臺老版本,直到升級完成,這樣的話,如果日常需要10臺服務器,那麽升級過程中也就只需要11臺就行了。
但是滾動升級有一個問題,在開始滾動升級後,流量會直接流向已經啟動起來的新版本,但是這個時候,新版本是不一定可用的,比如需要進一步的測試才能確認。那麽在滾動升級期間,整個系統就處於非常不穩定的狀態,如果發現了問題,也比較難以確定是新版本還是老版本造成的問題。
為了解決這個問題,我們需要為滾動升級實現流量控制能力。
灰度發布
灰度發布也叫金絲雀發布,起源是,礦井工人發現,金絲雀對瓦斯氣體很敏感,礦工會在下井之前,先放一只金絲雀到井中,如果金絲雀不叫了,就代表瓦斯濃度高。
在灰度發布開始後,先啟動一個新版本應用,但是並不直接將流量切過來,而是測試人員對新版本進行線上測試,啟動的這個新版本應用,就是我們的金絲雀。如果沒有問題,那麽可以將少量的用戶流量導入到新版本上,然後再對新版本做運行狀態觀察,收集各種運行時數據,如果此時對新舊版本做各種數據對比,就是所謂的A/B測試。
當確認新版本運行良好後,再逐步將更多的流量導入到新版本上,在此期間,還可以不斷地調整新舊兩個版本的運行的服務器副本數量,以使得新版本能夠承受越來越大的流量壓力。直到將100%的流量都切換到新版本上,最後關閉剩下的老版本服務,完成灰度發布。
如果在灰度發布過程中(灰度期)發現了新版本有問題,就應該立即將流量切回老版本上,這樣,就會將負面影響控制在最小範圍內。
使用脈沖雲輕松地實現灰度發布
脈沖雲的部署管理可以輕松實現上述的帶有流量管理功能的灰度發布。正常編輯應用信息後點擊保存,然後脈沖雲會提示直接升級或灰度發布。
直接升級就是使用一般的滾動升級,點擊灰度發布後可以人工幹預升級過程,進行流量控制。
選擇灰度發布後,就會呈現灰度發布控制面板。
在這個控制面板上,可以拖拉滑塊,快速調整新舊版本的運行副本數量,同時也可以按百分比,將流量導入到新版本上。此外,還可以通過匹配HTTP Header,指定個別用戶的流量到新版本上。
除了匹配用戶流量的HTTP請求頭,還可以直接指定匹配請求頭中的Cookie信息,匹配規則支持精確匹配、包含、正則、前綴、後綴等,甚至還允許反向匹配。
當確認新版本運行無誤後,就可以點擊 完成升級 按鈕,就會將流量全部切換到新版本上,並且銷毀掉所有老版本應用。如果新版本出了問題,可以點擊 取消升級 按鈕,立即將流量切回老版本,並銷毀掉新版本應用。
總結
在新版本應用發布時,為了服務器不停機升級,使用灰度發布策略,在灰度發布開始時,使用HTTP Header 匹配指定測試人員的流量到新版本上,然後當新版本內部測試通過後,可以再按百分比,將用戶流量一點一點導入到新版本中,比如先導入10%觀察一下運行情況,然後再導入20%,如此累加,直到將流量全部導入到新版本上,最後完成升級,如果期間發現問題,就立即取消升級,將流量切回到老版本。
運用灰度發布,就再也不需要加班到深夜進行停機升級了,在白天就可以放心大膽地、安全地發布新版本。
參考DevOps平臺:脈沖雲開發平臺
什麽是灰度發布,以及灰度發布A/B測試