呂廣喆,翟亞鵬,任曉瑞,胡寧
(西安航空計算技術研究所,陜西西安,710000)
隨著互聯網技術的發展,面向服務的架構技術(Service Oriented Architecture,SOA)越來越多的被應用到移動互聯技術之中。IBM推出了自己的企業服務總線(Enterprise Service Bus,ESB)產品IBM WebSphere ESB,用戶可以根據自身的需求擴展SOA能力;微軟通過其應用平臺Microsof t ESB提供了全面的ESB服務,包括:Windows Server 2003,NET Framework,BizTalk Server 2006 R2。該應用平臺提供了一個基礎架構,基于此可以靈活和安全地重復使用架構和商業服務,并具有協調原有的服務整合到新的端到端的業務流程中的能力。騰訊作為國內互聯網行業的領軍企業,開放了其微服務架構Tars,該架構是基于名字服務使用Tars協議的高性能RPC開發框架,同時配套一體化的服務治理平臺,幫助個人或者企業快速的以微服務的方式構建自己穩定可靠的分布式應用。研究該架構中服務框架的設計對分布式服務調用技術的發展具有重要的指導意義。
Tars的設計思路是采用微服務的思想對服務進行治理,同時對整個系統的各個模塊進行抽象分層,將各個層次之間相互解耦或者松耦合,如下圖1所示。
應用運營層,實現應用服務部署、發布、監控、配置等操作。簡化運維人員的工作量。
平臺管理層解決服務運營過程中,遇到的容錯、負載均衡、容量管理、就近接入、灰度發布等問題,讓平臺更加強大。
通訊框架層提供統一的通信服務接口,支持不同節點間的信息通信及遠程服務調用,服務總線處于該層。
公共組件層,封裝了大量日常開發過程中經常使用的公共庫代碼和遠程過程調用,讓開發使用更簡單方便。

圖1 Tars架構
統一協議層,將多種網絡協議進行統一,以IDL(接口定義語言)的方式,開發支持多平臺、可擴展、協議代碼自動生成的統一協議。在開發過程中,開發人員只需要關注通訊的協議字段的內容,不需要關注其實現的細節,大大減輕了開發服務時需要考慮的協議是否能跨平臺使用、是否可能需要兼容、擴展等問題,支持系統功能的靈活擴展。
在Tars系統中,服務節點可以認為是服務所實際運行的一個具體的操作系統實例,可以是物理主機或者虛擬主機、云主機。隨著服務的種類擴展和規模擴大,服務節點可能成千上萬甚至數以十萬計。每臺服務節點上均有一個控制節點和N(N>=0)個業務服務節點,控制節點會對業務服務節點進行統一管理,提供啟停、發布、監控等功能,同時接收業務服務節點上報過來的心跳。
Tars中除了具體服務以外的稱為公共服務,提供公共服務的節點稱為公共框架節點,它的數量不定,為了自身的容錯容災,一般也要求在在多個機房的多個服務器上進行部署,具體的節點數量,與服務節點的規模有關,比如,如果某些服務需要打較多的日志,就需要部署更多的日志服務節點。公共框架節點提供的服務可分為:
Web管理系統:在Web上可以看到服務運行的各種實時數據情況,以及對服務進行發布、啟停、部署等操作。
注冊中心:提供服務節點的地址查詢、發布、啟停、管理等操作,以及對服務上報心跳的管理,通過它實現服務的注冊與發現。
發布管理:提供服務的發布功能。
配置中心:提供服務配置文件的統一管理功能。
遠程日志:提供服務日志記錄到遠程節點的功能。
統計服務:統計業務服務上報的各種調用信息,比如總流量、平均耗時、超時率等,以便對服務出現異常時進行告警。
業務屬性服務:統計業務自定義上報的屬性信息,比如內存使用大小、隊列大小、cache命中率等,以便對服務出現異常時進行告警。
異常信息服務:統計業務上報的各種異常信息,比如服務狀態變跟信息、訪問db失敗信息等,以便對服務出現異常時進行告警。
原則上要求全部的節點之間網絡互通,至少每臺機器的node能夠與公共框架節點之間都是可以連通的。
整個系統在運行過程中涉及到的服務之間交互包括:業務服務之間的交互、業務服務與公共服務之間的交互。
服務間的交互主要體現在以下四個流程。
服務發布注冊流程:用戶登錄網頁系統,上傳自己的應用發布包,待上傳成功后,通過網頁提交發布服務請求,由注冊中心將該消息發送到控制節點上,然后各個控制節點可從遠程獲取應用服務發布包到本地,啟動相關服務。
命令轉發流程:用戶可以通過網頁提交服務管理命令請求,由注冊中心傳發到控制節點,然后由控制節點向具體服務發送管理命令。

圖2 服務交互過程
心跳管理流程:應用服務運行后,會周期性發送心跳消息到控制節點,控制節點將收到的心跳信息轉發給注冊中心,由注冊中心進行統一管理。
信息上報流程:應用服務運行后,會定期上報統計信息到統計服務,發送日志到日志服務,定期上報屬性信息到業務屬性服務、上報異常信息到異常信息服務、從配置數據中獲取服務配置信息。
客戶端訪問服務端流程:客戶端可以通過服務的對象名間接訪問服務,客戶端會從注冊中心獲取服務的路由信息(如ip、port信息),然后根據具體的業務特性(同步或者異步,tcp或者udp方式)訪問服務(當然客戶端也可以通過IP地址和端口直接訪問具體服務)。

圖3 客戶端和服務端
服務端的功能包括網絡管理、業務執行。實現消息收發,連接管理,支持操作多線程(可配置),適配tcp/udp等網絡協議;支持應用服務與端口的綁定;分派服務請求,執行相應的而服務操作。
客戶端的功能包括網絡管理、業務請求,遠程對象管理、異步請求處理。實現消息收發,連接管理,支持操作多線程(可配置),適配tcp/udp等網絡協議;實現遠程對象代理,負責路由分發、支持輪詢/hash/基于權重的負載均衡、容錯處理,并把服務請求發到服務端;支持同步/異步/單向等多種調用形式;支持異步請求的回應包處理。
服務調用方式支持三種模式。
同步調用:客戶端發出調用請求后等待服務返回結果后再繼續邏輯。
異步調用:客戶端發出調用請求后繼續其他業務邏輯,服務端返回結果又由回調處理類處理結果。
單向調用:客戶端發出調用請求后就結束調用,服務端不返回調用結果。
容錯保護通過兩種方式實現:信條消息和客戶端主動屏蔽。
心跳消息服務監測:業務服務主動上報心跳給注冊服務,使注冊服務知道服務部署的節點存活情況,當服務的某節點故障時,心跳消息中斷,注冊服務不在返回故障節點的地址給客戶端,達到排除故障節點的目標。
客戶端主動屏蔽:為了更及時的屏蔽故障節點,客戶端根據調用被調服務的異常情況來判斷是否有故障來更快進行故障屏蔽。具體策略是,當客戶端調用某個服務出現調用連續超時,或者調用的超時比率超過一定百分比,客戶端會對此服務進行屏蔽,讓流量分發到正常的節點上去。對屏蔽的服務節點,每隔一定時間進行重連,如果正常,則進行正常的流量分發。
為了防止業務因為訪問量突增或服務器故障造成系統整體的繁忙,進而導致全部服務的不可用,框架內部做相應設計來應對。實現請求隊列,服務調用通過非阻塞方式實現異步系統,從而達到提升系統處理能力的目的,并且對隊列的長度進行監控,當超過某個閥值,則拒絕新的請求。對請求設置超時時間,當請求包從隊列里讀取出來是判斷請求是否超時,如果超時則不做處理。
對服務配置進行集中管理,使配置修改更容易,通知更及時,配置變更也更安全;對配置變更進行歷史記錄,讓配置可以輕松回退到前一版本。配置獲取服務化,服務只需調用配置服務的接口即可獲取到配置文件。
為了能靈活管理配置文件,配置文件分為幾個級別:應用配置、Set配置、服務配置和節點配置。
應用配置為最高一級的配置文件,它是多個服務配置提煉出來的公共配置,服務配置通過引用它來使用其配置內容。
Set配置是具體一個Set分組下所有服務的公共配置,在應用配置的基礎上進行補充追加。
服務配置是具體一個服務下所有節點的公共配置,可以引用應用配置。
節點配置是一個應用節點的個性化配置,它和服務配置合并成為具體一個服務節點的配置。
本文介紹了互聯網中面向服務架構的背景知識,分析了Tars架構中使用的服務架構,它在web系統的基礎上,結合遠程過程調用技術,構建了支持互操作的服務總線,用于支持互聯網中不同應用節點的信息交互,互操作,對服務總線技術的發展具有指導意義。
[1] Pérez,H.,Gutiérrez,J.J.:A survey on standards for real-tim e distribution m idd lew are[J].ACM Com pu ting Surveys(CSUR),2014,46(4):49.
[2]Kang W,Kapitanova K,Son S H.RDDS: a real-tim e data distribution service for cyber-physical system s[J].IEEE Trans on Industrial Informatics,2012,8(2):393-405.
[3]Etxeber ria-Ag irian o I,Ca lvo I,Pérez F,e t a l.Mapping different comm unication traffic over DDS in industrial environm en ts[J].In form ation System s and Technologies,2011,6:15-18.
[4]H u GQ, W ee PT, W en YG.C lo u d r o b o t ic s:Architectu re,challenges and app lications. Netw o rk,IEEE,2012,26(3):21-28.
[5]朱華勇,張慶杰,沈林成,等.分布式系統實時發布/訂閱數據分發技術[M].北京:國防工業出版社,2013:13-14.