Spark灰度發布在十萬級節點上的實踐

2021-09-17 20:12:11 字數 2848 閱讀 6972

持續整合是指,及時地將最新開發的且經過測試的**整合到主幹分支中。

持續整合的優點

目前主流的**管理工具有,github、gitlab等。本文所介紹的內容中,所有**均託管於私有的 gitlab 中。

鑑於 jenkins 幾乎是 ci 事實上的標準,本文介紹的 spark ci cd \u0026amp; cd 實踐均基於 jenkins 與 gitlab。

spark 原始碼儲存在 spark-src.git 庫中。

由於已有部署系統支援 git,因此可將整合後的 distribution 儲存到 gitlab 的發布庫(spark-bin.git)中。

每次開發人員提交**後,均通過 gitlab 發起乙個 merge requet(相當於 gitlab 的 pull request)。

每當有 mr 被建立,或者被更新,gitlab 通過 webhook 通知 jenkins 基於該 mr 最新**進行 build。該 build 過程包含了

jenkins 將 build 結果通知 gitlab,只有 jenkins 構建成功,gitlab 的 mr 頁面才允許 merge。否則 gitlab 不允許 merge。

另外,還需人工進行 code review。只有兩個以上的 reviewer 通過,才能進行最終 merge。

所有測試與 reivew 通過後,通過 gitlab merge 功能自動將** fast forward merge 到目標分支中。

該流程保證了

持續交付是指,及時地將軟體的新版本,交付給質量保障團隊或者使用者,以供評審。持續交付可看作是持續整合的下一步。它強調的是,不管怎麼更新,軟體都是可隨時交付的。

這一階段的評審,一般是將上文集成後的軟體部署到盡可能貼近生產環境的 staging 環境中,並使用貼近真實場景的用法(或者流量)進行測試。

持續發布的優點

正常流程

如下圖所示,基於單分支的 spark 持續交付方案如下

注:

bug fix

在 staging 環境中發現 spark-dev 的 bug 時,修復及整合和交付方案如下

生產環境中發現 bug 時修復及交付方案如下

cons.正常流程

如下圖所示,基於兩分支的 spark 持續交付方案如下

在 staging 環境中發現了 dev 版本的 bug 時,修復及整合和交付方案如下

在生產環境中發現了 prod 版本的 bug 時,修復及整合和交付方案如下

cons.正常流程

如下圖所示,基於多分支的 spark 持續交付方案如下

在 staging 環境中發現了 dev 版本的 bug 時,修復及整合和交付方案如下

在生產環境中發現了 prod 版本的 bug 時,修復及整合和交付方案如下

灰度發布

本文介紹的實踐中,不考慮多個版本(經實踐檢驗,多個版本維護成本太高,且一般無必要),只考慮乙個 prod 版本,乙個 dev 版本

上文介紹的持續發布中,可將spark-bin.git/dev部署至需要使用最新版的環境中(不一定是 staging 環境,可以是部分生產環境)從而實現 dev 版的部署。將spark-bin.git/prod部署至需要使用穩定版的 prod 環境中

回滾機制

本文介紹的方法中,所有 release 都放到spark-$中,由 spark 這一 symbolic 選擇指向具體哪個 release。因此回滾方式比較直觀

pros.

cons.

持續部署是指,軟體通過評審後,自動部署到生產環境中。

上述 spark 持續發布實踐的介紹都只到 \u0026quot;將 *** 提交到spark-bin.git\u0026quot; 結束。可使用基於 git 的部署(為了效能和擴充套件性,一般不直接在待部署機器上使用 git pull --rebase,而是使用自研的上線方案,此處不展開)將該 release 上線到 staging 環境或生產環境。

該自動上線過程即是 spark 持續部署的最後一環。

Spark灰度發布在十萬級節點上的實踐

持續整合是指,及時地將最新開發的且經過測試的 整合到主幹分支中。持續整合的優點 目前主流的 管理工具有,github gitlab等。本文所介紹的內容中,所有 均託管於私有的 gitlab 中。鑑於 jenkins 幾乎是 ci 事實上的標準,本文介紹的 spark ci cd u0026amp c...

Spark灰度發布在十萬級節點上的實踐

持續整合是指,及時地將最新開發的且經過測試的 整合到主幹分支中。持續整合的優點 目前主流的 管理工具有,github gitlab等。本文所介紹的內容中,所有 均託管於私有的 gitlab 中。鑑於 jenkins 幾乎是 ci 事實上的標準,本文介紹的 spark ci cd u0026amp c...

Spark灰度發布在十萬級節點上的實踐

持續整合是指,及時地將最新開發的且經過測試的 整合到主幹分支中。持續整合的優點 目前主流的 管理工具有,github gitlab等。本文所介紹的內容中,所有 均託管於私有的 gitlab 中。鑑於 jenkins 幾乎是 ci 事實上的標準,本文介紹的 spark ci cd u0026amp c...