實踐 | 百信銀行基礎設施容器化改造之路

語言: CN / TW / HK

【百度雲原生導讀】作為國內首家國有控股的網際網路銀行,百信銀行致力於用AI加速金融數字化、普惠化。在面臨傳統架構存在的彈性伸縮不夠、資源浪費嚴重等問題時,百信銀行藉助百度天合Stack容器雲平臺,完成了技術架構雲原生轉型與容器化落地,大大提升了資源使用效率和研發效率。

 

本文整理自百信銀行智慧雲部雲基礎設施團隊負責人王超在百度技術沙龍上進行的名為《銀行級客戶基礎設施容器化改造實踐》的演講,全文5300字,預計閱讀時間14分鐘。

 

1. 為什麼要做容器化改造?

 

1.1 百信銀行基礎設施現狀

 

首先,百信銀行(以下簡稱『百信』)的基礎設施架構是基於百度智慧雲和 OpenStack 開源專案按照金融行業標準和需求進行的加固訂製,可以部署和管理私有云基礎架構,對資料中心基礎設施的計算、網路等硬體資源進行虛擬化。

 

其次,百信當前的微服務治理架構中金融閘道器主要實現了 Mesh 的功能,包括服務的發現、治理、熔斷等。在此基礎上的服務治理平臺,會從金融閘道器載入相關配置和資料,包括監控平臺,交易監控、鏈路監控、APM、TPM等等,通過這些資料再做一些數字化運營、數字化分析、呼叫鏈分析等。

 

 

再者,百信的 DevOps 體系採用的是百度的效率雲產品,值得一提的是,銀行對測試環境比較嚴格,不同業務場景在不同環境的測試,跑通之後會推到準生產,然後再發起申請,通過審批後發到生產,最後是生產部署。會通過 ECC 傳統值班,7×24小時值班,電話通知告警等設定保證運維質量。

 

 

1.2 為什麼要做容器化改造?

 

問題1:當前 IaaS 彈性伸縮不夠敏捷。

 

百信從2017年發展至今,王超提到有幾個事件讓他印象深刻,存在的共同問題就是擴容週期較長:

 

 

問題2:計算資源長期使用不合理。2017-2018年百信處於野蠻發展推動業務的階段,業務要多少虛擬機器,就給多少。但是到2019-2020年,團隊發現基礎設施成本增長量和業務不再持平,全網的虛擬資源分配使用率不合理竟有50%以上。為什麼產生這個問題?

 

  • 申請資源不合理

  • 虛機擴容效率低

  • 虛機內應用混合部署問題

  • 跑批場景

 

何為跑批?指非業務高峰期批量完成一些比如報表的生成 , 定期儲蓄到期的自動轉存 , 行內行外業務清分清算等操作。

 

問題3:測試環境不穩定。百信的測試環境是多人共享的,有很多中後臺業務,比如銀行核心業務、使用者中心的業務,每個業務發版都可能會對上游造成影響。

 

如下圖所示給了一個例子,一個測試環境中包括ABC三個模組,如果C進行了改動,A、B就會有影響。換句話說,一個模組的變更可能會影響到其他業務的測試結果。

 

 

1.3 容器化改造方向

 

  • 滿足監管要求的前提下落地容器平臺

  • 對接行內已有的平臺系統。由於大量業務已經運行了4年,怎麼更平滑的遷移到新的平臺是一個挑戰

  • 推動業務容器化改造。

     

因此,除了業務改造要求,在容器化平臺選型上主要考慮:

 

  • 容器化平臺的穩定性與運維成本

  • 容器化平臺能否與百信當前系統的平滑對接

  • 容器化平臺未來是否可擴充套件,是否存在繫結

 

結合這些因素經過多輪比較,百信最終選擇了百度天合Stack容器雲平臺。百度天合容器雲平臺是企業級私有化部署的雲原生解決方案產品,既提供了 IaaS 資源管理、訪問控制等平臺管理能力。又支援應用託管、CI/CD變更管理、監控告警、應用市場,同時整合了AI任務排程、在離線混部、微服務治理等差異化產品力。可以提供先進的技術與平臺,幫助客戶降低容器化基礎設施搭建、應用部署與運維、DevOps 流水線構建等過程中的技術門檻和人力成本,平滑、低風險地實現雲原生應用開發和架構轉型。

 

同時天合Stack對硬體裝置、作業系統、機房網路、儲存、流量接入的適配都有比較成熟的解決方案。

 

下面我們詳細介紹一下百信使用天合Stack產品在基礎設施適配、業務容器改造最佳實踐

 

2. 容器化改造最佳實踐

 

2.1 基礎設施改造部分

 

  • 網路層面,當前百信的的虛機都跑在Overlay,採用VXLAN封裝,資料庫和整合閘道器跑在Underlay,百度的BVRouter作為三級閘道器打通Overlay和Underlay網路互訪。考慮到Pod 要暴露真實IP地址、Pod可固定IP地址、網路全路徑高可用等特定需求,可通過百度天合Stack提供的自研CNI外掛與BVR無縫對接,同時支援 Pod 指定固定IP

     

  • 儲存層面,無論檔案儲存、塊儲存還是物件儲存,在天合Stack平臺都預設提供了CSI外掛支援,容器可以直接使用。塊儲存CDS,虛機通過CDS Agent KVM的Driver實現I/O的讀寫;容器實現檔案儲存,實現共享的目的;

     

  • 負載均衡,使用BGW(百度的負載均衡裝置),service controller可通過list/watch機制動態更新 BGW 的配置和例項實現動態配置。另外除了LB對接對接nodeport的模式以外,天合Stack 還實現了Pod直連模式,進一步提升了網路傳輸效率。

 

此外,操作審計和監控告警層面也結合百信銀行的現有設施做了相應的改造。

 

2.2 CI/CD 及流水線

 

 

流水線建設的主要目標是對接百信現有CI/CD平臺並且保持現有流程不變,降低流程複雜度。

 

目前,當一個開發人員在申請資源時,首先從會TaaS(Test as a Service)平臺申請虛機/容器,有計算資源後可以做程式碼開發,之後通過效率雲進行程式碼構建、產出、製品庫、編譯等。

 

在虛機部署層面,通過 Jenkins 呼叫 ansible,將產出包放在虛機裡做一些指令碼,把它執行起來,在容器化,在程式碼層不做任何改動,把產出包拉過來加上自己的 DockerFile 做一個 Docker build,再把這個映象放在映象倉庫裡。

 

在上A環境(準生產)時增加了審批流,通過審批後呼叫天合平臺介面實現發版,A環境發完之後會推送 Docker 映象至生產環境,先由測試區到隔離區,再到生產區。

 

A環境發版完成並通過測試迴歸後,該版本將會推送到生產環境,流程審批通過後實現了生產環境自動化發版。

 

 

如何把主機房測試區的映象同步到生產機房?

 

在測試區,發完A環境之後給映象打一個標籤( tag: product-*),隔離區的 Docker Registry 配置一個策略:把帶有標籤的映象推到隔離區,生產區的映象倉庫對應也配置了一條策略,把映象從 Docker Registry 拉過來,這樣就實現了從測試環境到生產環境整條鏈路的映象同步。

 

2.3 自動化發版

 

 

百信當前已有一些平臺支援自動化發版,如上圖所示,在通過準生產環境測試後,該流程直接推送到生產發版平臺,接著可以在頁面上進行發版的編排,比如編排部分共有三臺虛機,可以做1-1-1(第一批發版一臺虛機,確認沒問題後再第二批發版一臺虛機,第三批發版一臺虛機)的釋出,或者1-2或者三臺全發,發完一臺虛機之後可以觀察當前的流量是否正常,觀測呼叫、APM等情況,包括回退和重試等功能,最後如果有問題還可以直接做回退操作。但是,以上發版過程是基於虛機的架構來做的。

 

 

百信聯合百度天合Stack團隊在應用變更功能上增加了容器分批發布能力。預設容器的原生策略只支援 Recreate 和 RollingUpdate,沒有暫停的功能,所以需要開發一個分批發布的功能,Deployment 觸發更新後就會 Hook 到分批發布模組,百信在自動化發版平臺中做了一個分批發布介面的呼叫:比如一個業務,它的 deployment 多個 Pod可以在第一步配置分批發布策略,第一批發幾臺,第二批發幾臺,然後在自動化發版平臺做展示,然後做逐批發布,支援分批迴退也可以全量回退。

 

2.4 生命週期管理

 

容器的生命週期管理功能主要包括:

 

  • poststart:優雅上線,註冊API GW

  • liveless:業務提供health探活介面

  • readless:業務提供ready探測介面

  • prestop:優雅下線,下線API GW

 

lifecycle:
            preStop:
              exec:
                command:
                  - '- /bin/bash'
                  - '- ''-c'''
                  - '- /opt/tools/bin/prestop.sh'
            postStart:
              exec:
                command:
                  - '- /bin/bash'
                  - '- ''-c'''
                  - '- /opt/tools/bin/poststart.sh'
          livenessProbe:
            periodSeconds: 30
            initialDelaySeconds: 60
            timeoutSeconds: 2
            httpGet:
              path: /app/health
              scheme: HTTP
          readinessProbe:
            periodSeconds: 30
            initialDelaySeconds: 60
            timeoutSeconds: 2
            httpGet:
              path: /app/ready
              scheme: HTTP

 

這樣可以基本解決彈性伸縮、成本控制問題,在業務剛上線的時候就可以給對方儘量小的計算資源,讓其實現彈性的擴容動作,並且基本無損。

 

2.5 儲存方案

 

銀行的業務主要分為聯機業務和跑批業務兩種,聯機業務主要是放貸、信貸、轉帳實時支付等,百信的底層架構基本以Tomcat、Java為主,都是無狀態應用,所以這一塊改造起來相對簡單。

 

 

跑批業務如上文所述更多的是做報表生成,清分清算等操作,需要用到上下游傳輸,持久化檔案,上圖展示了簡單的業務呼叫邏輯,相當於三個業務模組,A是最上游,它跑批完生成A的檔案,B需要A的檔案進行自己的跑批,C需要AB的檔案同時到達才進行跑批,這一塊,每個銀行都有檔案傳輸的工具、元件,百信通過一個FTS檔案傳輸平臺來完成這個任務,這個平臺在容器化改造中有一定的難度,主要存在兩個問題:

 

1.儲存空間嚴重浪費,一份完全相同的資料存N份

2.管理混亂,不同應用配置方式沒有標準,配置需要人為干預

 

為此百信提供了兩個方案:

 

1. 接CFS,把它的配置上配置中心,業務通過 deployment 正常部署,專門部署一個檔案傳輸的 Client Agent,掛載的PVC是同樣的儲存路徑,實現資料的共享等。

 

2. 考慮到檔案儲存處理大量小檔案存在的效能問題,我們提供了CDS塊裝置掛載到物理機,使用 daemonset hostpath 方式。

 

除了檔案傳輸,容器化改造的難點在於如何實現『一包到底』,百信銀行的測試環境分多個環境,每個環境的配置都不一樣,因為之前虛機的部署方式,所以配置沒有集中式的管理,總體來說,把配置打到程式碼庫裡,拉下的程式碼帶著配置一塊打包,在容器裡做一包到底改造,我們不可能在測試環境打一個包,到生產環境再打一次dockerbuild,這顯然不現實。

 

針對一包到底的問題,百度銀行採用了阿波羅架構,應用統一配置檔案及配置項名稱,把各個環境配置不同的環境變數,包括不同的A \C \D\核心生產環境,把所有的配置資訊上收,Tomcat、Java、JVM、MySQL、REDIS等等,在容器啟動的時候,提供了兩種方式,阿波羅本身提供自己的API方式,可以在程式碼裡直接呼叫,但是這一塊相當於對業務有改造。另外也提供了Shell指令碼的方式,把Shell指令碼的配置進行替換,如果它不在程式碼裡寫,在應用啟動之前,相當於把這個指令碼跑一遍,把最新配置拉下來,實現整個配置的替換。包括不同的環境,只是引數的不同,不同的環境在自己的環境變數都有配置。

 

 

以上整套架構的管理主要放在運維團隊,承擔各個應用不同部署單元的管理工作,開發如果需要提一些配置的改變,基本由應用運維團隊來完成。

 

2.6 測試環境快速複製

 

上文提到測試環境的痛點,通過容器化改造之後解決了此問題。之前的測試環境,任何一個節點有變動會影響它的上下游節點,如果每個人都有一套完整的測試環境,就沒有這個問題了。

 

要實現上述方案,百信需要解決幾個關鍵問題:

 

1. 梳理不同應用模組呼叫關係,給出環境最小化範圍

2. 應用、MySQL、REDIS、xmq資源全部容器化

3. 鋪底全量資料快速拉起,無需瞭解業務庫表結構

4. helm包管理實現容器資源快速部署

 

上圖是整體測試環境複製的自動化流程:包裝shell指令碼,把測試環境前一天的備份資料拉起來打包,在容器中啟動處理資料,再啟動應用,包括持久化的資料等等,針對不同環境的配置,在每一個環境裡都會搭建獨有的金融閘道器和配置中心,這樣避免不同的業務場景互相影響的問題,完全給所有的專案提供一套完整的測試開發環境。

 

3. 總結

 

簡單總結一下本文內容。首先介紹了百信銀行基礎設施現狀以及進行容器化改造的背景,然後詳細描述了落地過程中的一些實踐,通過整體改造,原先 IaaS 彈性伸縮不夠敏捷以及測試環境不穩定等問題都有了優化方案,希望能對讀者有所幫助。

 

今年,百信銀行雙活信貸業務將全面使用容器化部署,完成測試環境容器化改造。未來,會繼續推進關鍵業務雙活容器化部署,優化基礎設施的精細化管理。

 

關於百度天合Stack容器雲產品

幫助企業無論是在裸金屬還是虛擬化的環境中快速搭建企業容器雲平臺、微服務治理平臺以及函式計算平臺,同時整合百度智慧雲特色的AI框架、在離線混部和函式計算能力,助力企業構建先進的技術中臺以加速企業數字化轉型。

 

 

官網地址:

http://cloud.baidu.com/solution/cnap.html

 

- End -

 

掃碼新增小助手即可申請加入,一定要備註:名字-公司/學校-地區,根據格式備註,才能通過且邀請進群。

瞭解更多微服務、雲原生技術的相關資訊,請關注我們的微信公眾號【百度雲原生】