1. No.184# 藍(lán)綠發(fā)布實(shí)踐回顧

        共 9953字,需瀏覽 20分鐘

         ·

        2023-05-31 11:34

        0

        緣起

        隨著藍(lán)綠發(fā)布項(xiàng)目落地進(jìn)入試運(yùn)行,也對(duì)藍(lán)綠發(fā)布項(xiàng)目做個(gè)簡(jiǎn)要回顧。 早在2022年初的時(shí)候效能、交易和中間件的同學(xué)就如何提高發(fā)布效率做過(guò)討論,藍(lán)綠發(fā)布當(dāng)時(shí)也被提出。由于彼時(shí)有更重要的事情去落地,藍(lán)綠發(fā)布也被擱置未能成行。 隨著染色環(huán)境項(xiàng)目的落地,推進(jìn)接入工作的基本完成。測(cè)試開(kāi)發(fā)環(huán)境存在的眾多問(wèn)題(多套環(huán)境、運(yùn)維問(wèn)題、環(huán)境沖突、溝通問(wèn)題)基本得到根治。 測(cè)試環(huán)境得到根治的同時(shí),生產(chǎn)環(huán)境自然就成為接下來(lái)的重點(diǎn)。大版本發(fā)布時(shí)長(zhǎng)達(dá)7個(gè)小時(shí),的確是大家的痛點(diǎn),我們也希望從根本上提高發(fā)布效率。本文主要內(nèi)容有:
        • 應(yīng)用發(fā)布訴求

        • 發(fā)布方案對(duì)比

        • 藍(lán)綠發(fā)布流程

        • 藍(lán)綠流量調(diào)度

        • 組件能力支持


        1

        應(yīng)用發(fā)布訴求 微服務(wù)應(yīng)用發(fā)布時(shí)有以下訴求:
        • 上下游依賴(lài):本服務(wù)的發(fā)布依賴(lài)其他服務(wù),要?jiǎng)e的服務(wù)先發(fā)布才行

        • 小流量灰度:發(fā)布時(shí)先小流量灰度驗(yàn)證、避免問(wèn)題被放大

        • 按批次發(fā)布:支持節(jié)點(diǎn)批次劃分、按批次發(fā)布
        其中上下游依賴(lài)問(wèn)題最為突出,為解決依賴(lài)問(wèn)題需提前填寫(xiě)發(fā)布計(jì)劃,將應(yīng)用組織成梯隊(duì)來(lái)規(guī)避上下游依賴(lài)問(wèn)題。
        • 填寫(xiě)發(fā)布計(jì)劃較為繁瑣:每次發(fā)布需要去組織填寫(xiě)、比較繁瑣

        • 必須按照梯隊(duì)順序發(fā)布:一個(gè)梯隊(duì)發(fā)完才能發(fā)布另一個(gè)梯隊(duì)、需要互相等待

        • 應(yīng)用回滾穩(wěn)定性需提升:一個(gè)應(yīng)用驗(yàn)證有問(wèn)題,需要依賴(lài)上游聯(lián)動(dòng)回滾,回滾過(guò)程中有生產(chǎn)流量、穩(wěn)定性存在優(yōu)化空間
        由此可見(jiàn),應(yīng)用發(fā)布的痛點(diǎn)聚焦到了破除上下游上,自然解決方案也以此為中心。

        2

        發(fā)布方案對(duì)比
        發(fā)布方式 基本原理 常見(jiàn)實(shí)現(xiàn)
        灰度發(fā)布 小流量驗(yàn)證 方式一:金絲雀發(fā)布,發(fā)布時(shí)先拉入一臺(tái)驗(yàn)證,正常后發(fā)布剩余節(jié)點(diǎn) ?
        方式二:流量染色灰度,通過(guò)對(duì)請(qǐng)求流量染色選擇到特定的節(jié)點(diǎn)實(shí)現(xiàn)灰度 ?
        方式三:獨(dú)立灰度環(huán)境,上線前先在該環(huán)境驗(yàn)證(例如:小得物環(huán)境)
        滾動(dòng)發(fā)布 分批次發(fā)布 在灰度驗(yàn)證的基礎(chǔ)上,通過(guò)發(fā)布系統(tǒng)選擇發(fā)布批次 ?
        方式一:按節(jié)點(diǎn)比例分批發(fā)布 ?
        方式二:按節(jié)點(diǎn)數(shù)量分批發(fā)布
        藍(lán)綠發(fā)布 流量調(diào)度實(shí)現(xiàn) 線上同時(shí)藍(lán)綠兩個(gè)應(yīng)用組提供服務(wù) ?
        步驟一:新版本發(fā)布時(shí)先將流量從藍(lán)色集群A調(diào)度到綠色集群B,綠色集群B獨(dú)立承擔(dān)流量
        步驟二:在藍(lán)色集群A發(fā)布新版本,從小到大逐步引流到藍(lán)色集群 ?
        步驟三:藍(lán)色驗(yàn)證正常均衡藍(lán)綠兩套流量,異常流量調(diào)度走即可
        紅黑發(fā)布 彈性擴(kuò)縮容、流量調(diào)度 線上只運(yùn)行一個(gè)紅色集群 ?
        步驟一:發(fā)布時(shí)先擴(kuò)容黑色集群,該集群發(fā)布新版本 ?
        步驟二:在黑色集群發(fā)布新版本,按比例引流驗(yàn)證 ?
        步驟三:一切正常后,流量調(diào)度到黑色集群,紅色集群下線

        熟悉中間件運(yùn)維的同學(xué)怎么運(yùn)維才是安全的呢?先摘流、運(yùn)維變更、再逐步引流。

        這種方式應(yīng)用到應(yīng)用發(fā)布系統(tǒng),即為藍(lán)綠發(fā)布。

        在生產(chǎn)環(huán)境發(fā)布時(shí),我們通常有兩個(gè)版本,線上運(yùn)行的版本、待發(fā)布的版本。

        也就是在生產(chǎn)環(huán)境區(qū)分流量只需要兩個(gè)顏色即可,藍(lán)綠發(fā)布通過(guò)兩個(gè)染色流量來(lái)區(qū)分線上運(yùn)行版本和待發(fā)布版本。

        此外,希望在大版本發(fā)布與日常迭代中都能使用藍(lán)綠發(fā)布來(lái)提效,作為核心應(yīng)用的首選發(fā)布方式。

        3

        藍(lán)綠發(fā)布流程 在發(fā)布系統(tǒng)中集成藍(lán)綠發(fā)布,與普通發(fā)布有何區(qū)別,藍(lán)綠發(fā)布流程是怎么樣的呢?

        3.1? ?藍(lán)綠架構(gòu)圖示

        線上的資源容量需能夠容納業(yè)務(wù)增量的2倍以上,將線上的運(yùn)行的服務(wù)節(jié)點(diǎn)資源一分為二,分成藍(lán)色環(huán)境和綠色環(huán)境。

        fe262602c2c2a2b8995d241205948051.webp

        3.2? ? 藍(lán)綠發(fā)布流程

        為了避免混淆將藍(lán)綠環(huán)境固定,先部署待發(fā)布新版本的環(huán)境固定為「藍(lán)色環(huán)境」,后部署待發(fā)布新版本的環(huán)境固定為「綠色環(huán)境」,應(yīng)用發(fā)布先發(fā)「藍(lán)色環(huán)境」,后發(fā)「綠色環(huán)境」。

        cbad898a766631885164c753710ea65e.webp

        發(fā)布流程梳理如下:

        • 將藍(lán)色集群摘流,此時(shí)流量被染綠進(jìn)入綠色集群

        • 系統(tǒng)發(fā)布時(shí)先經(jīng)過(guò)「藍(lán)色環(huán)境」,后發(fā)布「綠色環(huán)境」

        • 應(yīng)用上下游服務(wù)在「藍(lán)色環(huán)境」集中完成部署

        • 引入1%流量藍(lán)色流量驗(yàn)證

        • 「藍(lán)色環(huán)境」上下游服務(wù)驗(yàn)證「不符合預(yù)期」,流量切換到綠色環(huán)境

        • 「藍(lán)色環(huán)境」完成驗(yàn)證「符合預(yù)期」,全部流量染成藍(lán)色,流量調(diào)度到了藍(lán)色環(huán)境

        • 此時(shí)綠色環(huán)境已無(wú)流量,新版本在綠色環(huán)境集中完成部署

        • 通過(guò)遞進(jìn)式引流到綠色環(huán)境【1%~50%】

        • 最后呈現(xiàn)的流量分布,藍(lán)綠流量各50%
        縱觀整個(gè)發(fā)布流程,需要眾多部門(mén)和組件的聯(lián)動(dòng)配合才能完成,下到容器、上到網(wǎng)關(guān),中間貫穿眾多核心中間件。

        4

        藍(lán)綠流量調(diào)度

        在設(shè)計(jì)流量調(diào)度時(shí)分為全局流量調(diào)度與局部流量調(diào)度,分別應(yīng)對(duì)不同的發(fā)布場(chǎng)景。

        全局流量調(diào)度(單通道發(fā)布):所有藍(lán)綠環(huán)境的應(yīng)用都參與流量調(diào)度,適用一次發(fā)布上百個(gè)應(yīng)用場(chǎng)景、上下游關(guān)系難以梳理。

        局部流量調(diào)度(多通道發(fā)布):適用于已知應(yīng)用依賴(lài)發(fā)布、日常迭代。

        在已知應(yīng)用依賴(lài)的情況下,通過(guò)局部流量調(diào)度即可滿足需求。

        4.1? ?全局流量調(diào)度

        上面提到「全局流量單通道」在藍(lán)綠環(huán)境的服務(wù)均會(huì)參與調(diào)度,流量調(diào)度變更涉及全部在藍(lán)綠環(huán)境的應(yīng)用,下面以流量全部調(diào)度藍(lán)色環(huán)境為例觀測(cè)各個(gè)組件的行為。 096c6939fb8cbf1cbd5254c0c5f2d596.webp伴隨著綠色環(huán)境被摘流,流量全部在藍(lán)色環(huán)境運(yùn)行。
        • RPC選擇本環(huán)境對(duì)應(yīng)節(jié)點(diǎn)、并提供兜底選擇策略

        • 綠色環(huán)境應(yīng)用消息組被下線摘除消費(fèi)流量、同時(shí)在藍(lán)色環(huán)境喚醒綠色消費(fèi)組接管流量

        • 配置中心應(yīng)用只訪問(wèn)對(duì)應(yīng)藍(lán)綠環(huán)境的配置集

        • 分布式調(diào)度此時(shí)只調(diào)度到藍(lán)色環(huán)境


        4.2? ? 局部流量調(diào)度

        「局部流量多通道」的流量調(diào)度比例,由各通道進(jìn)行自行管控。如下圖所示:

        • 全局流量單通道:藍(lán)綠切流比例 50%:50%

        • 局部流量多通道1 :藍(lán)綠切流比例 5%:95%

        • 局部流量多通道2 :藍(lán)綠切流比例 0%:100%


        • 局部流量多通道3 :藍(lán)綠切流比例 70%:30%

          83a76d6ed42eff865d39b61789ea2cba.webp


        需要注意的是

        • 一個(gè)應(yīng)用只允許在一個(gè)發(fā)布通道發(fā)布,避免流量沖突和干擾

        • 當(dāng)「全局流量單通道」發(fā)布與「局部流量多通道」同時(shí)發(fā)布時(shí)



          • 以「局部流量多通道」比例為準(zhǔn)

          • 「局部流量多通道」發(fā)布結(jié)束后,會(huì)被「全局流量單通道」流量比例接管

        4.3? ? 調(diào)度實(shí)現(xiàn)原理

        無(wú)論是「全局流量單通道」調(diào)度還是「局部流量多通道」調(diào)度,實(shí)現(xiàn)原理都是一樣的,下面以RPC調(diào)用為例說(shuō)明,如下圖所示。

        97e866b36e60f83b5dfe10c93e3172ce.webp

        工作原理簡(jiǎn)述如下:
        • @1 由發(fā)布系統(tǒng)即將【通道標(biāo)識(shí)、包含的應(yīng)用列表、切流比例】寫(xiě)入元數(shù)據(jù)中心

        • @2 「局部流量多通道」中的應(yīng)用收到藍(lán)綠比例。例如:圖示中應(yīng)用A收到自身所屬通道的藍(lán)綠流量比例

        • @3 「局部流量多通道」中的應(yīng)用將自身的藍(lán)綠比例寫(xiě)入注冊(cè)中心。例如:應(yīng)用A將自身藍(lán)綠流量比例寫(xiě)入注冊(cè)中心

        • @4 調(diào)用應(yīng)用A的【所有上游應(yīng)用】通過(guò)注冊(cè)中心均收到應(yīng)該調(diào)用A的藍(lán)綠流量比例。例如:應(yīng)用B、應(yīng)用C、應(yīng)用D均收到應(yīng)該調(diào)用應(yīng)用A的藍(lán)綠比例

        • @5 上游應(yīng)用按流量比例向下游服務(wù)發(fā)起調(diào)用
        從流量調(diào)度和實(shí)現(xiàn)原理來(lái)看,流量的調(diào)度會(huì)與RPC、消費(fèi)組、分布式調(diào)度、發(fā)布系統(tǒng)、配置中心、注冊(cè)中心一起聯(lián)動(dòng)。需要把存在的流量出口(例如:網(wǎng)關(guān)、消息、分布式調(diào)度等)流量管控起來(lái)。

        5

        組件能力支持

        上文中提到流量的調(diào)度涉及到眾多組件聯(lián)動(dòng)與協(xié)同,那各個(gè)組件需要提供哪些能力呢?下面介紹下這些組件需提供的能力。

        5.1? ?容器邏輯分組

        藍(lán)綠發(fā)布離不開(kāi)容器的邏輯分組,應(yīng)用使用藍(lán)綠發(fā)布之前,需要將應(yīng)用的機(jī)器實(shí)例分布到藍(lán)綠環(huán)境中去。容器需要具備的能力如下:

        • 提供應(yīng)用藍(lán)綠邏輯分組

        • 藍(lán)綠標(biāo)識(shí)植入環(huán)境變量

        • 應(yīng)用分組發(fā)布系統(tǒng)可見(jiàn)

        如下圖所示,應(yīng)用通過(guò)容器分組,分布到藍(lán)綠集群。

        ceb750300c5e637ac8164b50041e4eba.webp

        5.2? ? 發(fā)布系統(tǒng)支持

        發(fā)布系統(tǒng)是整個(gè)藍(lán)綠發(fā)布的入口,用戶直接感受的系統(tǒng)。對(duì)下與容器交互、對(duì)上與元數(shù)據(jù)中心交互。

        • 提供藍(lán)綠發(fā)布多通道能力,將本次發(fā)布關(guān)聯(lián)應(yīng)用拉入同一發(fā)布通道

        • 提供藍(lán)綠發(fā)布流水線、流量調(diào)操作

        • 根據(jù)容器平臺(tái)提供的邏輯分組接口、指定藍(lán)綠集群發(fā)布

        • 將通道信息、應(yīng)用列表、流量調(diào)度信息寫(xiě)入元數(shù)據(jù)中心,供中間件感知
        如下圖所示,將整個(gè)藍(lán)綠發(fā)布形成流水線。

        898c791049d326c4fe1ec9b7a4942791.webp

        5.3? ? 統(tǒng)一框架支持

        統(tǒng)一框架包含流量調(diào)度SDK、與注冊(cè)中心和配置中心交互,聯(lián)動(dòng)整個(gè)RPC、Feign/HTTP流量調(diào)度。

        • 優(yōu)先根據(jù)藍(lán)綠標(biāo),選擇本環(huán)境節(jié)點(diǎn)調(diào)用

        • 根據(jù)權(quán)重路由策略選擇下游節(jié)點(diǎn)

        • 提供兜底策略,避免無(wú)節(jié)點(diǎn)可選
        節(jié)點(diǎn)選擇示意圖如下:

        6645f479eafb81097df5b90c04af9d3c.webp

        如下圖所示,框架會(huì)將藍(lán)綠環(huán)境信息與權(quán)重在注冊(cè)中心注冊(cè)。

        3318ffecad3faf2fa46bb0ac16d4c66e.webp

        5.4? ? 消息組件支持

        消息組件根據(jù)流量調(diào)度SDK的回調(diào),需要將消費(fèi)流量摘除和激活。

        311b3dc5142ebb281a43193b61f1f5d3.webp

        邏輯實(shí)現(xiàn)約定如下:

        • 藍(lán)綠環(huán)境各使用三個(gè)消費(fèi)組 melon-consumer、BLUE-melon-consumer、GREEN-melon-consumer

        • 消費(fèi)組melon-consumer用于消費(fèi)無(wú)(藍(lán)綠)標(biāo)識(shí)的流量,藍(lán)綠標(biāo)識(shí)會(huì)在每條消息屬性中存儲(chǔ)

        • 消費(fèi)組__BLUE-melon-consumer用于消費(fèi)「藍(lán)色」標(biāo)識(shí)流量

        • 消費(fèi)組__GREEN-melon-consumer用于消費(fèi)「綠色」標(biāo)識(shí)流量

        藍(lán)綠兩個(gè)環(huán)境均有流量:
        • 綠色環(huán)境melon-consumer 、_GREEN-melon-consumer參與消費(fèi);BLUE-melon-consumer下線不參與消費(fèi)

        • 藍(lán)色環(huán)境melon-consumer 、_BLUE-melon-consumer參與消費(fèi),GREEN-melon-consumer下線不參與消費(fèi)
        只有綠色環(huán)境有流量時(shí):
        • 綠色環(huán)境melon-consumer、_GREEN-melon-consumer參與消費(fèi),BLUE-melon-consumer被動(dòng)態(tài)喚醒參與消費(fèi),未被消費(fèi)完的藍(lán)色流量被接管

        • 藍(lán)色環(huán)境GREEN-melon-consumer、BLUE-melon-consumer、melon-consumer均被動(dòng)態(tài)下線,不參與消費(fèi)
        只有藍(lán)色環(huán)境有流量時(shí):
        • 綠色環(huán)境_GREEN-melon-consumer、BLUE-melon-consumer、melon-consumer均被動(dòng)態(tài)下線,不參與消費(fèi)

        • 藍(lán)色環(huán)境_GREEN-melon-consumer、BLUE-melon-consumer、melon-consumer均參與消費(fèi),其中__GREEN-melon-consumer被動(dòng)態(tài)喚醒,接管未被消費(fèi)的綠色流量
        如下圖所示,藍(lán)綠消費(fèi)組消費(fèi)各自對(duì)應(yīng)的消息:

        d0468e934d13c8bc52bdb958dbf6f18d.webp

        此外,DTS等組件同步的消息會(huì)被「無(wú)前綴標(biāo)記的消費(fèi)組(例如:melon-consumer)」接管,能夠在100%流量調(diào)度時(shí)摘除消費(fèi)流量。

        5.5? ? 配置中心支持

        配置中心提供能的能力,主要藍(lán)綠環(huán)境的節(jié)點(diǎn)選擇與其對(duì)應(yīng)的配置集,涉及到SDK和配置中心集群的改動(dòng)。

        • 配置中心提供藍(lán)色配置集

        • 藍(lán)色環(huán)境應(yīng)用選擇藍(lán)色版本配置集

        • 綠色環(huán)境應(yīng)用選擇綠色版本配置集

        • 提供兜底策略、無(wú)藍(lán)綠版本時(shí)選擇主版本配置集
        如下圖所示,配置中心提供藍(lán)綠不同的版本的配置集。

        ab3041d2f9adcf9cbd799752b736be86.webp

        5.6??? 網(wǎng)關(guān)調(diào)用支持

        • 讀取注冊(cè)中心節(jié)點(diǎn)流量調(diào)度比例

        • 提供根據(jù)流量比例選擇下游節(jié)點(diǎn)的策略,例如:通過(guò)節(jié)點(diǎn)權(quán)重加權(quán)計(jì)算
        如下圖所示,流量全部切換到藍(lán)色集群后,網(wǎng)關(guān)向下游分發(fā)的流量染藍(lán)。

        05dede68ca851ce11338fc11262b70de.webp

        5.7? ? 分布式調(diào)度支持

        • 通過(guò)命名空間區(qū)分藍(lán)綠環(huán)境調(diào)度

        • 一次調(diào)度只在一個(gè)環(huán)境進(jìn)行,避免兩個(gè)環(huán)境同時(shí)發(fā)生調(diào)度,對(duì)業(yè)務(wù)影響

        • 支持按照調(diào)度中心百分比(100%切流時(shí))執(zhí)行調(diào)度

        • 支持輸入藍(lán)綠環(huán)境,手動(dòng)執(zhí)行到特定環(huán)境
        如下圖所示,在調(diào)度時(shí)選擇對(duì)應(yīng)藍(lán)綠環(huán)境的節(jié)點(diǎn)。

        aab1981ab442aef8bffc3aa63b06ce77.webp

        5.8? ?? 藍(lán)綠監(jiān)控看板

        藍(lán)綠發(fā)布進(jìn)行流量調(diào)度時(shí),需要有一個(gè)可觀測(cè)面板觀察HTTP、DUBBO、MQ等的流量比例以及是否被摘流。

        如下圖看板所示HTTP流量,藍(lán)色流量占比10%,綠色流量占比90%。

        8a54bd49b298e39f33602b8d46a21365.webp

        6

        后記

        藍(lán)綠發(fā)布通過(guò)摘流、變更、再引流,因在無(wú)流量的情況下發(fā)布,相對(duì)比較安全。但是基于公司實(shí)際情況,有些場(chǎng)景的流量是無(wú)法摘除的

        • 未通過(guò)網(wǎng)關(guān)進(jìn)入服務(wù)流量:例如:通過(guò)域名SLB進(jìn)入服務(wù)、通過(guò)Ingress進(jìn)入服務(wù)的流量無(wú)法摘除

        • 消費(fèi)Kafka的流量無(wú)法摘除:由于應(yīng)用使用的原生kafka客戶端并全面鋪開(kāi)、無(wú)法對(duì)切入提供支持

        • 未使用統(tǒng)一框架/注冊(cè)中心:未使用統(tǒng)一框架和Sylas注冊(cè)中心的java應(yīng)用、以及非Java類(lèi)應(yīng)用當(dāng)前不支持藍(lán)綠發(fā)布
        此外,還有一些注意事項(xiàng)在使用藍(lán)綠發(fā)布時(shí)需警惕。
        • 消費(fèi)消息需冪等:使用消息中間件必須做冪等,這是基本要求,在消費(fèi)組啟停管控中可能產(chǎn)生重復(fù)消息

        • 消費(fèi)組線程數(shù)量:由于會(huì)有三個(gè)消費(fèi)組、消費(fèi)線程也會(huì)增加兩倍,有業(yè)務(wù)影響時(shí)需調(diào)低線程數(shù)

        • 需要好流量評(píng)估:藍(lán)綠發(fā)布需一半節(jié)點(diǎn)承接線上流量、在應(yīng)用升級(jí)藍(lán)綠集群時(shí)做好確認(rèn)

        • 升級(jí)到特定版本:使用藍(lán)綠發(fā)布需要應(yīng)用升級(jí)到框架指定版本

        • Feign/HTTP流量:針對(duì)使用框架Feign的HTTP流量,需上下游應(yīng)用全部升級(jí)后方可使用

        • 使用Dubbo流量:使用框架Dubbo的服務(wù)只需要自身服務(wù)升級(jí)版本即可、無(wú)需上下游升級(jí)


        *文 / 瓜農(nóng)老梁

        ?
        瀏覽 43
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
          
          

            1. 91无码人妻一区二区成人AⅤ | 欧美日韩精品A∨一区二区三区电影 | 成人精品电影久久 | 亚洲电影久久久 | 毛片aaaaaa |