本發(fā)明涉及xmpp服務(wù)器技術(shù)領(lǐng)域,具體來說是基于分布內(nèi)存隊列的xmpp服務(wù)器內(nèi)存消息中轉(zhuǎn)系統(tǒng)及其中轉(zhuǎn)方法。
背景技術(shù):
互聯(lián)網(wǎng)工程工作小組(ietf)已經(jīng)將jabber的核心xml流協(xié)議以xmpp之名,正式列為認(rèn)可的實(shí)時通信及presence技術(shù)。而xmpp的技術(shù)規(guī)格已被定義在rfc3920及rfc3921。任何im供應(yīng)商在遵循xmpp協(xié)議下,都可與googletalk實(shí)現(xiàn)連接。第一個jabber(現(xiàn)在xmpp)技術(shù)是jeremiemiller在1998年開發(fā)的,已經(jīng)相當(dāng)穩(wěn)定;數(shù)以百計的開發(fā)者為xmpp技術(shù)而努力。今日的互聯(lián)網(wǎng)上有數(shù)以萬計的xmpp服務(wù)器運(yùn)作著,并有數(shù)以百萬計的人們使用xmpp實(shí)時傳訊軟件。xmpp網(wǎng)絡(luò)的架構(gòu)和電子郵件十分相像,xmpp核心協(xié)議通信方式是先創(chuàng)建一個stream,xmpp以tcp傳遞xml數(shù)據(jù)流,沒有中央主服務(wù)器。
xmpp是一種基于標(biāo)準(zhǔn)通用標(biāo)記語言的子集xml的協(xié)議,它繼承了在xml環(huán)境中靈活的發(fā)展性。因此,基于xmpp的應(yīng)用具有超強(qiáng)的可擴(kuò)展性。經(jīng)過擴(kuò)展以后的xmpp可以通過發(fā)送擴(kuò)展的信息來處理用戶的需求,以及在xmpp的頂端建立如內(nèi)容發(fā)布系統(tǒng)和基于地址的服務(wù)等應(yīng)用程序。而且,xmpp包含了針對服務(wù)器端的軟件協(xié)議,使之能與另一個進(jìn)行通話,這使得開發(fā)者更容易建立客戶應(yīng)用程序或給一個配好系統(tǒng)添加功能。
任何人都可以運(yùn)行自己的xmpp服務(wù)器,使個人及組織能夠掌控他們的實(shí)時傳訊體驗(yàn)。任何xmpp協(xié)議的服務(wù)器可以獨(dú)立于公眾xmpp網(wǎng)絡(luò)(例如在企業(yè)內(nèi)部網(wǎng)絡(luò)中),而使用sasl及tl等技術(shù)的可靠安全性,已內(nèi)置于核心xmpp技術(shù)規(guī)格中。
xml命名空間的威力可使任何人在核心協(xié)議的基礎(chǔ)上建造定制化的功能,為了維持通透性,常見的擴(kuò)展有xmpp標(biāo)準(zhǔn)基金會。xmpp除了可用在實(shí)時通信的應(yīng)用程序,還能用在網(wǎng)絡(luò)管理、內(nèi)容供稿、協(xié)同工具、文件共享、游戲、遠(yuǎn)程系統(tǒng)監(jiān)控等。
但是,隨著通常超過70%的xmpp協(xié)議的服務(wù)器的數(shù)據(jù)流量的存在和近60%的被重復(fù)轉(zhuǎn)發(fā),導(dǎo)致xmpp服務(wù)器數(shù)據(jù)負(fù)載太重,xmpp服務(wù)器之間通信就會出現(xiàn)延遲,甚至數(shù)據(jù)丟失現(xiàn)象。隨著業(yè)務(wù)的增長,xmpp服務(wù)器的瞬時處理的數(shù)據(jù)會越來越多,假設(shè)某一時間的瞬時并發(fā)量為100w條通信數(shù)據(jù),每條通信數(shù)據(jù)為16個字節(jié)計算,則需要消耗服務(wù)器16000000字節(jié)的處理能力,這對于無論服務(wù)器還是網(wǎng)絡(luò)帶寬來說都會帶來極大的負(fù)載。
現(xiàn)在已步入大數(shù)據(jù)的時代,隨著memcache、redis等簡單、快速、高效的分布式基于內(nèi)存的緩存工具快速的發(fā)展和應(yīng)用,使之能夠極大的減少數(shù)據(jù)庫訪問次數(shù),從而提高訪問吞吐量和服務(wù)響應(yīng)速度。memcache是一套分布式的高速緩存系統(tǒng),由livejournal的bradfitzpatrick開發(fā),但目前被許多網(wǎng)站使用以提升網(wǎng)站的訪問速度,尤其對于一些大型的、需要頻繁訪問數(shù)據(jù)庫的網(wǎng)站訪問速度提升效果十分顯著。這是一套開放源代碼軟件,以bsdlicense授權(quán)發(fā)布。類似高速緩存工具他們最主要的特點(diǎn)就是:一是它是基于內(nèi)存的高效hash類緩存方式,二是使用了lru算法來進(jìn)行數(shù)據(jù)有效期控制,這兩點(diǎn)就能夠很好的滿足我們對大數(shù)據(jù)交互的應(yīng)用。能夠有效的改善系統(tǒng)性能、減少服務(wù)器通訊時延,對于節(jié)約項(xiàng)目經(jīng)濟(jì)成本、和業(yè)務(wù)的發(fā)展等方面具有實(shí)際意義。
服務(wù)器之間的通信通常會出現(xiàn)高吞吐量、高并發(fā)的問題。而傳統(tǒng)的技術(shù)已不能有效的滿足此方面的需求。
因此,在云計算的業(yè)務(wù)形態(tài)下,如何將分布式基于內(nèi)存的緩存工具與xmpp服務(wù)器進(jìn)行有效技術(shù)結(jié)合,實(shí)現(xiàn)xmpp服務(wù)器的內(nèi)存中轉(zhuǎn)技術(shù)已經(jīng)成為急需解決的技術(shù)問題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是為了解決現(xiàn)有技術(shù)中xmpp服務(wù)器之間通信在高吞吐量、高并發(fā)場景中出現(xiàn)消息堵塞的缺陷,提供一種基于分布內(nèi)存隊列的xmpp服務(wù)器內(nèi)存消息中轉(zhuǎn)系統(tǒng)及其中轉(zhuǎn)方法來解決上述問題。
為了實(shí)現(xiàn)上述目的,本發(fā)明的技術(shù)方案如下:
一種基于分布內(nèi)存隊列的xmpp服務(wù)器內(nèi)存消息中轉(zhuǎn)系統(tǒng),包括注冊管理模塊、內(nèi)存隊列管理器、調(diào)度器和分發(fā)策略庫,注冊管理模塊用于對xmpp服務(wù)器的內(nèi)存進(jìn)行配置和注冊xmpp服務(wù)器客戶端,并將注冊的xmpp服務(wù)器客戶端數(shù)據(jù)保存在數(shù)據(jù)總線中;內(nèi)存隊列管理器用于獲取數(shù)據(jù)總線傳輸?shù)臄?shù)據(jù)并等待調(diào)度器的調(diào)用;分發(fā)策略庫用于存儲分發(fā)算法;調(diào)度器根據(jù)分發(fā)策略庫中的分發(fā)算法從內(nèi)存隊列管理器調(diào)取數(shù)據(jù),進(jìn)行消息的分發(fā)中轉(zhuǎn)。
所述的內(nèi)存隊列管理器包括隊列管理器和若干個內(nèi)存隊列,隊列管理器的輸出端與若干個內(nèi)存隊列的輸入端相連。
所述數(shù)據(jù)總線的輸出端分別與注冊管理模塊的輸入端和調(diào)度器的輸入端相連,注冊管理模塊的輸出端與內(nèi)存隊列管理器的輸入端相連,內(nèi)存隊列管理器的輸出端與調(diào)度器的輸入端相連,分發(fā)策略庫的輸出端與調(diào)度器的輸入端相連。
所述的分發(fā)策略數(shù)據(jù)庫包括輪轉(zhuǎn)算法、加權(quán)輪轉(zhuǎn)算法、最小連接數(shù)算法、加權(quán)最小連接數(shù)算法、目的地址哈希散列算法、源地址哈希散列算法和隨機(jī)算法。
基于分布內(nèi)存隊列的xmpp服務(wù)器內(nèi)存消息中轉(zhuǎn)系統(tǒng)的中轉(zhuǎn)方法,包括以下步驟:
配置內(nèi)存隊列,進(jìn)入內(nèi)存隊列管理器管理配置接口,輸入內(nèi)存隊列管理器所需相應(yīng)的id、ip、cpu、內(nèi)存、優(yōu)先級信息,注冊后對內(nèi)存隊列進(jìn)行健康體檢,配置接口輸出分布式內(nèi)存列表;
注冊服務(wù)器客戶端,客戶端接入系統(tǒng),采用發(fā)布/訂閱模式注冊訂閱者到數(shù)據(jù)總線的系統(tǒng)中,數(shù)據(jù)總線記錄客戶端相應(yīng)的信息,數(shù)據(jù)總線把接入的數(shù)據(jù)接口返回給客戶端;
內(nèi)存隊列保存消息,客戶端根據(jù)數(shù)據(jù)總線返回的接口數(shù)據(jù)將信息傳送給內(nèi)存隊列管理器,內(nèi)存隊列管理器將信息分發(fā)給內(nèi)存隊列;
消息分發(fā),調(diào)度器根據(jù)分發(fā)策略庫中設(shè)定的分發(fā)策略將消息分發(fā)給數(shù)據(jù)總線保存的客戶端,刪除保存在內(nèi)存隊列中的數(shù)據(jù),在內(nèi)存隊列管理器持久化消息。
所述的配置內(nèi)存隊列包括以下步驟:
進(jìn)入內(nèi)存隊列管理器配置接口,在配置頁面輸入相應(yīng)的信息:id、ip、cpu、內(nèi)存、優(yōu)先級,保存信息到隊列管理器的本地數(shù)據(jù)庫中,形成若干個內(nèi)存隊列;
內(nèi)存隊列的接入,內(nèi)存隊列管理器對接入的內(nèi)存隊列進(jìn)行健康體檢。
所述的內(nèi)存隊列保存消息包括以下步驟:
客戶端根據(jù)數(shù)據(jù)總線返回的接口數(shù)據(jù)將信息傳送給內(nèi)存隊列管理器,傳輸?shù)臄?shù)據(jù)包括數(shù)據(jù)信息、驗(yàn)證信息,其中數(shù)據(jù)傳輸使用xml格式;
內(nèi)存隊列管理器接收信息后,通過隊列管理器依次保存在內(nèi)存隊列中,內(nèi)存隊列采用三取二冗余結(jié)構(gòu)保存信息,等待調(diào)度器的調(diào)用。
所述的消息分發(fā)包括以下步驟:
調(diào)度器建立分發(fā)工作的發(fā)起;
調(diào)度器從數(shù)據(jù)總線處獲取已經(jīng)注冊的客戶端信息;
調(diào)度器從分發(fā)策略庫獲取分發(fā)算法,從選中的內(nèi)存隊列中將信息分發(fā)出去;
在本地持久化數(shù)據(jù),備份數(shù)據(jù)到內(nèi)存隊列管理器的本地數(shù)據(jù)庫;
根據(jù)內(nèi)存隊列管理器中用戶信息刪除分布在內(nèi)存隊列中已經(jīng)分發(fā)出去的消息。
所述的內(nèi)存隊列管理器對接入的內(nèi)存隊列進(jìn)行健康體檢包括以下步驟:
創(chuàng)建一個http健康檢查,間隔時間為5秒,嘗試次數(shù)為3次;
內(nèi)存隊列管理器從內(nèi)存隊列獲取一個頁面,檢查頁面內(nèi)容是否包含指定的字符串;
如果包含指定的字符串,則內(nèi)存隊列的通信服務(wù)是正常的,如果不包含或者獲取不到頁面,認(rèn)為內(nèi)存隊列的通信服務(wù)是異常的;
內(nèi)存隊列每隔5秒對異常的客戶端進(jìn)行檢查,當(dāng)發(fā)現(xiàn)該內(nèi)存隊列通信服務(wù)正常,則把該內(nèi)存隊列重新標(biāo)記為正常。
有益效果
本發(fā)明的基于分布內(nèi)存隊列的xmpp服務(wù)器內(nèi)存消息中轉(zhuǎn)系統(tǒng)及其中轉(zhuǎn)方法,與現(xiàn)有技術(shù)相比通過靈活的配置內(nèi)存隊列和xmpp服務(wù)器自身內(nèi)存的高效使用,可以滿足系統(tǒng)業(yè)務(wù)發(fā)展需要,解決了xmpp服務(wù)器間高吞吐量、高并發(fā)的問題。本發(fā)明根據(jù)最優(yōu)的出庫算法,可以保證消息最快的達(dá)到服務(wù)器客戶端,不產(chǎn)生堵塞、延時情況,通過三取二的內(nèi)存隊列服務(wù)器設(shè)計,大大降低發(fā)生安全問題的可能性。
附圖說明
圖1為本發(fā)明的結(jié)構(gòu)連接圖;
圖2為本發(fā)明的方法順序圖;
其中,1-注冊管理模塊、2-內(nèi)存隊列管理器、3-調(diào)度器、4-分發(fā)策略庫、5-數(shù)據(jù)總線、21-隊列管理器、22-內(nèi)存隊列。
具體實(shí)施方式
為使對本發(fā)明的結(jié)構(gòu)特征及所達(dá)成的功效有更進(jìn)一步的了解與認(rèn)識,用以較佳的實(shí)施例及附圖配合詳細(xì)的說明,說明如下:
如圖1所示,本發(fā)明所述的基于分布內(nèi)存隊列的xmpp服務(wù)器內(nèi)存消息中轉(zhuǎn)系統(tǒng),包括注冊管理模塊1、內(nèi)存隊列管理器2、調(diào)度器3和分發(fā)策略庫4。其中,內(nèi)存隊列管理器2包括隊列管理器21和若干個內(nèi)存隊列22,隊列管理器21的輸出端與若干個內(nèi)存隊列22的輸入端相連。
數(shù)據(jù)總線5的輸出端分別與注冊管理模塊1的輸入端和調(diào)度器3的輸入端相連,注冊管理模塊1的輸出端與內(nèi)存隊列管理器2的輸入端相連,內(nèi)存隊列管理器2的輸出端與調(diào)度器3的輸入端相連,分發(fā)策略庫4的輸出端與調(diào)度器3的輸入端相連。
注冊管理模塊1用于對xmpp服務(wù)器的內(nèi)存進(jìn)行配置和注冊xmpp服務(wù)器客戶端,并將注冊的xmpp服務(wù)器客戶端數(shù)據(jù)保存在數(shù)據(jù)總線5中;內(nèi)存隊列管理器2用于獲取數(shù)據(jù)總線5傳輸?shù)臄?shù)據(jù)并等待調(diào)度器3的調(diào)用;分發(fā)策略庫4用于存儲分發(fā)算法;調(diào)度器3根據(jù)分發(fā)策略庫4中的分發(fā)算法從內(nèi)存隊列管理器2調(diào)取數(shù)據(jù),進(jìn)行消息的分發(fā)中轉(zhuǎn)。
其中,在分發(fā)策略數(shù)據(jù)庫中,存儲有輪轉(zhuǎn)算法、加權(quán)輪轉(zhuǎn)算法、最小連接數(shù)算法、加權(quán)最小連接數(shù)算法、目的地址哈希散列算法、源地址哈希散列算法和隨機(jī)算法,可以最大限度提供內(nèi)存隊列管理器2的使用效率。
如圖2所示,基于分布內(nèi)存隊列的xmpp服務(wù)器內(nèi)存消息中轉(zhuǎn)系統(tǒng)的中轉(zhuǎn)方法,包括以下步驟:
第一步,配置內(nèi)存隊列。進(jìn)入內(nèi)存隊列管理器2管理配置接口,輸入內(nèi)存隊列管理器2所需相應(yīng)的id、ip、cpu、內(nèi)存、優(yōu)先級等相關(guān)信息,注冊后對內(nèi)存隊列22進(jìn)行健康體檢,配置接口輸出分布式內(nèi)存列表。其具體步驟如下:
(1)進(jìn)入內(nèi)存隊列管理器2配置接口,在配置頁面輸入相應(yīng)的信息:id、ip、cpu、內(nèi)存、優(yōu)先級(1-5數(shù)字越大優(yōu)先級別越高)。為了方便內(nèi)存隊列管理器2的調(diào)用,ip為內(nèi)網(wǎng)ip地址,保存信息到隊列管理器21的本地數(shù)據(jù)庫中,在此為了內(nèi)存隊列數(shù)據(jù)持久化,數(shù)據(jù)庫可以為mysql、sqlserver、oracle等任一種關(guān)系型數(shù)據(jù)庫。隊列管理器21的數(shù)量可以根據(jù)實(shí)際需求進(jìn)行添加、刪除,這也是本發(fā)明的特點(diǎn)之一,可以根據(jù)多個xmpp服務(wù)器間吞吐量的需要,進(jìn)行靈活配置。
保存信息到隊列管理器21的本地數(shù)據(jù)庫中,形成若干個內(nèi)存隊列22,在xmpp服務(wù)器的內(nèi)存中進(jìn)行信息的中轉(zhuǎn),利用內(nèi)存技術(shù)直接進(jìn)行處理,從而提高響應(yīng)速度和效率。
(2)內(nèi)存隊列22的接入,內(nèi)存隊列管理器2對接入的內(nèi)存隊列22進(jìn)行健康體檢。其中,健康體檢為本發(fā)明的特點(diǎn)之二,通過健康體檢提高了內(nèi)存隊列22的可靠性,并且健康檢查的間隔時間和嘗試次數(shù)要根據(jù)綜合情況來設(shè)置,原則是既不會對業(yè)務(wù)產(chǎn)生影響,又不會對負(fù)載均衡設(shè)備造成較大負(fù)擔(dān)。
內(nèi)存隊列管理器對接入的內(nèi)存隊列進(jìn)行健康體檢包括以下步驟:
a、創(chuàng)建一個http健康檢查,間隔時間為5秒,嘗試次數(shù)為3次;
b、內(nèi)存隊列管理器2從內(nèi)存隊列22獲取一個頁面,檢查頁面內(nèi)容是否包含指定的字符串;
c、如果包含指定的字符串,則內(nèi)存隊列22的通信服務(wù)是正常的,如果不包含或者獲取不到頁面,認(rèn)為內(nèi)存隊列22的通信服務(wù)是異常的;
d、內(nèi)存隊列22每隔5秒對異常的客戶端進(jìn)行檢查,當(dāng)發(fā)現(xiàn)該內(nèi)存隊列22通信服務(wù)正常,則把該內(nèi)存隊列22重新標(biāo)記為正常。
此時,查看配置接口列表,會實(shí)時顯示當(dāng)前各個內(nèi)存隊列22的運(yùn)行狀態(tài):配置信息(id編號、內(nèi)網(wǎng)ip、cpu、內(nèi)存、優(yōu)先級)、cup溫度、硬盤溫度、內(nèi)存使用率等信息。配置信息可以從本地數(shù)據(jù)庫中直接獲得,而內(nèi)存隊列管理器2的運(yùn)行狀態(tài)可以從安裝在每個內(nèi)存隊列管理器2的監(jiān)控類軟件的api調(diào)用。
第二步,注冊服務(wù)器客戶端。客戶端接入系統(tǒng),采用發(fā)布/訂閱(pub/sub)模式注冊訂閱者到數(shù)據(jù)總線5的系統(tǒng)中,數(shù)據(jù)總線5記錄客戶端信息(ip、mac地址、用戶信息),數(shù)據(jù)總線5把接入的數(shù)據(jù)接口返回給客戶端。
其中返回給服務(wù)器客戶端傳輸數(shù)據(jù)采用xml數(shù)據(jù)格式如:
<messagefom='datacenter'to='number'type='reg'xml:lang='en'><tag></tag><subject>welcome</subject></message>,from為來自數(shù)據(jù)總線,to發(fā)送到目的地服務(wù)器客戶端,type為注冊類型,tag為返回的認(rèn)證標(biāo)識,會在發(fā)送消息時使用,subject為備注信息。
第三步,內(nèi)存隊列22保存消息??蛻舳烁鶕?jù)數(shù)據(jù)總線5返回的接口數(shù)據(jù)將信息傳送給內(nèi)存隊列管理器2,內(nèi)存隊列管理器2將信息分發(fā)給內(nèi)存隊列22。其具體步驟如下:
(1)客戶端根據(jù)數(shù)據(jù)總線5返回的接口數(shù)據(jù)將信息傳送給內(nèi)存隊列管理器2,傳輸?shù)臄?shù)據(jù)包括數(shù)據(jù)信息、驗(yàn)證信息(如果檢測到該服務(wù)器客戶端沒有在數(shù)據(jù)總線處注冊,則拒絕接收信息。)。其中數(shù)據(jù)傳輸使用xml格式,xml腳本定義發(fā)送數(shù)據(jù)格式如下:
<messagefrom='my'to='all'type='chat'xml:lang='en'><auth></auth><subject>iimploreyou!</subject></message>,
from為來自服務(wù)器客戶端的信息,to為發(fā)送到目的地,可以是全部,也可以是指定的幾臺服務(wù)器客戶端,type為消息類型,分為普通、緊急、重要,auth為服務(wù)器客戶端的驗(yàn)證信息,subject為發(fā)送的具體信息內(nèi)容。
(2)內(nèi)存隊列管理器2接收信息后,通過隊列管理器21將依次保存在內(nèi)存隊列22中,內(nèi)存隊列22采用三取二冗余結(jié)構(gòu)保存信息,等待調(diào)度器3的調(diào)用。其中,三取二冗余結(jié)構(gòu)為本發(fā)明的特點(diǎn)之三,由于對系統(tǒng)可靠性和安全性的普遍要求,本次系統(tǒng)的冗余設(shè)計采取三取二冗余結(jié)構(gòu),通過硬件冗余來提高系統(tǒng)的可靠性和安全性,將信息保存在多個的內(nèi)存隊列22中。此時使用的內(nèi)存隊列22都處在up狀態(tài)。內(nèi)存隊列管理器2對所有的內(nèi)存隊列22發(fā)出請求信號,采用給出響應(yīng)最快的兩全內(nèi)存隊列22作為客戶端數(shù)據(jù)信息存儲機(jī)器。
第四步,消息分發(fā)。調(diào)度器3根據(jù)分發(fā)策略庫4中設(shè)定的分發(fā)策略將消息分發(fā)給數(shù)據(jù)總線5保存的客戶端,刪除保存在內(nèi)存隊列22中的數(shù)據(jù),在內(nèi)存隊列管理器2持久化消息。其具體步驟如下:
(1)調(diào)度器3建立分發(fā)工作的發(fā)起。
(2)調(diào)度器3從數(shù)據(jù)總線5處獲取已經(jīng)注冊的客戶端信息。
(3)調(diào)度器3從分發(fā)策略庫4獲取分發(fā)算法,從選中的內(nèi)存隊列22中將信息分發(fā)出去,發(fā)布/訂閱(pub/sub)模式將消息分發(fā)給訂閱者(服務(wù)器客戶端)。
(4)在本地持久化數(shù)據(jù),備份數(shù)據(jù)到內(nèi)存隊列管理器2的本地數(shù)據(jù)庫。
(5)根據(jù)內(nèi)存隊列管理器2中用戶信息刪除分布在內(nèi)存隊列22中已經(jīng)分發(fā)出去的消息,及時清理空間,最大限度的利用內(nèi)存空間。
本發(fā)明能夠有效的解決服務(wù)器間高吞吐量、高并發(fā)、易擴(kuò)展的問題,通過靈活的配置內(nèi)存隊列可以滿足未來的系統(tǒng)業(yè)務(wù)發(fā)展的需要,根據(jù)最優(yōu)的出庫算法,可以保證消息最快的達(dá)到服務(wù)器客戶端,而不會產(chǎn)生堵塞、延時等情況,系統(tǒng)采用了三取二的內(nèi)存隊列服務(wù)器模塊,這種軟件冗余結(jié)構(gòu)可以大大降低發(fā)生安全問題的可能性。
以上顯示和描述了本發(fā)明的基本原理、主要特征和本發(fā)明的優(yōu)點(diǎn)。本行業(yè)的技術(shù)人員應(yīng)該了解,本發(fā)明不受上述實(shí)施例的限制,上述實(shí)施例和說明書中描述的只是本發(fā)明的原理,在不脫離本發(fā)明精神和范圍的前提下本發(fā)明還會有各種變化和改進(jìn),這些變化和改進(jìn)都落入要求保護(hù)的本發(fā)明的范圍
內(nèi)。本發(fā)明要求的保護(hù)范圍由所附的權(quán)利要求書及其等同物界定。