當前位置: 妍妍網 > 碼農

微服務下必須了解的4種部署策略!

2024-01-30碼農

點選關註公眾號,Java幹貨 及時送達

來源:cnblogs.com/Courage129/p/14498788.html

  • 藍綠釋出

  • 藍綠釋出特點

  • 藍綠釋出註意事項

  • 捲動釋出

  • 捲動釋出特點

  • 滾定釋出註意事項

  • 灰度釋出

  • A/B測試

  • 在計畫叠代的過程中,不可避免需要」上線「。上線對應著部署,或者重新部署;部署對應著修改;修改則意味著風險。目前有很多部署釋出的技術, 這兒將常見的做一個總結。

    上面所說難免有些抽象, 舉一個情景例子, 加入你是微博計畫負責人員, 現在新版本較原來的老版本有很大的改變, 這設計到服務架構、前端UI等等, 經過測試功能沒有障礙, 那麽這時候如何讓使用者切換到新的版本呢?

    顯而易見, 第一次釋出的套用是沒有所謂的這個問題的, 這種如何釋出的思考只會出現在後面的版本叠代中。

    藍綠釋出

    藍綠部署中,一共有兩套系統:一套是正在提供服務系統(也就是上面說的舊版),標記為「綠色」;另一套是準備釋出的系統,標記為「藍色」。兩套系統都是功能完善的,並且正在執行的系統,只是系統版本和對外服務情況不同。正在對外提供服務的老系統是綠色系統,新部署的系統是藍色系統。

    藍色系統不對外提供服務,用來做啥?

    用來做釋出前測試,測試過程中發現任何問題,可以直接在藍色系統上修改,不幹擾使用者正在使用的系統。

    藍色系統經過反復的測試、修改、驗證,確定達到上線標準之後,直接將使用者切換到藍色系統, 切換後的一段時間內,依舊是藍綠兩套系統並存,但是使用者存取的已經是藍色系統。這段時間內觀察藍色系統(新系統)工作狀態,如果出現問題,直接切換回綠色系統。

    當確信對外提供服務的藍色系統工作正常,不對外提供服務的綠色系統已經不再需要的時候,藍色系統正式成為對外提供服務系統,成為新的綠色系統。原先的綠色系統可以銷毀,將資源釋放出來,用於部署下一個藍色系統。

    藍綠釋出特點

    1. 藍綠部署的目的是 減少釋出時的中斷時間 能夠快速撤回釋出

    2. 兩套系統沒有耦合的時候才能百分百保證不幹擾

    藍綠釋出註意事項

    藍綠部署只是上線策略中的一種,它不是可以應對所有情況的萬能方案。藍綠部署能夠簡單快捷實施的前提假設是目標系統是非常內聚的,如果目標系統相當復雜,那麽如何切換、兩套系統的數據是否需要以及如何同步等,都需要仔細考慮。

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

  • 可能會出現需要同時處理「微服務架構套用」和「傳統架構套用」的情況,如果在藍綠部署中協調不好這兩者,還是有可能會導致服務停止。

  • 需要提前考慮資料庫與套用部署同步遷移 /回滾的問題。

  • 藍綠部署需要有基礎設施支持。

  • 在非隔離基礎架構( VM 、 Docker 等)上執行藍綠部署,藍色環境和綠色環境有被摧毀的風險。

  • 捲動釋出

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

    釋出流程:

    相對於藍綠釋出需要一套完備的機器不同, 捲動釋出只需要一台機器(這兒這是為了理解, 實際可能是多台), 我們只需要將部份功能部署在這台機器上, 然後去替換正在執行的機器, 如上圖, 將更新後的功能部署在Server1 上, 然後Server1去替換正在執行的Server, 替換下來的物理機又可以繼續部署Server2的新版本, 然後去替換正在工作的Server2 , 以此類推, 直到替換完所有的伺服器, 至此 ,服務更新完成。

    捲動釋出特點

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

    2. 回滾困難

    滾定釋出註意事項

    1. 捲動釋出沒有一個確定可行的環境。使用藍綠部署,我們能夠清晰地知道老版本是可行的,而使用捲動釋出,我們無法確定。

    2. 修改了現有的環境。

    3. 回滾困難 。舉個例子,在某一次釋出中,我們需要更新100個例項,每次更新10個例項,每次部署需要5分鐘。當捲動釋出到第80個例項時,發現了問題,需要回滾,這個回滾卻是一個痛苦,並且漫長的過程。

    4. 有的時候,我們還可能對系統進行動態伸縮,如果部署期間,系統自動擴容/縮容了,我們還需判斷到底哪個節點使用的是哪個程式碼。盡管有一些自動化的運維工具,但是依然令人心驚膽戰。

    5. 因為是逐步更新,那麽我們在上線程式碼的時候,就會短暫出現新老版本不一致的情況,如果對上線要求較高的場景,那麽就需要考慮如何做好相容的問題。

    灰度釋出

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

    具體到伺服器上, 實際操作中還可以做更多控制,譬如說,給最初更新的10台伺服器設定較低的權重、控制發送給這10台伺服器的請求數,然後逐漸提高權重、增加請求數。一種平滑過渡的思路, 這個控制叫做「流量切分」。

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

    1. 準備好部署各個階段的工件,包括:構建工件,測試指令碼,配置檔和部署清單檔。

    2. 將「金絲雀」伺服器部署進伺服器中, 測試。

    3. 從負載均衡列表中移除掉「金絲雀」伺服器。

    4. 升級「金絲雀」套用(排掉原有流量並進行部署)。

    5. 對套用進行自動化測試。

    6. 將「金絲雀」伺服器重新添加到負載均衡列表中(環通度和健康檢查)。

    7. 如果「金絲雀」線上使用測試成功,升級剩余的其他伺服器。(否則就回滾)

    A/B測試

    A/B測試和藍綠釋出、捲動釋出以及金絲雀釋出,完全是兩回事。

    藍綠釋出、捲動釋出和金絲雀是釋出策略,目標是確保新上線的系統穩定,關註的是新系統的BUG、隱患。

    A/B測試是效果測試,同一時間有多個版本的服務對外服務,這些服務都是經過足夠測試,達到了上線標準的服務,有差異但是沒有新舊之分(它們上線時可能采用了藍綠部署的方式)。

    A/B測試關註的是不同版本的服務的實際效果,譬如說轉化率、訂單情況等。

    A/B測試時,線上同時執行多個版本的服務,這些服務通常會有一些體驗上的差異,譬如說頁面樣式、顏色、操作流程不同。相關人員透過分析各個版本服務的實際效果,選出效果最好的版本。

    >>

    END

    精品資料,超贊福利,免費領

    微信掃碼/長按辨識 添加【技術交流群

    群內每天分享精品學習資料

    最近開發整理了一個用於速刷面試題的小程式;其中收錄了上千道常見面試題及答案(包含基礎並行JVMMySQLRedisSpringSpringMVCSpringBootSpringCloud訊息佇列等多個型別),歡迎您的使用。

    👇👇

    👇點選"閱讀原文",獲取更多資料(持續更新中