什麼是灰度發佈,以及灰度發佈A/B測試

在一般情況下,升級服務器端應用,需要將應用源碼或程序包上傳到服務器,然後停止掉老版本服務,再啓動新版本。但是這種簡單的發佈方式存在兩個問題,一方面,在新版本升級過程中,服務是暫時中斷的,另一方面,如果新版本有BUG,升級失敗,回滾起來也非常麻煩,容易造成更長時間的服務不可用。

爲了解決這些問題,人們研究出了多種發佈策略,下面我們一一介紹。

藍綠部署

什麼是灰度發佈,以及灰度發佈A/B測試

所謂藍綠部署,是指同時運行兩個版本的應用,如上圖所示,藍綠部署的時候,並不停止掉老版本,而是直接部署一套新版本,等新版本運行起來後,再將流量切換到新版本上。但是藍綠部署要求在升級過程中,同時運行兩套程序,對硬件的要求就是日常所需的二倍,比如日常運行時,需要10臺服務器支撐業務,那麼使用藍綠部署,你就需要購置二十臺服務器。

滾動發佈

滾動發佈能夠解決掉藍綠部署時對硬件要求增倍的問題。
什麼是灰度發佈,以及灰度發佈A/B測試

所謂滾動升級,就是在升級過程中,並不一下子啓動所有新版本,是先啓動一臺新版本,再停止一臺老版本,然後再啓動一臺新版本,再停止一臺老版本,直到升級完成,這樣的話,如果日常需要10臺服務器,那麼升級過程中也就只需要11臺就行了。

但是滾動升級有一個問題,在開始滾動升級後,流量會直接流向已經啓動起來的新版本,但是這個時候,新版本是不一定可用的,比如需要進一步的測試才能確認。那麼在滾動升級期間,整個系統就處於非常不穩定的狀態,如果發現了問題,也比較難以確定是新版本還是老版本造成的問題。

爲了解決這個問題,我們需要爲滾動升級實現流量控制能力。

灰度發佈

灰度發佈也叫金絲雀發佈,起源是,礦井工人發現,金絲雀對瓦斯氣體很敏感,礦工會在下井之前,先放一隻金絲雀到井中,如果金絲雀不叫了,就代表瓦斯濃度高。
什麼是灰度發佈,以及灰度發佈A/B測試

在灰度發佈開始後,先啓動一個新版本應用,但是並不直接將流量切過來,而是測試人員對新版本進行線上測試,啓動的這個新版本應用,就是我們的金絲雀。如果沒有問題,那麼可以將少量的用戶流量導入到新版本上,然後再對新版本做運行狀態觀察,收集各種運行時數據,如果此時對新舊版本做各種數據對比,就是所謂的A/B測試。

當確認新版本運行良好後,再逐步將更多的流量導入到新版本上,在此期間,還可以不斷地調整新舊兩個版本的運行的服務器副本數量,以使得新版本能夠承受越來越大的流量壓力。直到將100%的流量都切換到新版本上,最後關閉剩下的老版本服務,完成灰度發佈。

如果在灰度發佈過程中(灰度期)發現了新版本有問題,就應該立即將流量切回老版本上,這樣,就會將負面影響控制在最小範圍內。

使用脈衝雲輕鬆地實現灰度發佈

脈衝雲的部署管理可以輕鬆實現上述的帶有流量管理功能的灰度發佈。正常編輯應用信息後點擊保存,然後脈衝雲會提示直接升級或灰度發佈。

什麼是灰度發佈,以及灰度發佈A/B測試

直接升級就是使用一般的滾動升級,點擊灰度發佈後可以人工干預升級過程,進行流量控制。

選擇灰度發佈後,就會呈現灰度發佈控制面板。

什麼是灰度發佈,以及灰度發佈A/B測試

在這個控制面板上,可以拖拉滑塊,快速調整新舊版本的運行副本數量,同時也可以按百分比,將流量導入到新版本上。此外,還可以通過匹配HTTP Header,指定個別用戶的流量到新版本上。
什麼是灰度發佈,以及灰度發佈A/B測試

除了匹配用戶流量的HTTP請求頭,還可以直接指定匹配請求頭中的Cookie信息,匹配規則支持精確匹配、包含、正則、前綴、後綴等,甚至還允許反向匹配。

當確認新版本運行無誤後,就可以點擊 完成升級 按鈕,就會將流量全部切換到新版本上,並且銷燬掉所有老版本應用。如果新版本出了問題,可以點擊 取消升級 按鈕,立即將流量切回老版本,並銷燬掉新版本應用。
什麼是灰度發佈,以及灰度發佈A/B測試

總結

在新版本應用發佈時,爲了服務器不停機升級,使用灰度發佈策略,在灰度發佈開始時,使用HTTP Header 匹配指定測試人員的流量到新版本上,然後當新版本內部測試通過後,可以再按百分比,將用戶流量一點一點導入到新版本中,比如先導入10%觀察一下運行情況,然後再導入20%,如此累加,直到將流量全部導入到新版本上,最後完成升級,如果期間發現問題,就立即取消升級,將流量切回到老版本。

運用灰度發佈,就再也不需要加班到深夜進行停機升級了,在白天就可以放心大膽地、安全地發佈新版本。

參考DevOps平臺:脈衝雲開發平臺

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章