
近年來(lái),銀行業(yè)因?yàn)辇嫶蟮臉I(yè)務(wù)體量和業(yè)務(wù)發(fā)展需求,紛紛投入微服務(wù)架構(gòu)的建設(shè)中。但隨著業(yè)務(wù)系統(tǒng)向微服務(wù)架構(gòu)的轉(zhuǎn)型,隨之便產(chǎn)生了諸如微服務(wù)統(tǒng)一管控和治理這類令人頭疼的問(wèn)題。
為了解決這類問(wèn)題,開(kāi)源的Spring Boot/Cloud生態(tài)提供了大量開(kāi)源的組件,雖然它們經(jīng)歷了市場(chǎng)考驗(yàn),但存在一些共同的缺點(diǎn),如各個(gè)組件缺乏有機(jī)的企業(yè)級(jí)集成、內(nèi)置功能不能滿足金融行業(yè)應(yīng)用的特性等等。
對(duì)于金融企業(yè)來(lái)說(shuō)開(kāi)源解決方案并不能完全滿足企業(yè)自身的現(xiàn)狀和要求,甚至無(wú)法滿足技術(shù)上的自主可控訴求,這也造成了金融企業(yè)在使用開(kāi)源解決方案的同時(shí),需要投入大量的資源對(duì)開(kāi)源解決方案和開(kāi)源組件進(jìn)行二次開(kāi)發(fā)和定制,甚至是修改開(kāi)源組件源代碼。
那該如何有效解決這類問(wèn)題呢?
實(shí)踐出真知,長(zhǎng)亮科技結(jié)合多年在銀行核心領(lǐng)域的積累及業(yè)內(nèi)先進(jìn)技術(shù)經(jīng)驗(yàn),總結(jié)并實(shí)現(xiàn)了面向金融業(yè)務(wù)系統(tǒng)的微服務(wù)治理體系,讓我們一起看看,長(zhǎng)亮科技在這方面經(jīng)驗(yàn)與見(jiàn)解。
如何構(gòu)建面向金融業(yè)務(wù)系統(tǒng)的微服務(wù)治理體系?
面向金融業(yè)務(wù)系統(tǒng)的微服務(wù)治理體系主要圍繞服務(wù)管理、服務(wù)觀測(cè)、服務(wù)預(yù)警、服務(wù)控制幾大領(lǐng)域,提供服務(wù)全生命周期管理、數(shù)字化運(yùn)維、立體化監(jiān)控、細(xì)粒度服務(wù)治理等功能,以解決開(kāi)發(fā)人員、運(yùn)維人員、SRE、架構(gòu)師等多方痛點(diǎn),全方位提升工作效率。
要想實(shí)現(xiàn)統(tǒng)一的企業(yè)級(jí)微服務(wù)治理平臺(tái),整個(gè)體系需要以層級(jí)結(jié)構(gòu)進(jìn)行建設(shè):
● 管控層:提供平臺(tái)用戶統(tǒng)一視角的管理控制臺(tái),通過(guò)前后端分離模式將治理控制臺(tái)和治理功能服務(wù)拆分;
● 集成層:主要針對(duì)微服務(wù)應(yīng)用提供治理服務(wù)集成能力,主要包括客戶端集成SDK、客戶端性能和鏈路探針、客戶端日志收集代理;
● 服務(wù)層:對(duì)業(yè)務(wù)微服務(wù)提供治理能力的服務(wù)層,包含平臺(tái)后端的主要業(yè)務(wù)邏輯,并對(duì)中間件提供的服務(wù)進(jìn)行封裝與定制;
● 中間件層:平臺(tái)所依賴的中間件,以開(kāi)源為主,二次開(kāi)發(fā)和私有實(shí)現(xiàn)為輔,包括注冊(cè)中心、配置中心、治理中心、網(wǎng)關(guān)中心、監(jiān)控中心、日志中心、告警中心等;
● 數(shù)據(jù)層:為平臺(tái)中的非業(yè)務(wù)參數(shù)提供數(shù)據(jù)存儲(chǔ),根據(jù)治理數(shù)據(jù)的特性和使用場(chǎng)景分為結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù),分別采用對(duì)應(yīng)的SQL和NoSQL存儲(chǔ);
● 基礎(chǔ)設(shè)施層:平臺(tái)在部署方面支持X86物理機(jī)、虛擬機(jī)環(huán)境部署,支持公有云、私有云和混合云的虛擬機(jī)部署,支持基于Docker環(huán)境的容器化部署,支持基于Kubernetes的容器云環(huán)境部署。

深度剖析企業(yè)級(jí)微服務(wù)治理體系四大核心領(lǐng)域設(shè)計(jì)
1.微服務(wù)統(tǒng)一管理
提供一套圍繞業(yè)務(wù)應(yīng)用和基礎(chǔ)組件的管理體系。在業(yè)務(wù)應(yīng)用管理方面,提供從域、系統(tǒng)、分區(qū)、應(yīng)用和單元(集群)等多維度管理方案,進(jìn)而細(xì)粒度的控制業(yè)務(wù)應(yīng)用接入;在基礎(chǔ)組件管理方面,可以對(duì)組件資源進(jìn)行統(tǒng)一管理,做到應(yīng)用零配置化即可使用組件。

● 平臺(tái)上對(duì)基礎(chǔ)組件資源的統(tǒng)一管理,為業(yè)務(wù)應(yīng)用提供的SDK可以更簡(jiǎn)單的接入到這些基礎(chǔ)組件。
■ 將微服務(wù)架構(gòu)運(yùn)行期所需要的各種基礎(chǔ)組件,如注冊(cè)中心、配置中心、API網(wǎng)關(guān)、分布式緩存、分布式消息等,通過(guò)平臺(tái)區(qū)域控制服務(wù)統(tǒng)一接管,為企業(yè)級(jí)架構(gòu)提供統(tǒng)一視角的基礎(chǔ)組件資源管理。

■ 將業(yè)務(wù)應(yīng)用集成這些基礎(chǔ)組件所需要的各種客戶端Starter包裝成一個(gè)簡(jiǎn)單且統(tǒng)一的客戶端Starter,利用Spring Boot內(nèi)置的監(jiān)聽(tīng)器機(jī)制,在業(yè)務(wù)應(yīng)用啟動(dòng)時(shí)可以連接到平臺(tái)上以此來(lái)獲取連接這些組件資源所需要的各種參數(shù),在這個(gè)過(guò)程中也可以通過(guò)Token機(jī)制實(shí)現(xiàn)對(duì)組件資源的訪問(wèn)權(quán)限控制,即降低了業(yè)務(wù)應(yīng)用集成這些基礎(chǔ)組件的配置參數(shù)管理難度,也提高了對(duì)基礎(chǔ)組件使用的安全管控能力。

● 通過(guò)在平臺(tái)上創(chuàng)建的系統(tǒng)/應(yīng)用/集群/實(shí)例這樣的模型結(jié)構(gòu),讓接入到微服務(wù)治理平臺(tái)的業(yè)務(wù)應(yīng)用可以按照預(yù)期分拆的微服務(wù)運(yùn)行,以此來(lái)做到對(duì)微服務(wù)應(yīng)用規(guī)范強(qiáng)管控。
2. 運(yùn)行期統(tǒng)一觀測(cè)
對(duì)運(yùn)行狀態(tài)的微服務(wù)應(yīng)用采用APM模塊實(shí)現(xiàn)對(duì)健康狀態(tài)、性能狀態(tài)監(jiān)控、鏈路追蹤、應(yīng)用日志分析、API接口管理等多維度實(shí)現(xiàn)統(tǒng)一的觀測(cè)手段。

● 實(shí)例探測(cè):Spring Boot原生提供了Actuator組件來(lái)暴露運(yùn)行期的各種狀態(tài)級(jí)數(shù)據(jù)指標(biāo),包括實(shí)例信息、啟動(dòng)環(huán)境、配置數(shù)據(jù)、Bean加載信息、端點(diǎn)映射、日志級(jí)別等,同時(shí)也暴露了一些敏感且不安全的端點(diǎn),如停止操作、數(shù)據(jù)庫(kù)密碼等。在利用Actuator組件實(shí)現(xiàn)實(shí)例狀態(tài)檢測(cè)功能的同時(shí),需要將這些存在不安全的端點(diǎn)進(jìn)行屏蔽,同時(shí)在這類端點(diǎn)上增加訪問(wèn)安全權(quán)限控制,讓該組件可以在安全可控的范圍內(nèi)為微服務(wù)治理觀測(cè)提供實(shí)例健康狀態(tài)探測(cè)相關(guān)特性能力。

● 性能監(jiān)控:為了實(shí)現(xiàn)對(duì)業(yè)務(wù)應(yīng)用的零代碼侵入,可采用Java探針技術(shù)實(shí)現(xiàn)對(duì)微服務(wù)應(yīng)用的性能數(shù)據(jù)采集,如Skywalking APM Agent;從應(yīng)用、集群、端口等維度收集性能數(shù)據(jù),性能數(shù)據(jù)包括但不局限于:服務(wù)可用級(jí)別、響應(yīng)時(shí)間、每分鐘調(diào)用數(shù)、百分位響應(yīng)耗時(shí)、CPU、內(nèi)存、GC情況等。應(yīng)用實(shí)例通過(guò)平臺(tái)SDK注冊(cè)到平臺(tái)獲取到APM組件信息,通過(guò)APM組件客戶端對(duì)APM組件進(jìn)行相關(guān)初始化操作,之后依托Agent字節(jié)碼增強(qiáng)技術(shù)在相應(yīng)位置進(jìn)行埋點(diǎn),定時(shí)將性能數(shù)據(jù)推送至APM組件進(jìn)行分析并持久化;平臺(tái)本身通過(guò)訪問(wèn)APM組件暴露的端點(diǎn)獲取相關(guān)性能數(shù)據(jù)。

● 鏈路追蹤:與性能監(jiān)控探針技術(shù)類似,利用Java探針技術(shù),遵循OpenTracing標(biāo)準(zhǔn),收集全鏈路數(shù)據(jù),并分析鏈路數(shù)據(jù)形成調(diào)用拓?fù)洌粦?yīng)用實(shí)例通過(guò)平臺(tái)SDK注冊(cè)到平臺(tái)獲取到APM組件信息,通過(guò)APM組件客戶端對(duì)APM組件進(jìn)行相關(guān)初始化操作,之后依托Agent字節(jié)碼增強(qiáng)技術(shù)在相應(yīng)位置進(jìn)行埋點(diǎn),定時(shí)將鏈路數(shù)據(jù)推送至APM組件進(jìn)行分析并持久化,同時(shí)將MDC信息填充到日志,從而實(shí)現(xiàn)鏈路與日志的聯(lián)動(dòng);平臺(tái)本身通過(guò)訪問(wèn)APM組件暴露的端點(diǎn)獲取相關(guān)鏈路數(shù)據(jù)。

● 應(yīng)用日志分析:在日志收集和分析領(lǐng)域EFK是普遍采用的技術(shù)方案,但在應(yīng)用日志分析的落地使用上,應(yīng)用日志規(guī)范才是其核心的價(jià)值體系,對(duì)于企業(yè)級(jí)微服務(wù)日志觀測(cè)方面,日志規(guī)范體系需要在日志組件上落地以此作強(qiáng)規(guī)范約束;將規(guī)范中的某些關(guān)鍵數(shù)據(jù)以MDC方式注入,并按標(biāo)準(zhǔn)輸出到日志文件,日志收集組件到指定路徑收集日志數(shù)據(jù)推送至日志分析組件,日志分析組件按規(guī)范解析日志數(shù)據(jù)并進(jìn)行持久化;平臺(tái)通過(guò)日志分析服務(wù)獲取日志數(shù)據(jù)。


● API:通過(guò)Swagger組件獲取應(yīng)用實(shí)例運(yùn)行時(shí)暴露的端點(diǎn)信息,從而進(jìn)行在線接口調(diào)試;應(yīng)用實(shí)例通過(guò)平臺(tái)SDK注冊(cè)到平臺(tái)獲取相關(guān)服務(wù)資源,之后正常啟動(dòng)實(shí)例,實(shí)例啟動(dòng)完成回調(diào)平臺(tái)接口通知平臺(tái)來(lái)拉取API數(shù)據(jù),平臺(tái)接收到API數(shù)據(jù)拉取通知之后調(diào)用應(yīng)用實(shí)例特定端點(diǎn)獲取API數(shù)據(jù)并持久化;平臺(tái)通過(guò)對(duì)API數(shù)據(jù)進(jìn)行分析,從而實(shí)現(xiàn)對(duì)應(yīng)用實(shí)例API接口進(jìn)行在線調(diào)試功能。
3. 健康狀態(tài)統(tǒng)一預(yù)警
從性能數(shù)據(jù)和日志數(shù)據(jù)出發(fā),提供性能告警和日志告警功能,結(jié)合靈活的告警規(guī)則可以針對(duì)不同業(yè)務(wù)場(chǎng)景產(chǎn)生與之相對(duì)應(yīng)的告警,并在觸發(fā)告警之后提供一套完善的告警事件處理體系,包括告警事件標(biāo)記、告警事件推送等。

● 性能告警:通過(guò)管控端配置告警規(guī)則提交到告警管理模塊落庫(kù)持久化,同時(shí)將告警規(guī)則推送至配置中心,性能告警組件依賴配置中心可以動(dòng)態(tài)感知告警規(guī)則的變化并實(shí)時(shí)生效,然后在APM預(yù)處理接收的性能指標(biāo)數(shù)據(jù)時(shí)立刻計(jì)算告警規(guī)則,對(duì)于滿足告警規(guī)則的指標(biāo)數(shù)據(jù)立刻生成相應(yīng)的告警事件,并持久化,隨后產(chǎn)生相關(guān)告警數(shù)據(jù),并將告警數(shù)據(jù)持久化,同時(shí)推送至告警推送系統(tǒng)進(jìn)行下一步推送操作。

● 日志告警:通過(guò)管控端配置告警規(guī)則提交到告警管理模塊落庫(kù)持久化,同時(shí)將告警規(guī)則推送至日志告警組件,然后刷新本地告警規(guī)則配置并定時(shí)輪詢檢測(cè)日志數(shù)據(jù)是否觸發(fā)告警規(guī)則,隨后產(chǎn)生相關(guān)告警事件,并將告警事件持久化,同時(shí)推送至告警推送系統(tǒng)進(jìn)行下一步推送操作。

4. 服務(wù)保護(hù)統(tǒng)一控制
平臺(tái)服務(wù)網(wǎng)關(guān)提供一套以API為中心的完善的安全控制體系和治理體系。服務(wù)網(wǎng)關(guān)作為系統(tǒng)的統(tǒng)一入口,自身提供豐富的API治理和安全控制功能,這些功能可以按需開(kāi)啟。外圍系統(tǒng)通過(guò)各種協(xié)議接入服務(wù)網(wǎng)關(guān),服務(wù)網(wǎng)關(guān)經(jīng)過(guò)一系列的安全校驗(yàn)治理,最終通過(guò)指定協(xié)議調(diào)用目標(biāo)應(yīng)用。對(duì)業(yè)務(wù)應(yīng)用做到統(tǒng)一管控和統(tǒng)一治理。

平臺(tái)服務(wù)網(wǎng)關(guān)接收到客戶端接入請(qǐng)求,首先會(huì)對(duì)報(bào)文進(jìn)行解包成網(wǎng)關(guān)內(nèi)部請(qǐng)求對(duì)象,之后走核心過(guò)濾器鏈:

● 所有過(guò)濾器都正常執(zhí)行則走到路由過(guò)濾器根據(jù)接出協(xié)議將網(wǎng)關(guān)內(nèi)部請(qǐng)求對(duì)象轉(zhuǎn)換成接出請(qǐng)求對(duì)象進(jìn)行外部調(diào)用,調(diào)用成功拿到接出響應(yīng)對(duì)象再轉(zhuǎn)換為網(wǎng)關(guān)內(nèi)部響應(yīng)對(duì)象;
● 執(zhí)行過(guò)程有校驗(yàn)不通過(guò)的直接拋出異常,異常處理過(guò)濾器對(duì)異常信息進(jìn)行封裝網(wǎng)關(guān)內(nèi)部響應(yīng)對(duì)象。
在網(wǎng)關(guān)上提供的核心治理體系主要分為安全控制和API治理兩大部分:
● 安全控制體系:提供黑白名單、訪問(wèn)控制、密鑰、租戶認(rèn)證等多種安全體系,其中密鑰又從加密解密、加簽驗(yàn)簽和認(rèn)證授權(quán)等多種方式來(lái)保證API訪問(wèn)的安全性。

● 治理體系:從限流控制、參數(shù)過(guò)濾、熔斷降級(jí)、灰度路由、超時(shí)控制、并發(fā)控制、訪問(wèn)時(shí)段控制等維度對(duì)API訪問(wèn)進(jìn)行全方位治理。

在金融數(shù)字化浪潮中,企業(yè)級(jí)分布式服務(wù)平臺(tái)也在隨之改善升級(jí)、與時(shí)俱進(jìn),我們可以預(yù)見(jiàn),未來(lái)的企業(yè)級(jí)分布式服務(wù)平臺(tái)將會(huì)進(jìn)一步強(qiáng)化與企業(yè)金融應(yīng)用開(kāi)發(fā)平臺(tái)的整合力度,加強(qiáng)從設(shè)計(jì)到運(yùn)維一站式可視化操作能力,提供架構(gòu)級(jí)、單元化級(jí)別的可視化生命周期管理,并結(jié)合深度學(xué)習(xí)等技術(shù)實(shí)現(xiàn)智能化、自動(dòng)化的微服務(wù)、單元化治理能力。