藍(lán)綠部署在G行移動(dòng)辦公平臺(tái)的應(yīng)用實(shí)踐
引言
G行移動(dòng)辦公平臺(tái)不僅承接了即時(shí)通訊的功能,更是各個(gè)辦公類應(yīng)用的服務(wù)入口,是全行人員實(shí)時(shí)溝通交流和日常移動(dòng)辦公的工作平臺(tái),因此對該平臺(tái)的安全運(yùn)營要求既要做到7*24小時(shí)無間斷服務(wù),又要做到快速響應(yīng)業(yè)務(wù)需求敏捷發(fā)布投產(chǎn)。為此,移動(dòng)辦公平臺(tái)基于容器化架構(gòu),通過采用藍(lán)綠部署,從而做到了無中斷、用戶無感的敏捷發(fā)布和長時(shí)間安全穩(wěn)定運(yùn)行。本文重點(diǎn)以移動(dòng)辦公平臺(tái)系統(tǒng)為例介紹G行藍(lán)綠部署落地實(shí)踐。
一、藍(lán)綠部署簡介
藍(lán)綠部署是一種通過運(yùn)行相同的環(huán)境來減少風(fēng)險(xiǎn)和故障時(shí)間的部署技術(shù)。這些環(huán)境被稱為藍(lán)色環(huán)境和綠色環(huán)境。其中只有一個(gè)環(huán)境是活動(dòng)環(huán)境,該環(huán)境服務(wù)于所有生產(chǎn)流量。
如圖1所示,在藍(lán)綠部署中,一共有兩套系統(tǒng):一套是正在給生產(chǎn)提供服務(wù)的系統(tǒng),標(biāo)記為“綠色環(huán)境”;另一套是準(zhǔn)備發(fā)布的系統(tǒng),標(biāo)記為“藍(lán)色環(huán)境”。這兩套系統(tǒng),只是系統(tǒng)版本和對外服務(wù)情況不同,正在對外提供服務(wù)的舊系統(tǒng)是綠色系統(tǒng),新部署的系統(tǒng)是藍(lán)色系統(tǒng)。
圖1 藍(lán)綠部署示意圖
藍(lán)色環(huán)境不對外提供服務(wù),用來做什么?
- 用來做發(fā)布前的測試工作,測試過程中發(fā)現(xiàn)的任何問題可以在藍(lán)色環(huán)境上進(jìn)行修改,不干擾用戶正在使用的系統(tǒng)。
- 用來做發(fā)布后的驗(yàn)證工作,經(jīng)過驗(yàn)證確定達(dá)到上線標(biāo)準(zhǔn)之后,直接將用戶切到藍(lán)色環(huán)境,切換后的一段時(shí)間內(nèi),仍舊是藍(lán)綠兩套環(huán)境并存,但是用戶訪問的已經(jīng)是藍(lán)色環(huán)境。這段時(shí)間內(nèi)觀察藍(lán)色環(huán)境的工作狀態(tài),如果出現(xiàn)問題,直接切回到綠色環(huán)境。
- 當(dāng)確信對外提供服務(wù)的藍(lán)色環(huán)境工作正常,不對外提供服務(wù)的綠色環(huán)境已經(jīng)不再需要的時(shí)候,藍(lán)色環(huán)境可以正式成為對外提供服務(wù)的環(huán)境,成為新的綠色環(huán)境。原先的綠色環(huán)境可以將資源釋放出來,用來部署下一個(gè)藍(lán)色環(huán)境。
藍(lán)綠部署的目的是減少發(fā)布的中斷時(shí)間,發(fā)布出現(xiàn)問題后可以快速撤回發(fā)布,兩套環(huán)境沒有耦合的時(shí)候才能百分百保證不干擾。
二、為什么要選擇藍(lán)綠部署
藍(lán)綠部署技術(shù)能夠有效的提升用戶體驗(yàn),保障業(yè)務(wù)連續(xù)性,對安全運(yùn)營有較大的意義,以下將從部署優(yōu)點(diǎn)和選型要求兩個(gè)方面介紹移動(dòng)辦公平臺(tái)(簡稱GDJ)選擇藍(lán)綠部署的原因。
1、藍(lán)綠部署的優(yōu)點(diǎn)
藍(lán)綠部署有以下幾個(gè)優(yōu)點(diǎn),這些優(yōu)點(diǎn)可以充分應(yīng)對當(dāng)前安全運(yùn)營面臨的挑戰(zhàn),無縫升級和隨時(shí)部署對用戶無感發(fā)布,減少版本部署帶來的風(fēng)險(xiǎn)。切換方便和瞬間回滾、縮短回退時(shí)長,迅速從故障場景中恢復(fù),最大限度保障系統(tǒng)高可用性。
- 無縫升級:藍(lán)綠部署通過在新的生產(chǎn)環(huán)境中測試新版本應(yīng)用程序,盡早發(fā)現(xiàn)應(yīng)用程序發(fā)布后的缺陷。如果系統(tǒng)運(yùn)行符合預(yù)期,可以在沒有中斷的情況下切換到新環(huán)境,無縫升級,對用戶無感知。
- 瞬間回滾:如果版本發(fā)布后出現(xiàn)問題,可以通過切換藍(lán)綠環(huán)境很容易地回滾到舊版本。這種方式可以避免對用戶產(chǎn)生負(fù)面影響,并保證系統(tǒng)的高可用性。
- 隨時(shí)部署:使用藍(lán)綠部署可以隨時(shí)發(fā)布應(yīng)用,版本上線時(shí)間不受停機(jī)窗口與時(shí)間的限制,無需等待維護(hù)窗口,為應(yīng)用的快速發(fā)布提供了有利的支撐。
- 切換方便:藍(lán)綠部署具備瞬間切換的能力,新版本驗(yàn)證完成后,用戶可以快速切換到新版本。
- 配合灰度發(fā)布:藍(lán)綠部署可以配合灰度發(fā)布使用。灰度發(fā)布可以逐步將新版本應(yīng)用程序部署到生產(chǎn)環(huán)境中的一小部分用戶中,以確保新版本應(yīng)用程序可以正常運(yùn)行。這種方式可以避免出現(xiàn)系統(tǒng)范圍內(nèi)的問題,降低應(yīng)用程序缺陷帶來的風(fēng)險(xiǎn),并逐步將新版本應(yīng)用程序發(fā)布給所有用戶。
2、什么樣的架構(gòu)適合藍(lán)綠部署
為了支持藍(lán)綠部署,系統(tǒng)應(yīng)當(dāng)滿足如下的架構(gòu)設(shè)計(jì)要求:
- 應(yīng)用無狀態(tài):在藍(lán)綠部署中,新版本的應(yīng)用程序被部署到藍(lán)色環(huán)境中,而舊版本的應(yīng)用程序繼續(xù)在綠色環(huán)境中運(yùn)行。因此,應(yīng)用必須是無狀態(tài)的,即新版本的應(yīng)用程序可以無縫地接替舊版本的應(yīng)用程序,而不會(huì)出現(xiàn)數(shù)據(jù)丟失或者不一致的狀態(tài)。應(yīng)用程序的無狀態(tài)也可以保證在運(yùn)行實(shí)例之間無縫切換,而不會(huì)丟失狀態(tài),這通常需要使用到無狀態(tài)微服務(wù)。
- 可擴(kuò)展性強(qiáng):系統(tǒng)架構(gòu)應(yīng)該能支持運(yùn)行多個(gè)實(shí)例,以便同時(shí)運(yùn)行兩個(gè)環(huán)境,且系統(tǒng)橫向擴(kuò)展簡單,操作快速。如果一個(gè)系統(tǒng)部署組件復(fù)雜,本身的可擴(kuò)展性較差,那么將會(huì)給藍(lán)綠部署改造和切換帶來諸多困難。
- 負(fù)載均衡:系統(tǒng)應(yīng)該能夠自動(dòng)分配流量到藍(lán)色環(huán)境和綠色環(huán)境,以確保平滑的流量轉(zhuǎn)換。這通常需要使用負(fù)載均衡器。
- 自動(dòng)化程度高:藍(lán)綠部署在自動(dòng)化程度高的系統(tǒng)下可以起到事半功倍的作用。使得自動(dòng)化的構(gòu)建、測試、部署和回滾可以更加快速、可靠。
正是由于藍(lán)綠部署自身的諸多優(yōu)點(diǎn),以及移動(dòng)辦公平臺(tái)本身具有應(yīng)用無狀態(tài)、基于容器化的微服務(wù)橫向高可擴(kuò)展性架構(gòu)、通過反向代理服務(wù)器進(jìn)行負(fù)載均衡轉(zhuǎn)發(fā)請求的特點(diǎn),決定了移動(dòng)辦公平臺(tái)適用藍(lán)綠部署的方式。
三、藍(lán)綠部署實(shí)踐
結(jié)合G行移動(dòng)辦公平臺(tái),從應(yīng)用架構(gòu)改造、應(yīng)用部署原則、藍(lán)綠環(huán)境切換策略、應(yīng)用驗(yàn)證幾個(gè)方面介紹藍(lán)綠部署落地實(shí)踐過程。
1、應(yīng)用架構(gòu)改造
移動(dòng)辦公平臺(tái)原有物理架構(gòu)如圖2所示,反向代理服務(wù)器將來自互聯(lián)網(wǎng)區(qū)域的https請求轉(zhuǎn)發(fā)至webserver,由其將請求交由后臺(tái)服進(jìn)行簡單處理并和數(shù)據(jù)庫服務(wù)器等完成一系列的交互。在原有架構(gòu)中業(yè)務(wù)處理層中的后臺(tái)服務(wù)只有一套容器環(huán)境,數(shù)據(jù)層數(shù)據(jù)庫相關(guān)機(jī)器為虛擬機(jī)。改造的核心在于業(yè)務(wù)處理層復(fù)制新增一套容器環(huán)境,兩套完全不耦合的容器環(huán)境共用一套數(shù)據(jù)庫服務(wù)器,避免兩套系統(tǒng)之間的業(yè)務(wù)數(shù)據(jù)不一致,以及如何同步等帶來的復(fù)雜性問題。
圖2 舊有架構(gòu)
在藍(lán)綠環(huán)境改造的過程中,接入層和業(yè)務(wù)處理層原有的反向代理服務(wù)器以及webserver等物理機(jī)不發(fā)生變動(dòng),業(yè)務(wù)處理層橫向擴(kuò)展一套后臺(tái)服務(wù)獨(dú)立的容器環(huán)境作為藍(lán)色環(huán)境,與原有的生產(chǎn)環(huán)境構(gòu)成藍(lán)綠環(huán)境供藍(lán)綠部署以及生產(chǎn)使用,同時(shí)需要開通網(wǎng)絡(luò)訪問關(guān)系保證網(wǎng)絡(luò)可達(dá)。為了應(yīng)對兩套環(huán)境可能給數(shù)據(jù)庫內(nèi)存等帶來的壓力,數(shù)據(jù)層數(shù)據(jù)庫相關(guān)的機(jī)器也需要從虛擬機(jī)遷移到物理機(jī)器上。移動(dòng)辦公平臺(tái)改造后的架構(gòu)如圖3所示,來自于webserver的流量具備到達(dá)其中任意一套環(huán)境的條件,并在兩套環(huán)境中可以隨時(shí)進(jìn)行切換。
圖3 現(xiàn)有架構(gòu)
2、應(yīng)用部署原則
在前文藍(lán)綠部署簡介中,應(yīng)用部署只需在藍(lán)環(huán)境中進(jìn)行,藍(lán)綠環(huán)境相差一個(gè)版本,但是基于金融行業(yè)的行業(yè)特殊性,針對移動(dòng)辦公平臺(tái)藍(lán)綠部署我們制定了以下的原則。
- 針對涉及安全漏洞修復(fù)的應(yīng)用發(fā)布首先在綠環(huán)境進(jìn)行部署,等待穩(wěn)定運(yùn)行后盡快在藍(lán)環(huán)境進(jìn)行同樣的部署,藍(lán)綠環(huán)境版本相同,這是基于金融行業(yè)對安全性的較高要求所決定的。
- 不涉及安全漏洞修復(fù)的應(yīng)用發(fā)布則只需在藍(lán)環(huán)境進(jìn)行部署。后續(xù)擇機(jī)在綠環(huán)境當(dāng)中進(jìn)行部署。
3、藍(lán)綠環(huán)境切換策略
移動(dòng)辦公平臺(tái)的藍(lán)綠環(huán)境切換支持多種方式,主要有用戶切換和流量切換兩種方式,用戶切換對用戶歸屬環(huán)境進(jìn)行切換,不同環(huán)境下具有不同的用戶。流量切換將請求進(jìn)行切換,實(shí)現(xiàn)對不同的請求轉(zhuǎn)發(fā)至指定環(huán)境。
- 用戶切換
用戶切換的動(dòng)作是在移動(dòng)辦公平臺(tái)系統(tǒng)的管理控制臺(tái)中通過將對應(yīng)的用戶和機(jī)構(gòu)添加至相應(yīng)的環(huán)境來完成操作,其本質(zhì)是修改數(shù)據(jù)庫當(dāng)中藍(lán)綠環(huán)境下的用戶信息表決定環(huán)境下哪些用戶。這樣當(dāng)藍(lán)環(huán)境部署完畢之后可以將部分或者全部用戶添加至此環(huán)境,完成用戶的切換動(dòng)作。
- 流量切換
流量切換工作,是通過修改反向代理服務(wù)器的配置文件完成的,修改配置文件后,需要重新加載新的配置文件以生效新地址后進(jìn)行流量切換。配置文件通過reload的方式進(jìn)行,也可以選擇restart的方式,但是restart的方式會(huì)重啟服務(wù)。這個(gè)重啟會(huì)造成服務(wù)一瞬間的中斷,造成原有請求無法正常返回。通過reload的方式加載新的配置文件,反向代理服務(wù)是不會(huì)中斷的,新的請求會(huì)導(dǎo)向藍(lán)環(huán)境,而原有已經(jīng)進(jìn)入綠環(huán)境的請求,已經(jīng)建立到綠環(huán)境后端服務(wù)器的通信信道不會(huì)中斷,直到原有請求處理完成返回結(jié)束。在流量切換的瞬間是不會(huì)對原有請求造成影響。通過修改配置以及reload生效后,反向代理將請求默認(rèn)轉(zhuǎn)發(fā)到藍(lán)環(huán)境完成請求流量的切換動(dòng)作。
4、應(yīng)用驗(yàn)證
應(yīng)用部署完畢后,對藍(lán)綠環(huán)境進(jìn)行切換,藍(lán)環(huán)境將承擔(dān)生產(chǎn)所有流量,承載真實(shí)業(yè)務(wù)。此時(shí),必須高度關(guān)注應(yīng)用的驗(yàn)證情況,如果發(fā)現(xiàn)驗(yàn)證出問題,或者運(yùn)行指標(biāo)有下降,則需要及時(shí)進(jìn)行應(yīng)急處理,應(yīng)用的主要驗(yàn)證方式有兩種,一種是交易量驗(yàn)證,一種是日志驗(yàn)證。
- 交易量驗(yàn)證
移動(dòng)辦公平臺(tái)架構(gòu)改造新增藍(lán)環(huán)境之后,同時(shí)需要完善相應(yīng)的生產(chǎn)監(jiān)控策略。依托于G行BPC監(jiān)控系統(tǒng),改造之后在BPC交易中新增藍(lán)環(huán)境交易鏈路監(jiān)控,健全對全鏈路交易的監(jiān)控策略,補(bǔ)充交易量、成功率,響應(yīng)率,響應(yīng)時(shí)間等監(jiān)控指標(biāo)。在藍(lán)綠環(huán)境切換后可以通過對交易量的監(jiān)控驗(yàn)證生產(chǎn)流量切換是否成功。如圖4所示,切換成功后,可以看到一邊環(huán)境的交易量已下降為零。
圖4 BPC交易量驗(yàn)證
- 日志驗(yàn)證
通過對反向代理服務(wù)器日志中的請求標(biāo)簽進(jìn)行捕捉,在切換后相應(yīng)標(biāo)簽的關(guān)鍵字隨著時(shí)間的推移將越來越多,請求已全部轉(zhuǎn)發(fā)至指定環(huán)境。
圖5 日志驗(yàn)證
四、藍(lán)綠部署帶來的收益
藍(lán)綠部署的使用為移動(dòng)辦公平臺(tái)應(yīng)用版本的發(fā)布帶來了諸多收益,其主要收益有以下幾點(diǎn):一是變更開始時(shí)間不再受限,由之前的凌晨24點(diǎn)業(yè)務(wù)低峰期前移至下午18點(diǎn),即使是在緊急情況下辦公業(yè)務(wù)高峰性也可以進(jìn)行變更操作。二是系統(tǒng)回退時(shí)間大幅縮短,未使用藍(lán)綠部署之前,回退需要重新在容器云部署舊版本并進(jìn)行啟停操作,單AZ回退花費(fèi)時(shí)間15分鐘,當(dāng)前版本回退只需進(jìn)行藍(lán)綠環(huán)境的切換,切換時(shí)長只需3分鐘左右,應(yīng)急回退能力得到顯著提升。三是版本無感發(fā)布,不會(huì)對用戶的正常使用產(chǎn)生影響,提升用戶使用體驗(yàn)。
五、行業(yè)應(yīng)用現(xiàn)狀
藍(lán)綠部署是銀行業(yè)應(yīng)用部署中的一種重要策略,可以確保應(yīng)用程序的高可用性、高性能和高可靠性,從而幫助銀行實(shí)現(xiàn)業(yè)務(wù)運(yùn)營的穩(wěn)定和可持續(xù)發(fā)展。在銀行的應(yīng)用現(xiàn)狀中,許多銀行已經(jīng)采用了藍(lán)綠部署策略來管理其核心應(yīng)用程序的部署和更新。這些應(yīng)用程序包括交易系統(tǒng)、支付系統(tǒng)等。
在互聯(lián)網(wǎng)廠商當(dāng)中,藍(lán)綠部署已經(jīng)成為了許多云原生應(yīng)用開發(fā)和部署的標(biāo)準(zhǔn)實(shí)踐之一。大多數(shù)云服務(wù)提供商(如AWS、Azure、Google Cloud等)都提供了藍(lán)綠部署的相關(guān)服務(wù)和工具,如AWS CodeDeploy、Azure DevOps等。此外,也有很多第三方開源工具和框架,如Spinnaker、Jenkins、Kubernetes等,都支持藍(lán)綠部署的實(shí)現(xiàn)。
總結(jié)與展望
本文從藍(lán)綠部署的概念、特點(diǎn)以及應(yīng)用部署三個(gè)方面介紹了藍(lán)綠部署在G行移動(dòng)辦公平臺(tái)的應(yīng)用實(shí)踐。藍(lán)綠部署為移動(dòng)辦公平臺(tái)新版本的發(fā)布帶來了廣泛的便利性,新版本上線時(shí)間由原來的深夜大幅前移至業(yè)務(wù)低峰時(shí)段。未來隨著G行IT架構(gòu)轉(zhuǎn)型的持續(xù)深入,越來越多的系統(tǒng)將部署在全棧云平臺(tái)。依托于全棧云容器平臺(tái)以及藍(lán)綠部署等一系列持續(xù)發(fā)布的新技術(shù),應(yīng)用系統(tǒng)新版本的無中斷隨時(shí)上線將得到深入的推廣,為用戶的使用帶來更好的體驗(yàn)。