王世澤
摘 ?要:近年來,隨著各金融公司線上業(yè)務(wù)的快速發(fā)展和日趨激烈的競(jìng)爭(zhēng)壓力,各金融領(lǐng)域企業(yè)都紛紛新建了很多業(yè)務(wù)系統(tǒng),以此來應(yīng)對(duì)技術(shù)與業(yè)務(wù)的挑戰(zhàn),由于業(yè)務(wù)系統(tǒng)之間的交互變得越來越頻繁,但卻存在信息共享能力差[1],信息集成不夠深入等問題,數(shù)據(jù)傳輸?shù)臏?zhǔn)確性和及時(shí)性往往也難以得到保證。因此,ESB企業(yè)級(jí)服務(wù)總線系統(tǒng)作為系統(tǒng)的交易樞紐,其高可用性決定了一個(gè)企業(yè)能否不間斷地對(duì)外提供服務(wù)。該文結(jié)合目前廣泛使用的微服務(wù)架構(gòu)思想,提出去中心化的ESBX實(shí)踐,構(gòu)建了一種高可用的企業(yè)級(jí)服務(wù)總線系統(tǒng),并詳細(xì)描述了其應(yīng)用架構(gòu)及邏輯部署架構(gòu)。
關(guān)鍵詞:微服務(wù);ESB;金融領(lǐng)域;去中心化
中圖分類號(hào): TP393 ? ? ? ? ? ? 文獻(xiàn)標(biāo)志碼:A
0 引言
隨著公司業(yè)務(wù)不斷擴(kuò)展,特別是線上業(yè)務(wù)的拓展,對(duì)建立能更快速地響應(yīng)市場(chǎng)變化、進(jìn)行服務(wù)靈活便捷組合調(diào)整的IT架構(gòu)的需求越來越急迫。因此,公司對(duì)原有系統(tǒng)進(jìn)行邊界劃分,建立起多層次、條線化、松耦合的IT應(yīng)用架構(gòu),簡(jiǎn)化接口和交易環(huán)節(jié),使架構(gòu)更加清晰,以此來應(yīng)對(duì)快速變化的業(yè)務(wù)訴求和面向互聯(lián)網(wǎng)流量大、來源廣、峰值和信息安全訴求強(qiáng)烈的非功能訴求。微服務(wù)架構(gòu)體系在擴(kuò)展性、容錯(cuò)性以及日后基于容器技術(shù)的DevOps等方面具有優(yōu)勢(shì),促使公司服務(wù)向微服務(wù)方向轉(zhuǎn)變。微服務(wù)組件化、松耦合、自治和去中心化的優(yōu)勢(shì)背后,同樣伴隨著服務(wù)依賴復(fù)雜多變、調(diào)用鏈路長(zhǎng)難以監(jiān)控、入口信息安全實(shí)現(xiàn)復(fù)雜等問題。為應(yīng)對(duì)以上問題,該公司在傳統(tǒng)企業(yè)服務(wù)總線ESB思想上進(jìn)行延伸和發(fā)展,研發(fā)基于微服務(wù)架構(gòu)的企業(yè)服務(wù)總線,克服傳統(tǒng)ESB過于集中的不足,側(cè)重于服務(wù)治理和服務(wù)網(wǎng)關(guān),集成傳統(tǒng)SOA理念并融入微服務(wù)思想。
1 ESB(企業(yè)服務(wù)總線)
企業(yè)服務(wù)總線(Enterprise Service Bus,ESB) 是一個(gè)主要依賴XML消息交換的企業(yè)級(jí)消息系統(tǒng)。其可以消除不同應(yīng)用之間的技術(shù)差異,讓不同的應(yīng)用服務(wù)器協(xié)調(diào)運(yùn)作。從功能上看,ESB提供了事件驅(qū)動(dòng)和文檔導(dǎo)向的處理模式,以及分布式的運(yùn)行管理機(jī)制,它支持基于內(nèi)容的路由和過濾,具備了復(fù)雜數(shù)據(jù)的傳輸能力,并可以提供一系列的標(biāo)準(zhǔn)接口。
2 微服務(wù)
微服務(wù)架構(gòu)和 SOA 架構(gòu)非常類似,微服務(wù)架構(gòu)特別強(qiáng)調(diào)“業(yè)務(wù)需要徹底的組件化及服務(wù)化”,將系統(tǒng)拆分為多個(gè)可以獨(dú)立開發(fā)、設(shè)計(jì)、部署運(yùn)行的模塊。這些模塊間通過服務(wù)化完成交互和集成。微服務(wù)的特征有4個(gè)。1)通過服務(wù)實(shí)現(xiàn)組件化 。2) 按業(yè)務(wù)能力來劃分服務(wù)和開發(fā)團(tuán)隊(duì)。3)去中心化。4)基礎(chǔ)設(shè)施自動(dòng)化(DevOps、自動(dòng)化部署)。
3 基于微服務(wù)的ESB擴(kuò)展-ESBX
微服務(wù)架構(gòu)體系下,異構(gòu)環(huán)境逐漸減少,公司整體技術(shù)棧相對(duì)統(tǒng)一,ESB在異構(gòu)環(huán)境中的優(yōu)勢(shì)逐漸降低,并且ESB的基本功能也決定了其固有的中心化特征,造成ESB系統(tǒng)很容易成為性能瓶頸以及熱點(diǎn)服務(wù)。而微服務(wù)在開發(fā)過程中的易用性和普及型提升開發(fā)效率,因此在微服務(wù)服務(wù)注冊(cè)和負(fù)載調(diào)用的基礎(chǔ)上,引入ESB思想,并對(duì)其進(jìn)行擴(kuò)展,形成ESBX(Enterprise Service Bus expand)。
ESBX將報(bào)文校驗(yàn)、路由選擇、信息擴(kuò)展、安全管控功能、流量擋板和預(yù)警監(jiān)控添加進(jìn)微服務(wù)間的同步或異步調(diào)用,形成ESB在微服務(wù)體系下的新型企業(yè)服務(wù)總線思想。
4 ESBX的架構(gòu)設(shè)計(jì)
4.1 ?ESBX需要解決的問題
4.1.1 嚴(yán)格的信息安全要求
為了更好地保證信息安全,隔離敏感核心數(shù)據(jù),采用網(wǎng)絡(luò)隔離技術(shù),將網(wǎng)絡(luò)劃分為隔離區(qū)(Demilitarized Zone)簡(jiǎn)稱DMZ區(qū)和內(nèi)部服務(wù)區(qū)(Service Zone)簡(jiǎn)稱SZ。然而,這樣不可避免地會(huì)使服務(wù)接入變得更加復(fù)雜。各服務(wù)調(diào)用者在接入前,都需要滿足安全要求,這樣會(huì)造成各系統(tǒng)重復(fù)建設(shè)。
4.1.2 與日俱增的服務(wù)量
當(dāng)服務(wù)數(shù)量級(jí)增多后,服務(wù)的提供和調(diào)用都成為巨大的挑戰(zhàn)。因此,需要一個(gè)服務(wù)注冊(cè)中心,為服務(wù)的發(fā)布和調(diào)用提供統(tǒng)一的平臺(tái),另外在服務(wù)接入前,應(yīng)提供調(diào)用方和服務(wù)方的相關(guān)信息,避免建立不合理的調(diào)用關(guān)系。
4.1.3 統(tǒng)一監(jiān)控平臺(tái)的缺失
從細(xì)微的角度看,可以監(jiān)控服務(wù)器的運(yùn)行狀態(tài),通過告警及時(shí)發(fā)現(xiàn)異常。從整體角度看,可以分析服務(wù)的訪問熱度和響應(yīng)能力,及時(shí)擴(kuò)大規(guī)?;蛘{(diào)整布局。
但無論是服務(wù)調(diào)用方還是提供方,對(duì)整個(gè)調(diào)用鏈路的信息進(jìn)行采集、處理、統(tǒng)計(jì)和分析都是難以獨(dú)立實(shí)現(xiàn)的。因?yàn)檫@不僅需要向鏈路中的各系統(tǒng)采集數(shù)據(jù),而且一旦調(diào)用關(guān)系改變,數(shù)據(jù)采集方案也需要更改。即使是這樣,由某系統(tǒng)獨(dú)立實(shí)現(xiàn)的信息采集,也只能獲得有限的、局部的調(diào)用數(shù)據(jù),而對(duì)于企業(yè)級(jí)服務(wù)調(diào)用的風(fēng)險(xiǎn)預(yù)警和統(tǒng)計(jì)分析來說這樣是不夠的。因此,需要建立一個(gè)全司范圍內(nèi)的,集信息收集、統(tǒng)計(jì)、分析和展示功于一體的平臺(tái)。
4.2 ESBX架構(gòu)設(shè)計(jì)
ESBX平臺(tái)以提升業(yè)務(wù)組織能力為原則,其根本目標(biāo)是幫助業(yè)務(wù)系統(tǒng)在復(fù)雜的IT架構(gòu)下,實(shí)現(xiàn)一種便捷、統(tǒng)一的服務(wù)調(diào)用方案,主要包含統(tǒng)一管理服務(wù)、實(shí)時(shí)監(jiān)控服務(wù)、服務(wù)注冊(cè)、統(tǒng)一接入服務(wù)、消費(fèi)樁與服務(wù)樁功能,圖1 為應(yīng)用架構(gòu)圖。
5 ESBX建設(shè)實(shí)施
5.1 服務(wù)接入
針對(duì)不同的接入需求,平臺(tái)提供了API和OpenAPI 2種接入方案。API模式是公司核心系統(tǒng)之間的調(diào)用,OpenAPI模式是公司互聯(lián)網(wǎng)系統(tǒng)或公司外部系統(tǒng)與核心系統(tǒng)之間的調(diào)用。服務(wù)方和調(diào)用方只需要知道對(duì)方所處的網(wǎng)絡(luò)區(qū)域(DMZ或SZ),而服務(wù)注冊(cè)、安全認(rèn)證和具體的網(wǎng)絡(luò)連接都由ESBX平臺(tái)實(shí)現(xiàn)。
OpenAPI調(diào)用模式:服務(wù)調(diào)用方在接入服務(wù)前,需要通過OAuth平臺(tái)獲取token。然后,通過token訪問outer-server,它會(huì)對(duì)服務(wù)調(diào)用方或提供方的身份進(jìn)行有效性驗(yàn)證,只有驗(yàn)證通過的服務(wù),才會(huì)被允許接入。token由OAuth系統(tǒng)統(tǒng)一生成和管理,服務(wù)方無需搭建認(rèn)證系統(tǒng)。
API模式:SZ內(nèi)部服務(wù)相互之間調(diào)用,它通過在各個(gè)服務(wù)實(shí)例中植入stub模塊,實(shí)現(xiàn)一種輕量、靈活的接入控制。
outer-server的作用是可以將內(nèi)部API地址生成為對(duì)應(yīng)的對(duì)外OpenAPI地址,供外部系統(tǒng)調(diào)用,也可以通過OpenAPI轉(zhuǎn)發(fā)為API的具體地址。當(dāng)調(diào)用方為外部時(shí),需要通過向outer發(fā)起請(qǐng)求,并傳入access_token等參數(shù),實(shí)現(xiàn)將調(diào)用轉(zhuǎn)發(fā)給服務(wù)方,最后通過outer將結(jié)果轉(zhuǎn)發(fā)給調(diào)用方。
oauth-server為認(rèn)證提供方,向客戶端、用戶提供認(rèn)證和授權(quán)服務(wù)。
5.2 消費(fèi)樁與服務(wù)樁stub
stub主要提供API調(diào)用(即點(diǎn)對(duì)點(diǎn)調(diào)用)的相關(guān)功能,例如服務(wù)注冊(cè)、消費(fèi)注冊(cè)、授權(quán)管理、負(fù)載均衡和調(diào)用監(jiān)控。
stub是一個(gè)JAR包,在服務(wù)開發(fā)期間引入,一同編譯打包。stub將提供消費(fèi)樁或服務(wù)樁的相關(guān)功能。該stub將依托Spring Cloud框架,擴(kuò)展Ribbon負(fù)載均衡功能,提供消費(fèi)樁的功能,對(duì)所有請(qǐng)求進(jìn)行攔截以實(shí)現(xiàn)服務(wù)樁的相關(guān)功能。
5.3 數(shù)據(jù)加密
外部系統(tǒng)調(diào)用內(nèi)部系統(tǒng)是由outer-server對(duì)外部請(qǐng)求進(jìn)行密文接收,解密轉(zhuǎn)發(fā)給內(nèi)部系統(tǒng),同時(shí),將內(nèi)部系統(tǒng)返回的報(bào)文加密發(fā)送給外部系統(tǒng)方,加密方式可在服務(wù)接入時(shí)設(shè)置,支持動(dòng)態(tài)可調(diào)。
5.4 負(fù)載均衡和流量擋板
ESBX采用負(fù)載均衡機(jī)制,實(shí)現(xiàn)對(duì)服務(wù)方各實(shí)例上請(qǐng)求量的分流。在服務(wù)進(jìn)行調(diào)用時(shí),服務(wù)提供方的stub在攔截到請(qǐng)求后,將起到流量擋板的作用,防止針對(duì)資源的DoS攻擊直接沖擊服務(wù)系統(tǒng)。
5.5 服務(wù)注冊(cè)與管理
服務(wù)注冊(cè)管理admin為各業(yè)務(wù)系統(tǒng)提供了一個(gè)自服務(wù)化的管理平臺(tái)。服務(wù)提供方只需要在admin管理平臺(tái)上配置服務(wù)信息,即可完成服務(wù)注冊(cè)。服務(wù)注冊(cè)完成之后,可以根據(jù)需求選擇發(fā)布到不同的網(wǎng)絡(luò)區(qū)域,然后ESBX會(huì)為其匹配對(duì)應(yīng)的接入方式(API或者OpenAPI),即可完成服務(wù)的發(fā)布。
ESBX會(huì)通過admin平臺(tái)將服務(wù)的信息錄入數(shù)據(jù)庫,待接入服務(wù)啟動(dòng)后,注冊(cè)中心向已有的服務(wù)推送變更信息,調(diào)用方可以從注冊(cè)中心上獲取服務(wù)編碼。
5.6 實(shí)時(shí)監(jiān)控
平臺(tái)采用心跳檢測(cè)機(jī)制,實(shí)現(xiàn)消費(fèi)方對(duì)服務(wù)方系統(tǒng)狀態(tài)的監(jiān)測(cè)。監(jiān)控平臺(tái)monitor采集經(jīng)過API或OpenAPI產(chǎn)生的調(diào)用信息,并為用戶提供實(shí)時(shí)查詢功能。
6 ESBX應(yīng)用部署
圖2為邏輯部署架構(gòu)圖,為了將ESBX的相關(guān)功能集成到各個(gè)業(yè)務(wù)系統(tǒng)中,要求調(diào)用雙方都嵌入stub模塊。管理中心以基礎(chǔ)數(shù)據(jù)為依托,在注冊(cè)中心上建立基礎(chǔ)節(jié)點(diǎn),當(dāng)服務(wù)啟動(dòng)時(shí),向注冊(cè)中心上報(bào)自身信息,進(jìn)行服務(wù)信息注冊(cè),注冊(cè)中心將添加啟動(dòng)服務(wù)對(duì)應(yīng)的實(shí)例信息,并將變更推送給已啟動(dòng)的實(shí)例,更新實(shí)例緩存信息,管理中心和監(jiān)控中心的失效不會(huì)影響整個(gè)系統(tǒng)的功能,stub將讓業(yè)務(wù)系統(tǒng)進(jìn)入離線模式,依靠緩存信息進(jìn)行服務(wù)調(diào)用。
注冊(cè)中心至少需要一個(gè)三節(jié)點(diǎn)的ZooKeeper系統(tǒng)。各個(gè)服務(wù)通過HTTP協(xié)議進(jìn)行通信,調(diào)用數(shù)據(jù)將由各stub異步上報(bào)給監(jiān)控中心,用于進(jìn)行數(shù)據(jù)統(tǒng)計(jì)。
7 結(jié)語
該文對(duì)基于微服務(wù)與ESB架構(gòu)思想的ESBX進(jìn)行了研究,提出了一種高可用服務(wù)總線系統(tǒng)的構(gòu)建思路,在信息交互、集成、共享及維護(hù)等方面獲得良好的效果,極大地提高了現(xiàn)有系統(tǒng)資源的利用率,提升了公司客戶服務(wù)體驗(yàn),以及業(yè)務(wù)產(chǎn)品開發(fā)效率和開發(fā)質(zhì)量。
參考文獻(xiàn)
[1]劉保汛,劉文杰.基于SOA 架構(gòu)的ESB 在商業(yè)銀行中的研究與實(shí)現(xiàn)[J].信息技術(shù)與信息化,2018(2):19-21.