陳天偉
隨著移動互聯網的快速發展,大數據應用水平不斷提高,較好的系統可擴展性、可靠性和實時性已成為企業級應用的核心需求。設計一個具備較高可擴展性、可靠性和實時性的分布式中間件,已成為通信服務系統設計的關鍵。
分布式通信服務中間件是處于“中間層”的組件,是上層的應用程序和底層的服務之間的橋梁[1],通過中間件,可以簡化應用程序的通信、輸入輸出的開發,使其專注于業務邏輯。典型應用包括業務解耦和事件驅動等應用場景[2],具體如網上購物平臺不需要知道短信通知服務的存在,只需發布消息,便可以實現短信通知功能。系統與系統之間可以通過消息傳遞的形式驅動業務,實現異構系統的消息傳遞。
其次是數據一致性[3],實際應用中常常會遇到如下問題:當數據服務器過載時,需要分裂數據到不同的服務器上,將服務遷移到不同的服務器上,多機分裂的難點在于如何使得多機在同一個分裂點原子地分裂[4]。數據需要遷移時,將數據進行按需分發,并保證數據遷移代價最低。當多個用戶同時更新某個數據時,如何保證最終數據的一致性[5]。
結合某人才評估大數據平臺項目的具體需求,需要針對企業選聘人才的業務場景,根據人才需求實現特征提取,并在海量數據中進行職位匹配,推送合適的候選人。通過設計一種基于ZooKeeper的分布式通信服務中間件,通過中間件服務模型,實現了業務的發展需求,上層的人才選聘系統不需關心具體底層通信處理,只需提供人才簡歷,便得到海量人才庫的精準推送信息,具有較好的可擴展性、可靠性和實時性[6]。
ZooKeeper是一個開源的分布式應用程序協調服務。中間件服務模型[7]如圖1所示。
該模型可實現以下特性[8]:
(1)一致性。客戶端可連接到任意服務器,被認為是同一個視圖。
(2)實時性。可定時獲得服務器的信息。
(3)可靠性。一條消息被任意服務器接受,也會被所有服務器接受[9]。
(4)順序性。包括偏序、全局有序。
(5)無關性。客戶端能夠有效等待。失效的客戶端和慢的客戶端不會影響快速的客戶端請求。
(6)原子性[10]。當更新時包括成功和失敗狀態。
自適配通信環境(Adaptive Communication Environment,ACE)是一種面向對象(OO)的工具包[11]。該框架實現Reactor和Proactor等架構型模式,具有較好的性能和適應性。本文采用前攝模式實現底層通信服務[11]。
前攝模式具有較好的系統可伸縮性[11]。通過異步I/O,充分利用CPU、網絡接口和操作系統提供的并發處理機制,可極大地提高通信效率。前攝模式結構如圖2所示。
前攝模式[12]包含如下角色:
(1)Handle句柄,用來標識socket連接或是打開文件;
(2)異步操作處理器(Asynchronous Operation Processor),負責執行異步操作,一般由操作系統內核實現;

圖1 中間件服務模型

圖2 前攝模式結構
(3)異步操作(Asynchronous Operation);
(4)完成事件隊列(Completion Event Queue),異步操作完成的結果放到隊列中等待后續使用;
(5)主動器(Proactor),為應用程序進程提供事件循環,從完成事件隊列中取出異步操作的結果,分發調用相應的后續處理邏輯;
(6)Completion Handler,完成事件接口,一般是由回調函數組成的接口;
(7)Concrete Completion Handler,完成事件處理邏輯,實現接口定義特定的應用處理邏輯[11]。
服務器操作系統采用Red Hat Enterprise Linux 7.3,選用6臺服務器,系統部署架構如圖4所示。
分布式通信服務中間件實現了一種服務注冊與感知機制,系統還實現了注冊服務、服務加載、服務管理、通信服務四個重要組件[17]。
每個服務需要注冊服務的套接字、服務種類等。
服務中間件進程視圖[13]如圖3所示。
圖3中描述了客戶端服務請求步驟[14],具體如下:(1)計算節點需要在服務中間件模型進行注冊;
(2)計算節點地址列表由客戶端向服務中間件模型發起請求;
(3)客戶端收到服務中間件模型返回可用計算節點的地址列表;
(4)客戶端隨機選擇一個節點,并且發起連接請求;
(5)建立連接;
(6)發送請求后,客戶端需要進入隊列排隊并等待服務;
(7)獲取請求參數,空閑服務從隊列進行計算;
(8)將計算結果返回通信進程;
(9)客戶端得到通信進程返回值。系統架構的核心是服務中間件模型[15],服務中間件模型需要與協調服務建立連接[14]。協調服務具有極高的穩定性,部署的節點越多,其可靠性越高。
分布式計算節點包括:注冊服務、服務加載、服務管理、通信服務四種類型的組件[15]。外部請求調用時,需要指明調用的服務名和請求參數[16](動態鏈接庫方式)。
依據通用的跨平臺通信協議[18],服務加載可以采用任何語言開發。通過標準業務服務接口,業務邏輯代碼只需實現接口便可被服務加載,通過這種方式實現較好的擴展性。

圖3 服務中間件進程視圖

圖4 系統部署架構圖
對進程進行監控,發現意外退出,重新創建一個新的進程,繼續運行,實現較高的可靠性。
通過短連接,分裝每對請求和應答報文,一旦通信完畢,則連接關閉,這種方式適合大規模的分布式環境,高效快速。
經過測試驗證,將分布式通信服務中間件在某省人才評估大數據系統項目中進行試點應用,該系統主要包括三部分:人才選聘系統(上層應用)、通信服務中間件(中間層服務)、海量人才庫數據挖掘系統(底層數據處理)。上層客戶端用戶不需關心具體底層通信處理,只需關心業務邏輯,提供人才需求,便可得到中間件推送的精準人才信息,具有較好的可擴展性、可靠性和實時性[6],對性能進行了測試驗證,選擇ZooKeeper服務器測試環境如下:ZooKeeper 3.4.5版本(軟件配置);拷貝主機的CPU配置,內存16 GB,硬盤40 GB(虛擬機配置);戴爾PRECISION T7600工作站:CPU Inter Xeon-E5-2643 3.3 Hz,內存32 GB,硬盤1 TB(硬件配置)。
如表1所示,通過測試平臺,模擬用戶客戶端800并發,進行人才評估平臺中的人才需求“特征提取”的操作。通過匯總數據,可得事務平均響應時間為0.93 s,事務成功率為100%。模擬“用戶”進行計算的平均系統吞吐量為13 200,最大吞吐量為16 500,估計可滿足500萬的個人求職需求。

表1 統計數據表
分布式通信中間件在非功能質量屬性[19]上也有良好的表現,在大數據集群管理時,可以動態進行節點的操作,包括增加、刪除、編輯等。當節點出現意外時,如宕機時,通信管理服務可實時隔離和告警,實現了較好的擴展性。
在某人才評估大數據系統中,在大數據量高并發用戶需求下,需要通信服務平臺具有較好的可擴展性、可靠性和實時性。通過構建ZooKeeper服務中間件模型[20],在實際應用中較好地解決了上述問題。下一步,需要優化系統架構,完善業務場景,進一步改進系統的可擴展性、可靠性和實時性。
[1] Lin P, Bi J, Hu H. ASIC: an architecture for scalable intradomain control in Open Flow[C]//Proceedings of the 7th International Conference on Future Internet Technologies,2012.
[2] Koponen T, Casado M, Gude N, et al. Onix: a distributed control platform for large-scale production networks[C]//9th USENIX Symposium on Operating Systems Design and Implementation, 2015.
[3] Hassas Yeganeh S, Ganjali Y. Kandoo: a framework for efficient and scalable offloading of control applications[C]//Proceedings of the ベrst workshop on Hot topics in software deベned networks, ACM, 2012.
[4] Apache Zookeeper. What is ZooKeeper?[EB/OL]. [2017-11-01]. https://zookeeper.apache.org/.
[5] Apache Hadoop. What Is Apache Hadoop?[EB/OL].[2017-11-01]. http://hadoop.apache.org/.
[6] 張旭剛,李東輝,俞俊,等. 基于ZooKeeper框架實現MySQL分布式數據庫集群[J]. 計算機與數字工程,2016,44(9): 1855-1859.
[7] 莊鵬. 基于ZooKeeper的分布式服務中間件設計與實現[D]. 深圳: 深圳大學, 2016.
[8] 李璋. 基于Hadoop的互聯網數據營銷系統的設計與實現[D]. 北京: 中國科學院大學(中國科學院工程管理與信息技術學院), 2017.
[9] 譚智. 基于大數據技術的網絡異常行為檢測系統設計與實現[D]. 南昌: 江西財經大學, 2016.
[10] 李銳,劉剛,尹書偉,等. 基于ZooKeeper和ACE的分布式計算框架研究與設計[J]. 電力信息與通信技術,2015(6): 31-35.
[11] 茍麗美,張鋒葉,林國華. 基于ZooKeeper的GIS集群實現[J]. 計算機工程與設計, 2017(9): 2573-2579.
[12] 王文峰,袁慶祝,陸佃龍. 基于ZooKeeper綜合任務調度平臺的設計與應用[J]. 信息技術, 2016(6): 181-184.
[13] 易柏勝. 基于ZooKeeper的虛擬機動態變更機制的設計與實現[D]. 廣州: 華南理工大學, 2013.
[14] 譚玉靖. 基于ZooKeeper的分布式處理框架的研究與實現[D]. 北京: 北京郵電大學, 2014.
[15] 何慧虹,王勇,史亮. 分布式環境下基于ZooKeeper服務的數據同步研究[J]. 信息網絡安全, 2015(9): 227-230.
[16] 田心寧. 基于ZooKeeper的SDN多控制器架構的研究與實現[D]. 蘭州: 蘭州大學, 2016.
[17] 趙玉京. 基于ZooKeeper的分布式范圍鎖的設計與實現[D]. 武漢: 華中科技大學, 2015.
[18] 胡雪婧. 基于ZooKeeper的分布式系統的消息發送機制的設計與實現[D]. 長春: 吉林大學, 2016.
[19] 劉芬,王芳,田昊. 基于Zookeeper的分布式鎖服務及性能優化[J]. 計算機研究與發展, 2014(S1): 229-234.
[20] 黃毅斐. 基于ZooKeeper的分布式同步框架設計與實現[D]. 杭州: 浙江大學, 2012.★