1. 程式人生 > >首富帶你暢談:藍綠部署、滾動發布、灰度發布/金絲雀發布

首富帶你暢談:藍綠部署、滾動發布、灰度發布/金絲雀發布

超過 生產 如果 www. 可能 原來 update oss web應用

首富帶你暢談:藍綠部署、滾動發布、灰度發布/金絲雀發布
筆者: 張首富
時間: 2019-01-24晚
QQ群: 895291458
博客地址: www.zhangshoufu.com

根據2018年的DevOps發展報告來看,目前的DevOps發展速度非常之快,已經逐漸成為企業運維的標準方案.DevOps的核心就是敏捷高效,敏捷Scrum開發技術曾被認為是最好的技術.
既然公司用到了CI/CD肯定就肯定避免不了持續部署,所以我們就需要考慮一套適合我們的發布方式,這個時候我們就需要了解一下這幾個發布方式到底是什麽意思,有很麽好處,他們之間的差別在哪個地方.

藍綠部署(Blue/Green Deployment)

定義:

藍綠部署就是不停止使用老版本的情況下部署新版本進行測試,測試你ok後,將流量切換到新版本,然後老版本也升級到新版本

特點:

1,藍綠部署無需停止,直接新舊版本都能使用,等待新版本測試正常之後才把流量遷移過來
2,需要兩套相同的環境

部署過程:

這個地方拿web應用來做演示再也合適不過了,
1,把所有的請求都代理到老版本代碼的Nginx服務器上,然後測試人員在新版本代碼的Nginx上測試功能是否合格正常
技術分享圖片
等待新版本代碼所有功能驗證通過之後我們在把流量切換到新版本代碼所在的集群,等待觀察使用一階段之後再辦原來老版本代碼的服務器替換成更新的代碼,
技術分享圖片
就這樣新舊代碼上線測試發布,這個過程叫藍綠發布.

藍綠部署的好處:

新代碼發布的時候不會影響舊代碼,如果出現問題,我們只需要把流量全部遷移到老代碼集群即可,風險比較小.

藍綠部署的不足或風險:

  • 1,因為新舊代碼同時在線,我們一定要考慮好後端數據庫的處理問題,如果數據庫處理不得當,那麽藍綠部署會給你帶來不一樣的感覺
  • 2,可能會出需要同時處理“微服務架構應用”和“傳統架構應用”的情況,如果在藍綠部署中協調不好這兩者,還是有可能導致服務停止的;
  • 3,雖然代碼回滾很簡單,但是你因該考慮好數據庫回滾的事情
  • 4,藍綠部署需要你有足夠多的服務器資源

流量走勢圖:

技術分享圖片

滾動發布(Rolling update)

定義:

一般是取出一個或多個服務器先停止服務,更換新的代碼,然後投入生產使用,等待穩定在更換一批服務器的代碼,周而復始,直到老版本完全被替換掉

特點:

這種部署的方式很像藍綠部署,但是有和藍綠部署不一樣,他比藍綠部署更加的節省資源(相同的集群不需要部署兩套)

部署過程:

1,現在其中的一臺或者多臺機器上部署新代碼,然後提供服務
技術分享圖片
2,等過一段時間發現沒有什麽大問題,開始接著替換代碼
技術分享圖片
3,周而復始直到所有的代碼被替換完成
技術分享圖片

滾動發布的好處:

用戶體驗影響小,體驗較平滑

滾動發布的不足或風險:

  • 1,沒有一個確定OK的環境。使用藍綠部署,我們能夠清晰地知道老版本是OK的,而使用滾動發布,我們無法確定。
  • 2,有的時候,我們還可能對系統進行動態伸縮,如果部署期間,系統自動擴容/縮容了,我們還需判斷到底哪個節點使用的是哪個代碼。盡管有一些自動化的運維工具,但是依然令人心驚膽戰。
  • 3,因為是逐步更新,那麽我們在上線代碼的時候,就會短暫出現新老版本不一致的情況,如果對上線要求較高的場景,那麽就需要考慮如何做好兼容的問題。

滾動發布需要註意的事項:

  • 1,滾動式發布一般先發 1 臺,或者一個小比例,如 2% 服務器,主要做流量驗證用,類似金絲雀 (Canary) 測試
  • 2,滾動式發布需要比較復雜的發布工具和智能 LB,支持平滑的版本替換和流量拉入拉出。
  • 3,每次發布時,先將老版本 V1 流量從 LB 上摘除,然後清除老版本,發新版本 V2,再將 LB 流量接入新版本。這樣可以盡量保證用戶體驗不受影響。
  • 4,回退是發布的逆過程,將新版本流量從 LB 上摘除,清除新版本,發老版本,再將 LB 流量接入老版本。和發布過程一樣,回退過程一般也比較慢的。

流量走勢圖:

技術分享圖片

灰度發布/金絲雀發布

定義:

灰度發布是指在黑與白之間,能夠平滑過渡的一種發布方式。AB test就是一種灰度發布方式,讓一部分用戶繼續用A,一部分用戶開始用B,如果用戶對B沒有什麽反對意見,那麽逐步擴大範圍,把所有用戶都遷移到B上面來。灰度發布可以保證整體系統的穩定,在初始灰度的時候就可以發現、調整問題,以保證其影響度,而我們平常所說的金絲雀發布也就是灰度發布的一種方式。

小插曲(為什麽叫金絲雀發布)

礦井中的金絲雀
17世紀,英國礦井工人發現,金絲雀對瓦斯這種氣體十分敏感。空氣中哪怕有極其微量的瓦斯,金絲雀也會停止歌唱;而當瓦斯含量超過一定限度時,雖然魯鈍的人類毫無察覺,金絲雀卻早已毒發身亡。當時在采礦設備相對簡陋的條件下,工人們每次下井都會帶上一只金絲雀作為“瓦斯檢測指標”,以便在危險狀況下緊急撤離。這就好比我們先哪一個測試看看用戶反應,如果沒有問題繼續發布

特點:

部署過程:

1,準備好部署各個階段的工件,包括:構建工件,測試腳本,配置文件和部署清單文件。
技術分享圖片
2, 在原有的Nginx 後端中提出金絲雀服務器,升級金絲雀服務器上的應用代碼,對齊進行測試
技術分享圖片
3,帶基礎測試通過之後再把它加回到服務器急群眾,來檢測連通性和健康檢查
技術分享圖片
4,帶測試結束之後,升級其他服務器代碼至新代碼

灰度發布的好處:

用戶體驗影響小;
如果出問題只是一臺服務器,不影響我們線上的業務,就是出了問題我們也能快速的解決(把金絲雀撤回來)

灰度發布的不足或風險

發布工具比較復雜,

流量走勢圖:

技術分享圖片

參考:
https://www.v2ex.com/t/344341
http://www.10tiao.com/html/773/201803/2247487627/1.html

首富帶你暢談:藍綠部署、滾動發布、灰度發布/金絲雀發布