項目部署方式

藍綠髮布(Blue/Green Deployment)

  1. 定義

藍綠部署是不停老版本,部署新版本然後進行測試。確認OK後將流量切到新版本,然後老版本同時也升級到新版本。

  1. 特點

藍綠部署無需停機,並且風險較小。

  1. 部署過程
  • 部署版本 1 的應用(初始的狀態)

所有外部請求的流量都打到這個版本上。

  • 部署版本 2 的應用

版本 2 的代碼與版本 1 不同(新功能、Bug修復等)。

  • 將流量從版本 1 切換到版本 2。
  • 如版本 2 測試正常,就刪除版本 1 正在使用的資源(例如實例),從此正式用版本 2
  1. 小結

從過程不難發現,在部署的過程中,我們的應用始終在線。並且新版本上線的過程中,並沒有修改老版本的任何內容,在部署期間,老版本的狀態不受影響,這樣風險很小。並且只要老版本的資源不被刪除,理論上,我們可以在任何時間回滾到老版本。

  1. 藍綠髮布的注意事項

當你切換到藍色環境時,需要妥當處理未完成的業務和新的業務。如果你的數據庫後端無法處理,會是一個比較麻煩的問題。

  • 可能會出現需要同時處理微服務架構應用和傳統架構應用的情況,如果在藍綠部署中協調不好這兩者,還是有可能會導致服務停止。
  • 需要提前考慮數據庫與應用部署同步遷移/回滾的問題。
  • 藍綠部署需要有基礎設施支持。
  • 在非隔離基礎架構( VM 、 Docker 等)上執行藍綠部署,藍色環境和綠色環境有被摧毀的風險。
  1. 優勢和不足
  • 優勢

升級切換和回退速度非常快。

  • 不足

切換是全量的,如果 V2 版本有問題,則對用戶體驗有直接影響。 需要兩倍機器資源。

  1. 適用場合
  • 對用戶體驗有一定容忍度的場景。
  • 機器資源有富餘或者可以按需分配(AWS 雲,或自建容器雲)。

灰度發佈

  1. 定義

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

  1. A/B Testing(灰度發佈的一種)

A/B 測試是用來測試應用功能表現的方法,例如可用性、受歡迎程度、可見性等等。 A/B 測試通常用在應用的前端上,不過當然需要後端來支持。

A/B 測試與藍綠部署的區別在於, A/B 測試目的在於通過科學的實驗設計、採樣樣本代表性、流量分割與小流量測試等方式來獲得具有代表性的實驗結論,並確信該結論在推廣到全部流量可信;藍綠部署的目的是安全穩定地發佈新版本應用,並在必要時回滾。

  1. 金絲雀發佈

我們平常所說的金絲雀部署也是灰度發佈的一種方式,在原有版本可用的情況下,同時部署一個新版本應用作爲「金絲雀」服務器來測試新版本的性能和表現,以保障整體系統穩定的情況下,儘早發現、調整問題。

礦井中的金絲雀:17 世紀,英國礦井工人發現,金絲雀對瓦斯這種氣體十分敏感。空氣中哪怕有極其微量的瓦斯,金絲雀也會停止歌唱;當瓦斯含量超過一定限度時,雖然魯鈍的人類毫無察覺,金絲雀卻早已毒發身亡。當時在採礦設備相對簡陋的條件下,工人們每次下井都會帶上一隻金絲雀作爲瓦斯檢測指標,以便在危險狀況下緊急撤離。

灰度發佈/金絲雀發佈由以下幾個步驟組成:

  • 準備好部署各個階段的工件,包括:構建工件,測試腳本,配置文件和部署清單文件。
  • 從負載均衡列表中移除掉「金絲雀」服務器。
  • 升級「金絲雀」應用(排掉原有流量並進行部署)。
  • 對應用進行自動化測試。
  • 將「金絲雀」服務器重新添加到負載均衡列表中(連通性和健康檢查)。
  • 如果「金絲雀」在線使用測試成功,升級剩餘的其他服務器(否則就回滾)。

除此之外灰度發佈還可以設置路由權重,動態調整不同的權重來進行新老版本的驗證。

  1. 優勢和不足
  • 優勢

用戶體驗影響小,灰度發佈過程出現問題隻影響少量用戶。

  • 不足

發佈自動化程度不夠,發佈期間可引發服務中斷。

滾動發佈(Rolling Update Deployment)

在金絲雀發佈基礎上的進一步優化改進,是一種自動化程度較高的發佈方式,用戶體驗比較平滑,是目前成熟型技術組織所採用的主流發佈方式。

  1. 定義

滾動發佈:一般是取出一個或者多個服務器停止服務,執行更新,並重新將其投入使用。周而復始,直到集羣中所有的實例都更新成新版本。

  1. 特點

這種部署方式相對於藍綠部署,更加節約資源——它不需要運行兩個集羣、兩倍的實例數。我們可以部分部署,例如每次只取出集羣的 20% 進行升級。

  1. 部署過程
  • 滾動式發佈一般先發 1 臺,或者一個小比例,如 2% 服務器,主要做流量驗證用,類似金絲雀 (Canary) 測試。
  • 滾動式發佈需要比較複雜的發佈工具和智能 LB,支持平滑的版本替換和流量拉入拉出。
  • 每次發佈時,先將老版本 V1 流量從 LB 上摘除,然後清除老版本,發新版本 V2,再將 LB 流量接入新版本。這樣可以儘量保證用戶體驗不受影響。
  • 一次滾動式發佈一般由若干個發佈批次組成,每批的數量一般是可以配置的(可以通過發佈模板定義)。例如第一批 1 臺(金絲雀),第二批 10%,第三批 50%,第四批 100%。每個批次之間留觀察間隔,通過手工驗證或監控反饋確保沒有問題再發下一批次,所以總體上滾動式發佈過程是比較緩慢的 (其中金絲雀的時間一般會比後續批次更長,比如金絲雀 10 分鐘,後續間隔 2 分鐘)。
  • 回退是發佈的逆過程,將新版本流量從 LB 上摘除,清除新版本,發老版本,再將 LB 流量接入老版本。和發佈過程一樣,回退過程一般也比較慢的。
  1. 優勢和不足
  • 優勢

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

  • 不足

發佈和回退時間比較緩慢。 發佈工具比較複雜,LB 需要平滑的流量摘除和拉入能力。

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