?

一種基于移動網絡安全可靠的消息系統

2014-10-14 09:28余亞玲
計算機與現代化 2014年9期
關鍵詞:服務端隊列消息

余亞玲,李 寧

(華北計算技術研究所,北京 100083)

0 引言

即時通信系統作為一種新興的技術近來獲得了突飛猛進的發展,它以移動網絡為基礎,手機終端為載體,可使用戶以實時方式與其它在線用戶進行信息交互,其突出優點是快捷方便。但由于移動網絡的特點,造成消息的可靠性等與傳統網絡有較大的差異。

本文提出一種基于移動網絡安全可靠的消息系統,包括消息回執、多級別的消息重發、消息推送以及消息顯示等功能,通過消息回執策略、多級別的重發策略等方式來提高移動網絡的消息成功率,實現消息的聯動機制。其中消息回執使得服務器能夠及時獲得用戶獲取消息的反饋,保證消息的真實到達;多級別的消息重發主要是通過對消息的分類,對待不同級別的內容采用不同的重發策略;消息顯示是用戶在獲取到消息事件后,根據消息格式對不同類型的消息進行顯示。

1 消息系統設計

1.1 系統基礎架構

基于不可靠移動網絡的消息系統,是目前移動互聯網及時通訊研究的熱點,無論是消息推送,還是IM等及時通訊應用都涉及這個方面的問題,如何保證消息及時有效地送到用戶是研究的關鍵。從技術上,消息的送達主要有2類技術,一類是客戶端輪詢,即客戶端不斷地發送請求獲取新內容;另一類是推送,即服務端在有消息內容時將消息推送到客戶端。輪詢實現比較簡單,即客戶端在一定的時間間隔內向服務端請求,獲取新的數據,目前這種方式在當前互聯網上的消息應用中較為普遍。但這種方式在移動網絡下存在較多問題,如果設置時間間隔太長,會造成消息的及時性不夠,如果設置太短,會造成較大的數據流量,移動網絡目前的流量成本還比較高,另外對移動設備的電量消耗較大。而推送方式采用長連接的方式,有效地避免了上述問題,但是,由于移動網絡的不穩定性,在長連接情況下沒有傳統網絡穩定,客戶端時有掉線。因此筆者在參考推送模式和XMPP(Extensible Messaging and Presence Protocol,可擴展消息與出席協議)的基礎上,借用輪詢請求的方式,實現消息的有效回執,同時采用重試鏈接的方式回避長連接的不穩定,在傳統的推送基礎上加了重發機制。

該消息系統在架構上由客戶端、服務端和數據層構成,各層由不同子功能模塊組成。

客戶端主要為用戶提供交互操作的界面,包含消息回執、消息顯示等模塊,其核心是客戶端收到消息后,根據消息體的相關屬性決定消息是否需要回執,采用何種模板進行消息體的展示。

服務端由多臺基于Openfire的IM服務器集群、Zookeeper集群以及消息待發隊列和重發隊列組成,用于處理、轉發及重發客戶端消息、接收客戶端消息回執、監聽客戶端狀態等。此外,還包含統一的數據訪問接口,用于訪問緩存數據庫。

數據層用于存儲來自應用系統的相關數據和用戶狀態,其中緩存數據庫主要存儲用戶信息及離線消息等,Zookeeper集群主要存儲IM服務器集群的共享數據。系統的具體架構如圖1所示。

圖1 系統架構圖

1.2 各模塊功能

1)客戶端消息回執模塊用于構造并發送客戶端消息回執。當客戶端成功接收在線消息或離線消息時,立刻向服務端發送“成功接收在線消息”或“成功接收離線消息”的回執,告知服務器客戶端已成功接收到消息,不用重復向其發送此消息,服務端的業務層根據回執的情況對消息進行相應的業務處理。

2)客戶端消息顯示模塊根據消息類型對消息予以不同的顯示。消息主要分為普通消息、多媒體消息、聯動消息3類,客戶端消息顯示模塊根據上述的類型,從消息彈出方式、消息字體顏色、消息的聯動等方面進行不同的處理。比如消息是否需要彈出、客戶端收到消息的聲音模式以及該消息內容是否進行下一步聯動操作。

3)服務端消息處理模塊主要負責接收客戶端的消息回執,當該模塊接收到客戶端的消息回執時,表示客戶端已經收到該消息,后續對該消息進行完整的事務處理,把該消息從待發隊列移除,同時置該消息狀態位為已發送。

4)服務端消息處理推送模塊主要根據消息接收者的狀態實行不同的消息發送策略,同時根據消息的內容和形式組成不同的消息體,便于客戶端進行消息的顯示,同時提供其他應用服務器能夠通過IM服務器向客戶端推送消息接口。

5)服務端消息重發模塊用于重新發送未成功送達客戶端的消息。服務器端維護一個重發隊列保存其發送過的消息,當收到回執時則從隊列刪除相應消息,若未收到回執,則在計時器周期遍歷重發隊列時重發此消息,以此來提高服務器端向客戶端發送消息的可靠性。服務器端根據消息的重要程度采用不同級別的重發策略,越重要的消息重發的頻率和次數越高,多級別的重發策略便于定制,更為靈活。

6)服務端狀態管理模塊主要是維護客戶端的長連接狀態,如客戶端上線、離線、暫時不接受某類消息等,該模塊對消息推送策略的制定至關重要。

7)數據層的數據存儲模塊主要是對消息內容的保存和用戶連接狀態的存儲,由于消息的量比較大,文件大小較小,采用緩存機制可以有效降低磁盤IO吞吐消耗,緩存機制的讀取和存儲速度較快,有效地提升系統的響應速度。

1.3 重發策略分析

保障客戶端的消息接收是本文的關鍵,難點在重發策略。消息重發策略包括服務端消息重發策略及客戶端消息回執策略。為支持服務端消息重發功能,IM服務器需要維護一個消息重發隊列,當IM服務器推送完成一條消息后,將該消息從待發隊列中移到重發隊列,IM服務器檢測客戶端的在線狀態,如果在線,則立即發送,同時待成功收到客戶端的回執時從重發隊列刪除相應的消息,如果不在線,則將消息存為離線消息,標識消息的發送時間和已發送次數。IM服務器采用集群方式,各個IM服務器需要共享同一個消息重發隊列,本文借助Zookeeper實現消息隊列的共享與同步。Zookeeper是通過選舉產生leader和follower,其算法正確執行的前提是有一半以上機器正常工作,每臺機器部署一個IM服務器及一個Zookeeper服務器,各IM服務器之間進行負載平衡,各Zookeeper之間進行數據同步,IM服務器優先從本地Zookeeper存取數據。各機器中只有一臺機器作為主服務器,其余作為從屬服務器,主服務器負責消息的重發。

計時器控制消息重發,要求重發隊列中的消息至少包含消息體、已重發次數、上一次發送時間等數據。當執行計時器任務遍歷重發隊列時,若某消息距上次發送時間超過閾值則重發此消息,并修改消息最后一次發送時間以及已發送次數,當某消息發送次數達到設定的上限時就將其存為離線消息,待用戶登錄以后再接收此消息。

2 消息系統實現

本系統在完成設計后,筆者搭建了一套測試系統,該系統服務端采用4臺2CPU/4G內存機器做IM服務器和3個Zookeeper集群,1臺2CPU/8G內存的服務器作為數據存儲的redis服務器。同時選取了目前市場比較主流的中國移動2G Android手機1臺,中國聯通的3G Android手機終端1臺。在應用搭建完成后,分別在2G、3G網絡下,通過服務端進行了100、1000、1000、10000條消息向客戶端推送,一種情況是消息沒有重發和回執策略,另一種情況采取5次的重發策略和消息回執策略,從圖2的測試結果來看,特別是2G(不穩定)的網絡,通過提升重試次數,大大增加了消息的投達能力,消息到達率由80%多平均提升到96%左右,而在3G網絡下,消息的到達率也平均有90%提升到98%左右。同時由于有了消息回執機制,服務端顯示的消息到達條數和客戶端實際收到的消息條數是一致的。而沒有采用消息回執策略的,客戶端實際收到的消息大概是95%左右,有5%的異常情況。

圖2 不同策略消息發送圖

圖3 各個時間范圍的失敗消息情況圖

進一步分析各種失敗的消息情況,可以看到重試間隔時間越長,消息的失敗率越高。如圖3所示。

從測試報告可以看出,系統的重試間隔時間在一定范圍內,成功率比較高,隨著時間越長,成功率顯著下降。因此重試間隔也有一定的限制。

3 結束語

隨著從傳統的互聯網時代步入移動互聯網時代,無論對于個人還是企業,對于即時通訊的需求一直有增無減,及時獲取消息,對提升用戶體驗,保證通信質量,提高用戶滿意度,增強產品及企業的競爭力具有重要的意義。本文通過結合推送和輪詢模式,探索出一種基于移動網絡安全可靠的消息系統。它既能大大地提升服務能力和服務體驗,還能有效地降低系統成本。

[1]劉殿興,薛建生.一種基于流量預測的多優先級隊列緩存管理算法[J].計算機工程,2006,32(10):116-118.

[2]姜宏岸,王剛.優先級隊列的緩存管理機制的性能分析[J].計算機工程與應用,2009,45(25):86-88.

[3]鄭明,沈威,白天,等.基于可擴展標記語言的新型即時通訊系統[J].吉林大學學報(工學版),2012,42(6):1548-1552.

[4]郭卓.基于Openfire服務器iOS即時通訊系統的設計與實現[D].長春:吉林大學,2013.

[5]張斌,馮猛,張朋,等.基于微軟MSN的安全即時通信插件研究[J].計算機工程與設計,2009,30(12):3012-3014,3017.

[6]羅偉.基于Android平臺的即時通訊系統的研究與實現[D].長沙:湖南師范大學,2009.

[7]吳玉婷.基于XMPP協議的即時消息系統的研究與實現[D].西安:西安電子科技大學,2009.

[8]王龍濤.基于XMPP協議的服務器關鍵技術研究[D].西安:西安電子科技大學,2008.

[9]王光輝.基于XMPP協議的即時通信系統研究與實現[D].成都:成都理工大學,2011.

[10]李小海.基于XMPP協議的即時通信系統客戶端的設計與實現[D].北京:北京郵電大學,2011

[11]李威.基于XMPP協議的通訊軟件的研究和實現[D].北京:北京交通大學,2013.

[12]陸慶,周世杰,秦志光,等.消息隊列中間件系統中消息隊列與消息分發技術研究[J].計算機應用研究,2003,20(8):51-53.

[13]杜威,林滸,楊海波.XMPP協議在流媒體互動平臺中的擴展與實現[J].計算機系統應用,2012(4):82-87.

[14]周文瓊,王樂球,周桐,等.基于XMPP的企業即時通信系統研究與應用[J].吉林大學學報(信息科學版),2010(1):106-111.

[15]鄒正宸,左春.基于Jabber的客戶服務中心通用信息交換系統設計[J].計算機工程與設計,2007,28(1):68-71.

[16]鄒奕婷,趙方.B/S模式下基于Jabber的IM系統的構建方法[J].計算機應用與軟件,2008,25(12):196-198.

[17]雷煒.基于服務器推送技術建立在線交流平臺的探討與實現[J].福建電腦,2007(5):125-126.

猜你喜歡
服務端隊列消息
隊列里的小秘密
基于多隊列切換的SDN擁塞控制*
一張圖看5G消息
在隊列里
云存儲中基于相似性的客戶-服務端雙端數據去重方法
新時期《移動Web服務端開發》課程教學改革的研究
在Windows Server 2008上創建應用
豐田加速駛入自動駕駛隊列
消息
消息
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合