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