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