中国工商银行的 Service Mesh 探索与实践
作者:顧欣
微服務(wù)架構(gòu)是當(dāng)今互聯(lián)網(wǎng)和金融機(jī)構(gòu)漸趨主流的系統(tǒng)架構(gòu)模式,其核心是集成服務(wù)通信、服務(wù)治理功能的服務(wù)框架,微服務(wù)框架在持續(xù)演進(jìn)同時(shí),服務(wù)網(wǎng)格(Service Mesh)作為一種新型的微服務(wù)架構(gòu),因架構(gòu)靈活、普適性強(qiáng),被認(rèn)為具有較好發(fā)展前景。中國(guó)工商銀行(后簡(jiǎn)稱工行)主動(dòng)探索服務(wù)網(wǎng)格領(lǐng)域,從 2019 年開(kāi)始服務(wù)網(wǎng)格技術(shù)預(yù)研工作,通過(guò)對(duì)服務(wù)網(wǎng)格技術(shù)深入研究和實(shí)踐后,于 2021 年建設(shè)了服務(wù)網(wǎng)格平臺(tái)。服務(wù)網(wǎng)格與現(xiàn)有微服務(wù)架構(gòu)融合發(fā)展,助力工行應(yīng)用架構(gòu)向分布式、服務(wù)化轉(zhuǎn)型,承載未來(lái)開(kāi)放平臺(tái)核心銀行系統(tǒng)。
01
業(yè)界服務(wù)網(wǎng)格發(fā)展現(xiàn)狀
Cloud Native
自 2016 年服務(wù)網(wǎng)格技術(shù)誕生以來(lái),業(yè)界涌現(xiàn)了諸多的開(kāi)源產(chǎn)品,如 Istio(Google + IBM + Lyft)、Linkerd(Twitter)、Consul(Hashicorp)等。其中以 Istio 社區(qū)活躍度和認(rèn)可度最高,被作為服務(wù)網(wǎng)格的標(biāo)桿開(kāi)源產(chǎn)品。
服務(wù)網(wǎng)格是一個(gè)專門(mén)處理服務(wù)通訊的基礎(chǔ)設(shè)施層。它通過(guò)在業(yè)務(wù) Pod 中注入 Sidecar 容器,接管業(yè)務(wù)容器的通信流量,同時(shí) Sidecar 容器與網(wǎng)格平臺(tái)的控制平面對(duì)接,基于控制平面下發(fā)的策略,對(duì)代理流量實(shí)施治理和管控,將原有服務(wù)框架的治理能力下層到 Sidecar 容器中,從而實(shí)現(xiàn)了基礎(chǔ)框架能力的下沉,與業(yè)務(wù)系統(tǒng)解耦。
圖 1:服務(wù)網(wǎng)格示意圖
Sidecar 容器接管后端服務(wù)通信的進(jìn)出流量后,通過(guò)標(biāo)準(zhǔn)協(xié)議進(jìn)行服務(wù)間通信,可實(shí)現(xiàn)跨語(yǔ)言、跨協(xié)議的服務(wù)互訪。此外,Sidecar 容器可對(duì)代理的流量進(jìn)行管控,如統(tǒng)一的服務(wù)路由、安全加密、監(jiān)控采集等。
圖 2:服務(wù)網(wǎng)格請(qǐng)求流轉(zhuǎn)過(guò)程示意圖
02
服務(wù)網(wǎng)格技術(shù)在工行的
探索與實(shí)踐
Cloud Native
工行從 2015 年開(kāi)啟了 IT 架構(gòu)轉(zhuǎn)型工程,截止目前分布式體系已覆蓋 240 余個(gè)關(guān)鍵應(yīng)用,生產(chǎn)已有約超 48 萬(wàn)個(gè)提供方分布式服務(wù)節(jié)點(diǎn),日均服務(wù)調(diào)用量超 127 億,逐步實(shí)現(xiàn)了超越主機(jī)性能容量的集群處理能力。工行分布式服務(wù)平臺(tái)在穩(wěn)定支撐已有業(yè)務(wù)系統(tǒng)的平穩(wěn)運(yùn)行同時(shí),也存在一些業(yè)界共性的挑戰(zhàn),諸如:
1)跨語(yǔ)言技術(shù)棧的互聯(lián)互通需研發(fā)多套基礎(chǔ)框架,技術(shù)研發(fā)和維護(hù)成本高。
2)多產(chǎn)品線下,各應(yīng)用使用了不同版本的基礎(chǔ)框架,推動(dòng)各應(yīng)用升級(jí)框架周期較長(zhǎng),生產(chǎn)并行運(yùn)行多版本的基礎(chǔ)框架,兼容壓力較大。
為解決當(dāng)前痛點(diǎn),工行積極引入服務(wù)網(wǎng)格技術(shù),探索解耦業(yè)務(wù)系統(tǒng)與基礎(chǔ)設(shè)施,完善服務(wù)治理能力。
1
?與微服務(wù)框架融合發(fā)展,構(gòu)建企業(yè)級(jí)服務(wù)網(wǎng)格平臺(tái)
服務(wù)網(wǎng)格(Service Mesh)平臺(tái)在建設(shè)過(guò)程中,集成了原有分布式體系的注冊(cè)中心、服務(wù)監(jiān)控等基礎(chǔ)設(shè)施,將原服務(wù)框架客戶端中最基礎(chǔ)的通訊協(xié)議編解碼能力以輕量級(jí)客戶端的形式保留在業(yè)務(wù)系統(tǒng)中,其余服務(wù)框架客戶端的能力均下沉至 Sidecar 中,可與服務(wù)框架兼容發(fā)展,平滑過(guò)渡。目前工行已完成服務(wù)網(wǎng)格(Service Mesh)平臺(tái)的建設(shè),在與分布式服務(wù)平臺(tái)融合發(fā)展過(guò)程中,打通了異構(gòu)語(yǔ)言系統(tǒng)的服務(wù)治理與監(jiān)控體系,解耦了業(yè)務(wù)與中間件系統(tǒng),豐富了流量治理能力,并已在智能投顧、文字識(shí)別等應(yīng)用完成業(yè)務(wù)試點(diǎn)。
圖 3:服務(wù)網(wǎng)格邊車(chē)(Sidecar)與微服務(wù) SDK 對(duì)比圖
服務(wù)網(wǎng)格控制平面包含了配置中心、注冊(cè)中心、安全中心、管控中心、監(jiān)控中心、日志中心等模塊。數(shù)據(jù)平面 Sidecar 與原服務(wù)框架使用相同的通訊協(xié)議(Dubbo/Spring Cloud),支持服務(wù)網(wǎng)格系統(tǒng)與原服務(wù)框架系統(tǒng)互聯(lián)互通,平滑遷移。
圖 4:工行服務(wù)網(wǎng)格架構(gòu)圖
2
?探索企業(yè)級(jí)方案,支持規(guī)模化部署和平滑遷移
工行服務(wù)網(wǎng)格在大數(shù)據(jù)、高頻聯(lián)機(jī)等服務(wù)場(chǎng)景下,對(duì)流量代理部署模式、平滑遷移、性能優(yōu)化等方面開(kāi)展了落地實(shí)踐。
(1)大數(shù)據(jù)場(chǎng)景下的無(wú)侵入流量代理部署模式
工行應(yīng)用開(kāi)發(fā)語(yǔ)言主要使用 Java,但在大數(shù)據(jù)領(lǐng)域 Python 語(yǔ)言也被廣泛使用。針對(duì)異構(gòu)語(yǔ)言場(chǎng)景,服務(wù)網(wǎng)格平臺(tái)提供了無(wú)侵入透明劫持的流量代理方案,簡(jiǎn)化了異構(gòu)語(yǔ)言應(yīng)用接入難度。無(wú)侵入流量代理的核心是通過(guò)修改網(wǎng)絡(luò) Iptables 規(guī)則,強(qiáng)制攔截進(jìn)出業(yè)務(wù)容器的流量,并將這部分流量重定向至 Sidecar 容器。其具體實(shí)現(xiàn)為:在啟動(dòng)業(yè)務(wù) Pod 時(shí),通過(guò) Init Container(初始化容器)修改業(yè)務(wù) Pod 的網(wǎng)絡(luò) Iptables 規(guī)則,該規(guī)則讓進(jìn)出業(yè)務(wù)容器的流量都強(qiáng)制重定向至 Sidecar 容器,實(shí)現(xiàn) Sidecar 容器對(duì)業(yè)務(wù)容器的流量接管。
圖 5:透明劫持流量代理示意圖
但是 Iptables 對(duì)性能和可維護(hù)性都存在較大的挑戰(zhàn),故在聯(lián)機(jī)高頻服務(wù)場(chǎng)景,我們提供了輕量級(jí)客戶端與 Sidecar 協(xié)作的流量代理方案。
(2)高頻聯(lián)機(jī)場(chǎng)景下的低侵入流量代理部署模式
在聯(lián)機(jī)高頻服務(wù)場(chǎng)景,我們通過(guò)對(duì)業(yè)務(wù)應(yīng)用引入輕量級(jí)的客戶端,該客戶端在對(duì)業(yè)務(wù)透明的前提下,改變業(yè)務(wù)應(yīng)用的服務(wù)注冊(cè)發(fā)現(xiàn)行為,將原往注冊(cè)中心發(fā)起的服務(wù)注冊(cè)與訂閱的行為轉(zhuǎn)變?yōu)橥镜?127.0.0.1 的 Sidecar 地址發(fā)起服務(wù)注冊(cè)與訂閱,并由 Sidecar 代理向注冊(cè)中心發(fā)起服務(wù)注冊(cè)與訂閱。業(yè)務(wù)容器通過(guò) Sidecar 代理訂閱后,本地獲取的服務(wù)目的地址則為 127.0.0.1 的 Sidecar 地址,后續(xù)所有請(qǐng)求將會(huì)直接發(fā)往 Sidecar,再由 Sidecar 轉(zhuǎn)發(fā)至真實(shí)的服務(wù)目的地址,實(shí)現(xiàn)流量代理能力。
圖 6:端口流量代理示意圖
(3)傳統(tǒng)部署向網(wǎng)格化部署的平滑遷移
目前工行微服務(wù)主要有基于 Dubbo 和 Spring Cloud 兩種服務(wù)實(shí)例組成,且已在生產(chǎn)環(huán)境大規(guī)模運(yùn)行,在引入服務(wù)網(wǎng)格系統(tǒng)時(shí)需具備與原微服務(wù)系統(tǒng)的平滑過(guò)渡能力。工行通過(guò)服務(wù)網(wǎng)格系統(tǒng)同時(shí)支持 Dubbo 與 Spring cloud 協(xié)議,服務(wù)網(wǎng)格實(shí)例可與原服務(wù)框架實(shí)例通過(guò)相同協(xié)議互相訪問(wèn)。使在同一注冊(cè)中心下,服務(wù)網(wǎng)格系統(tǒng)與原分布式服務(wù)系統(tǒng)可融合發(fā)展,平滑過(guò)渡。
圖 7:平滑遷移示意圖
(4)規(guī)?;渴鸷蟮男阅芴魬?zhàn)與優(yōu)化
目前工行最大的注冊(cè)中心集群上有超 48 萬(wàn)提供者的超大規(guī)模業(yè)務(wù)場(chǎng)景,而在開(kāi)源 Isito 架構(gòu)中,服務(wù)發(fā)現(xiàn)的目的地址、配置信息等會(huì)通過(guò) Pilot 的 Xds API 進(jìn)行全量下發(fā)。在大量服務(wù)實(shí)例的情況下,全量下發(fā)會(huì)影響 Pilot 和 Sidecar 的性能和穩(wěn)定性。服務(wù)網(wǎng)格平臺(tái)通過(guò)引入第三方注冊(cè)中心與配置中心。由 Sidecar 直接對(duì)接注冊(cè)中心與配置中心,支持按需訂閱,配置精準(zhǔn)下發(fā),大幅降低 Pilot 和 Sidecar 壓力。通過(guò)壓測(cè),控制平面具備支持百萬(wàn)級(jí)實(shí)例的性能容量能力。
圖 8:工行控制面組件演進(jìn)圖
2
?構(gòu)建企業(yè)級(jí)服務(wù)治理能力,支持精準(zhǔn)流量管控
目前開(kāi)源 Istio 的流量治理能力極其有限,只有基礎(chǔ)的路由與可觀察性,無(wú)法滿足企業(yè)級(jí)的需求。SOFAMesh 基于 Istio 架構(gòu)設(shè)計(jì),自研數(shù)據(jù)面,并調(diào)優(yōu)部分控制面組件,可滿足企業(yè)落地需求,工行與 SOFAMesh 團(tuán)隊(duì)合作,建設(shè)了金融級(jí)的服務(wù)網(wǎng)格平臺(tái),并對(duì)流量管控能力進(jìn)行了企業(yè)級(jí)增強(qiáng)。工行服務(wù)網(wǎng)格已具備完善的監(jiān)控運(yùn)維能力,能監(jiān)控到各節(jié)點(diǎn)運(yùn)行時(shí)狀態(tài),支持對(duì)各節(jié)點(diǎn)進(jìn)行實(shí)時(shí)流量調(diào)撥,對(duì)于故障節(jié)點(diǎn)具備實(shí)時(shí)流量摘除能力,能對(duì)各節(jié)點(diǎn)進(jìn)行統(tǒng)一安全管控。
(1)監(jiān)控運(yùn)維能力
服務(wù)網(wǎng)格平臺(tái)內(nèi)置了完善的監(jiān)控與報(bào)警能力,支持向第三方監(jiān)控系統(tǒng)上報(bào)服務(wù)監(jiān)控、鏈路監(jiān)控等監(jiān)控指標(biāo);并具備根據(jù)單位時(shí)間內(nèi)的業(yè)務(wù)請(qǐng)求異常率閾值的報(bào)警,且能在觸發(fā)限流、熔斷、降級(jí)、故障自愈等服務(wù)治理功能時(shí),同步觸發(fā)對(duì)應(yīng)的報(bào)警事件。
(2)流量治理能力
服務(wù)網(wǎng)格平臺(tái)已具備細(xì)粒度的流量精準(zhǔn)匹配能力,從流量身份標(biāo)識(shí)角度識(shí)別特定標(biāo)識(shí)的流量合集,并對(duì)這部分流量進(jìn)行精準(zhǔn)管控。平臺(tái)現(xiàn)已支持(標(biāo)簽級(jí)/方法級(jí)/服務(wù)級(jí)/應(yīng)用級(jí))限流、熔斷、降級(jí)、路由、流量鏡像、鏈路加密、鑒權(quán)、故障演練、故障隔離等企業(yè)級(jí)的流量管控能力。
(3)故障自愈能力
傳統(tǒng)故障反饋依賴監(jiān)控報(bào)警后通過(guò)應(yīng)急預(yù)案臨時(shí)處置故障節(jié)點(diǎn),業(yè)務(wù)和運(yùn)維定制應(yīng)急預(yù)案的能力,強(qiáng)依賴有經(jīng)驗(yàn)的運(yùn)維工程師,新人上手成本高;且預(yù)案操作散落在文檔中,可維護(hù)性差,隨著業(yè)務(wù)迭代可能會(huì)逐步退化,增加操作復(fù)雜度。服務(wù)網(wǎng)格平臺(tái)提供了一套統(tǒng)一的基礎(chǔ)故障自愈系統(tǒng),以時(shí)間窗口內(nèi)的業(yè)務(wù)請(qǐng)求失敗率為黃金指標(biāo),輔助窗口期間最少調(diào)用次數(shù)、失敗率倍數(shù)等,實(shí)現(xiàn)常見(jiàn)故障自動(dòng)感知,自動(dòng)從客戶端或服務(wù)端側(cè)網(wǎng)絡(luò)隔離故障節(jié)點(diǎn),并在故障節(jié)點(diǎn)恢復(fù)后能網(wǎng)絡(luò)自恢復(fù),達(dá)到業(yè)務(wù)自愈的能力,提升了分布式系的運(yùn)維高可用能力。
圖 9:故障隔離工作圖
(4)安全管理能力
服務(wù)網(wǎng)格平臺(tái)已支持安全認(rèn)證能力,支持國(guó)密及多種主流算法構(gòu)建加密通道,實(shí)現(xiàn)更加安全的數(shù)據(jù)傳輸,以零信任網(wǎng)絡(luò)的安全態(tài)度,實(shí)現(xiàn)全鏈路可信、加密;并能識(shí)別調(diào)用方身份標(biāo)識(shí),根據(jù)身份標(biāo)識(shí)設(shè)置訪問(wèn)控制策略(黑/白名單)。在有多接入方的業(yè)務(wù)場(chǎng)景中,可預(yù)防個(gè)別客戶系統(tǒng)故障或者惡意攻擊,對(duì)異??蛻魧?shí)施黑名單管控,拒絕非法訪問(wèn),保護(hù)本系統(tǒng)的可用性。
圖 10:安全管控工作示意圖
03
未來(lái)展望
Cloud Native
服務(wù)網(wǎng)格作為云原生領(lǐng)域下一代微服務(wù)技術(shù),經(jīng)過(guò) 5 年多地演進(jìn),僅在個(gè)別頭部企業(yè)大規(guī)模生產(chǎn)實(shí)踐,以銀行為代表的金融同業(yè)中尚無(wú)成功案例。工行服務(wù)網(wǎng)格已完成多語(yǔ)言、異構(gòu)技術(shù)、邊緣場(chǎng)景的業(yè)務(wù)試點(diǎn),基本論證服務(wù)網(wǎng)格在流量管控、系統(tǒng)擴(kuò)展性的優(yōu)勢(shì),具有下沉服務(wù)治理能力到基礎(chǔ)設(shè)施層,高度解耦中間件與業(yè)務(wù)系統(tǒng)的可行性。后續(xù),工行將在全面總結(jié)前期試點(diǎn)經(jīng)驗(yàn)的基礎(chǔ)上,擴(kuò)大試點(diǎn)應(yīng)用范圍,充分論證服務(wù)網(wǎng)格技術(shù)在差異化的技術(shù)架構(gòu)、銀行多樣化業(yè)務(wù)場(chǎng)景的適應(yīng)性,同步打磨完善平臺(tái)能力,全面提升性能容量和穩(wěn)定性,為金融同業(yè)落地服務(wù)網(wǎng)格技術(shù)提供最佳實(shí)踐與示范。
往期推薦
數(shù)字化轉(zhuǎn)型下的銀行云單元架構(gòu)
漫畫(huà):據(jù)說(shuō)很多搞軟件的羨慕硬件工程師
一線大廠的企業(yè)云原生成本優(yōu)化實(shí)踐指南
源三:聊聊注冊(cè)中心在螞蟻集團(tuán)的降本提效之路
聊聊技術(shù)人的“績(jī)效考核”
敏捷效能提升的五大要素與誤區(qū)
Log4j2維護(hù)者吐槽沒(méi)工資還要挨罵,GO安全負(fù)責(zé)人建議開(kāi)源作者向公司收費(fèi)
億級(jí)流量架構(gòu)實(shí)戰(zhàn)之秒殺設(shè)計(jì)
精華:軟件架構(gòu)模式的7種武器
聊聊真正的架構(gòu)設(shè)計(jì)
總結(jié)
以上是生活随笔為你收集整理的中国工商银行的 Service Mesh 探索与实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 体谅你身边最爱的人
- 下一篇: 表同步更新的问题的触发器