本發(fā)明屬于網(wǎng)絡(luò)技術(shù)領(lǐng)域,涉及平臺(tái)互聯(lián)網(wǎng)關(guān)負(fù)載均衡策略,尤其是一種平臺(tái)互聯(lián)網(wǎng)關(guān)堆疊部署的負(fù)載均衡系統(tǒng)及視頻呼叫方法。
背景技術(shù):
非標(biāo)平臺(tái)接入網(wǎng)關(guān)負(fù)責(zé)實(shí)現(xiàn)第三方非標(biāo)平臺(tái)與國(guó)標(biāo)平臺(tái)的對(duì)接,非標(biāo)平臺(tái)接入網(wǎng)關(guān)通過非標(biāo)平臺(tái)廠家提供的平臺(tái)sdk與非標(biāo)平臺(tái)進(jìn)行交互。下級(jí)平臺(tái)接入的設(shè)備全部匯聚到非標(biāo)平臺(tái)接入網(wǎng)關(guān),現(xiàn)有技術(shù)的這種方式存在以下缺點(diǎn):
1.相對(duì)數(shù)目龐大的客戶端,平臺(tái)接入網(wǎng)關(guān)服務(wù)器功能實(shí)現(xiàn)過分集中,當(dāng)大量客戶端請(qǐng)求到達(dá)服務(wù)器時(shí),服務(wù)器囿于處理能力和網(wǎng)絡(luò)帶寬的限制,不能及時(shí)響應(yīng);
2.當(dāng)發(fā)現(xiàn)應(yīng)用系統(tǒng)負(fù)載過重時(shí),不容易通過增加軟/硬件設(shè)備來達(dá)到擴(kuò)展目標(biāo)。
另外,如圖1所示,在視頻監(jiān)控系統(tǒng)中,如上圖所示,采用單個(gè)服務(wù)器作為中心,隨著連接前端設(shè)備的增多,客戶端的請(qǐng)求增加,由于單機(jī)的處理能力有限和網(wǎng)絡(luò)的帶寬的限制,平臺(tái)接入網(wǎng)關(guān)服務(wù)器必然成為瓶頸。
類似的,在許多企業(yè)級(jí)應(yīng)用系統(tǒng)中都有這種情況,當(dāng)由于某種原因,應(yīng)用的訪問大量上升,容易造成網(wǎng)絡(luò)瓶頸,導(dǎo)致用戶的請(qǐng)求無法得到及時(shí)響應(yīng),或后臺(tái)服務(wù)中心因無法處理這些大量請(qǐng)求而造成系統(tǒng)崩潰或網(wǎng)絡(luò)流量過于集中導(dǎo)致網(wǎng)絡(luò)擁塞使得視頻無法流暢的傳輸。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于克服上述現(xiàn)有技術(shù)的缺點(diǎn),提供一種平臺(tái)互聯(lián)網(wǎng)關(guān)堆疊部署的負(fù)載均衡系統(tǒng)及視頻呼叫方法。
本發(fā)明的目的是通過以下技術(shù)方案來實(shí)現(xiàn)的:
這種平臺(tái)互聯(lián)網(wǎng)關(guān)堆疊部署的負(fù)載均衡系統(tǒng)由多態(tài)服務(wù)器組成服務(wù)器集群,所述服務(wù)器集群中的每臺(tái)服務(wù)器都能完成相同的服務(wù)功能;當(dāng)客戶向服務(wù)器集群請(qǐng)求服務(wù)時(shí),選出負(fù)載最小的服務(wù)器來向客戶提供服務(wù)功能。
進(jìn)一步,上述服務(wù)器集群包括主服務(wù)器以及與主服務(wù)器連接的多臺(tái)從服務(wù)器,所述主服務(wù)器連接有客戶端。
上述主服務(wù)器上設(shè)置有負(fù)載均衡模塊;所述負(fù)載均衡模塊維護(hù)一張當(dāng)前可用服務(wù)器的列表,探測(cè)列表中服務(wù)器的可用性,檢查新的從服務(wù)器的加入,收集各臺(tái)從服務(wù)器的負(fù)載情況;當(dāng)客戶端向代表整個(gè)系統(tǒng)的負(fù)載均衡模塊提出服務(wù)請(qǐng)求時(shí),負(fù)載均衡模塊根調(diào)度算法選出當(dāng)前可用的最合理的服務(wù)器來完成服務(wù)功能。
上述主服務(wù)器上設(shè)置有業(yè)務(wù)功能模塊、負(fù)載收集模塊、信令控制功能模塊、控制功能模塊和調(diào)度計(jì)算模塊;所述從服務(wù)器上設(shè)置有業(yè)務(wù)功能模塊、負(fù)載采集模塊和控制功能模塊:各模塊如下:
控制功能模塊:提供主服務(wù)器和從服務(wù)器之間的信令控制,ocx對(duì)設(shè)備進(jìn)行的播放、停止和錄像回放控制命令,主服務(wù)器通過調(diào)度計(jì)算模塊,由哪個(gè)服務(wù)器來負(fù)責(zé)流播放,然后主服務(wù)器將控制命令通過控制功能模塊發(fā)給相應(yīng)的從服務(wù)器;
負(fù)載采集模塊:從服務(wù)器與主服務(wù)器建立tcp連接之后,與心跳模塊結(jié)合,采集從服務(wù)器的系統(tǒng)性能參數(shù),并發(fā)送到主服務(wù)器的負(fù)載收集模塊;
業(yè)務(wù)功能模塊:主服務(wù)器和從服務(wù)器上的業(yè)務(wù)功能模塊通過ocx相互建立數(shù)據(jù)流,實(shí)現(xiàn)視頻的轉(zhuǎn)發(fā);
調(diào)度計(jì)算模塊:接收負(fù)載收集模塊發(fā)來的系統(tǒng)負(fù)載性能參數(shù),并轉(zhuǎn)化成方便調(diào)度的向量;
負(fù)載收集模塊:負(fù)責(zé)收集各從服務(wù)器的負(fù)載采集模塊發(fā)來的負(fù)載信息,匯總并傳給調(diào)度計(jì)算模塊;
信令控制模塊:ocx與主服務(wù)器之間的信令交互控制,添加一條定向命令,根據(jù)調(diào)度計(jì)算模塊和用戶定制的策略,選出合適的服務(wù)器,然后將ip地址和tcp端口號(hào)返回給ocx,ocx與其建立數(shù)據(jù)流的鏈接。
本發(fā)明還提出一種平臺(tái)互聯(lián)網(wǎng)關(guān)堆疊部署的負(fù)載均衡系統(tǒng)的視頻呼叫方法,包括以下步驟:
⑴主服務(wù)器在19001端口監(jiān)聽,從服務(wù)器連接主服務(wù)器,建立tcp連接,發(fā)送imsgtype=distribute_client_connect_req,連接請(qǐng)求命令,boby=null;
⑵從服務(wù)器連接成功,主服務(wù)器發(fā)送imsgtype=didtribute_client_connect_resp,boby=null;
⑶從服務(wù)器啟動(dòng)負(fù)載采集模塊,每隔一段時(shí)間發(fā)送心跳信息和服務(wù)器性能參數(shù),發(fā)送imsgtype=distribute_client_echo_req,心跳包,boby=null;
⑷主服務(wù)器發(fā)送imsgtype=distribute_client_echo_resp,心跳回應(yīng)包,boby=null;
⑸ocx連接服務(wù)器19532端口,建立信令通道,發(fā)送imsgtype=webinterface_ocx_connect_req,連接請(qǐng)求命令,boby=null;
⑹主服務(wù)器發(fā)送imsgtype=webinterface_ocx_connect_resp,連接響應(yīng)命令,boby=null;
⑺ocx發(fā)送看某一路視頻的定向命令,主服務(wù)器運(yùn)行調(diào)度算法從當(dāng)前服務(wù)器列表中選出合適的服務(wù)器;ocx發(fā)送imsgtype=webinterface_ocx_call_who_req,body=msgcallplaywhoreq,包含設(shè)備id信息;
⑻主服務(wù)器發(fā)送imsgtype=webinterface_ocx_call_who_resp,body=
msgcallplaywhoresp,主服務(wù)器返回選出的服務(wù)器地址和端口返給客戶端;
⑼客戶端利用返回結(jié)果,與選出的服務(wù)器建立數(shù)據(jù)流通道連接,發(fā)送imsgtype=data_ocx_connect_req,媒體數(shù)據(jù)連接請(qǐng)求命令,boby=called
⑽如果選出的是從服務(wù)器,從服務(wù)器回復(fù)imsgtype=data_ocx_connect_resp,boby=0為成功建立連接;
⑾客戶端發(fā)送視頻呼叫請(qǐng)求命令,imsgtype=webinterface_ocx_call_paly_req,boby=msgcallplayreq;
⑿主服務(wù)通過控制功能模塊給選出的服務(wù)器發(fā)送視頻呼叫請(qǐng)求命令,選出的服務(wù)器調(diào)用底層接口獲取視頻流轉(zhuǎn)發(fā)給客戶端;主服務(wù)器發(fā)送imsgtype=distribute_client_call_play_req,轉(zhuǎn)發(fā)呼叫命令,boby=msgcallplayreq;從服務(wù)器收到此命令,就開始呼叫視頻;
⒀從服務(wù)器如果呼叫視頻成功,給從服務(wù)器發(fā)送imsgtype=distribute_client_call_play_resp,body=msgdisservercommresp;
⒁主服務(wù)器給ocx發(fā)送imsgtype=webinterface_ocx_call_paly_resp,body=msgwebservercommresp;
⒂客戶端發(fā)送視頻停止呼叫命令,ocx發(fā)送imsgtype=webinterface_ocx_call_stop_req,body=msgcallstopreq;
⒃主服務(wù)器通過控制功能模塊給選出的服務(wù)器發(fā)送視頻停止呼叫命令,選出的服務(wù)器調(diào)用底層接口停止視頻流的獲??;主服務(wù)器發(fā)送imsgtype=distribute_client_call_stop_req,body=msgcallstopreq;
⒄從服務(wù)器收到命令,視頻轉(zhuǎn)發(fā)服務(wù)器功能完成,然后拆除數(shù)據(jù)流連接,至此,整個(gè)過程完畢;停止視頻成功回復(fù)imsgtype=distribute_client_call_stop_resp,主服務(wù)器要更新調(diào)度計(jì)算模塊列表;
⒅主服務(wù)器給ocx發(fā)送imsgtype=
webinterface_ocx_call_stop_resp,停止播放回復(fù)。
進(jìn)一步,以上對(duì)網(wǎng)絡(luò)系統(tǒng)狀況的檢測(cè)采用心跳通信機(jī)制,具體為:利用從服務(wù)器和主服務(wù)器的應(yīng)用層協(xié)議間的心跳請(qǐng)求,進(jìn)行判斷,即心跳算法。
上述心跳算法是在從服務(wù)器和主服務(wù)器之間建立連接,然后從服務(wù)器定時(shí)向主服務(wù)器發(fā)送心跳包,探詢一次,主服務(wù)器有一組計(jì)數(shù)器與各從服務(wù)器對(duì)應(yīng),該組計(jì)數(shù)器每過時(shí)間t就加加,收到從服務(wù)器的心跳包或者數(shù)據(jù)包,計(jì)數(shù)就清零,當(dāng)計(jì)數(shù)器i超過規(guī)定時(shí)間k時(shí),表示在t*k時(shí)間沒沒有收到第i臺(tái)從服務(wù)器的相應(yīng),就認(rèn)為該服務(wù)器不可用,這樣就得到了各從服務(wù)器的可用情況。
本發(fā)明具有以下有益效果:
本發(fā)明實(shí)現(xiàn)以一臺(tái)平臺(tái)接入網(wǎng)關(guān)服務(wù)為主,其他接入網(wǎng)關(guān)服務(wù)為輔,對(duì)平臺(tái)接入網(wǎng)關(guān)服務(wù)進(jìn)行級(jí)聯(lián)并對(duì)級(jí)聯(lián)服務(wù)進(jìn)行管理,實(shí)現(xiàn)社會(huì)資源媒體流的大容量接入。本發(fā)明實(shí)現(xiàn)了由多臺(tái)服務(wù)器組成的服務(wù)器集群,集群中的每臺(tái)服務(wù)器都能完成相同的服務(wù)功能(視頻轉(zhuǎn)發(fā))。當(dāng)客戶向服務(wù)器(主)請(qǐng)求服務(wù)時(shí),按一定的算法選出負(fù)載最小的服務(wù)器,由它來向客戶提供服務(wù)功能(視頻轉(zhuǎn)發(fā))。因此,本發(fā)明可以將視頻請(qǐng)求進(jìn)行分發(fā),讓一部分的請(qǐng)求去訪問另一臺(tái)從服務(wù)器,讓單臺(tái)服務(wù)器的負(fù)載降低,從而解決現(xiàn)有技術(shù)的缺陷。
附圖說明
圖1為現(xiàn)有技術(shù)中視頻監(jiān)控系統(tǒng)連接框圖;
圖2為本發(fā)明的軟件架構(gòu)圖;
圖3為本發(fā)明的系統(tǒng)模塊劃分圖;
圖4為本發(fā)明的數(shù)據(jù)報(bào)文交互圖。
具體實(shí)施方式
下面結(jié)合附圖對(duì)本發(fā)明做進(jìn)一步詳細(xì)描述:
參見圖2和圖3:本發(fā)明的平臺(tái)互聯(lián)網(wǎng)關(guān)堆疊部署的負(fù)載均衡系統(tǒng)由多態(tài)服務(wù)器組成服務(wù)器集群,所述服務(wù)器集群中的每臺(tái)服務(wù)器都能完成相同的服務(wù)功能;當(dāng)客戶向服務(wù)器集群請(qǐng)求服務(wù)時(shí),選出負(fù)載最小的服務(wù)器來向客戶提供服務(wù)功能。所述服務(wù)器集群包括主服務(wù)器以及與主服務(wù)器連接的多臺(tái)從服務(wù)器,所述主服務(wù)器連接有客戶端。主服務(wù)器上設(shè)置有負(fù)載均衡模塊;所述負(fù)載均衡模塊維護(hù)一張當(dāng)前可用服務(wù)器的列表,探測(cè)列表中服務(wù)器的可用性,檢查新的從服務(wù)器的加入,收集各臺(tái)從服務(wù)器的負(fù)載情況;當(dāng)客戶端向代表整個(gè)系統(tǒng)的負(fù)載均衡模塊提出服務(wù)請(qǐng)求時(shí),負(fù)載均衡模塊根調(diào)度算法選出當(dāng)前可用的最合理的服務(wù)器來完成服務(wù)功能。本發(fā)明的負(fù)載均衡模塊相當(dāng)于主服務(wù)器的負(fù)載收集模塊和調(diào)度計(jì)算模塊功能的總和。
所述主服務(wù)器上設(shè)置有業(yè)務(wù)功能模塊、負(fù)載收集模塊、信令控制功能模塊、控制功能模塊和調(diào)度計(jì)算模塊;所述從服務(wù)器上設(shè)置有業(yè)務(wù)功能模塊、負(fù)載采集模塊和控制功能模塊:各模塊如下:
控制功能模塊:提供主服務(wù)器和從服務(wù)器之間的信令控制,ocx對(duì)設(shè)備進(jìn)行的播放、停止和錄像回放控制命令,主服務(wù)器通過調(diào)度計(jì)算模塊,由哪個(gè)服務(wù)器來負(fù)責(zé)流播放,然后主服務(wù)器將控制命令通過控制功能模塊發(fā)給相應(yīng)的從服務(wù)器;
負(fù)載采集模塊:從服務(wù)器與主服務(wù)器建立tcp連接之后,與心跳模塊結(jié)合,采集從服務(wù)器的系統(tǒng)性能參數(shù),并發(fā)送到主服務(wù)器的負(fù)載收集模塊;
業(yè)務(wù)功能模塊:主服務(wù)器和從服務(wù)器上的業(yè)務(wù)功能模塊通過ocx相互建立數(shù)據(jù)流,實(shí)現(xiàn)視頻的轉(zhuǎn)發(fā);
調(diào)度計(jì)算模塊:接收負(fù)載收集模塊發(fā)來的系統(tǒng)負(fù)載性能參數(shù),并轉(zhuǎn)化成方便調(diào)度的向量;
負(fù)載收集模塊:負(fù)責(zé)收集各從服務(wù)器的負(fù)載采集模塊發(fā)來的負(fù)載信息,匯總并傳給調(diào)度計(jì)算模塊;
信令控制模塊:ocx與主服務(wù)器之間的信令交互控制,添加一條定向命令,根據(jù)調(diào)度計(jì)算模塊和用戶定制的策略,選出合適的服務(wù)器,然后將ip地址和tcp端口號(hào)返回給ocx,ocx與其建立數(shù)據(jù)流的鏈接。
本發(fā)明視頻呼叫流程如下:
⑴主服務(wù)器在19001端口監(jiān)聽,從服務(wù)器連接主服務(wù)器,建立tcp連接。
發(fā)送imsgtype=distribute_client_connect_req,連接請(qǐng)求命令,boby=null。
⑵從服務(wù)器連接成功,主服務(wù)器發(fā)送imsgtype=didtribute_client_connect_resp,boby=null。
⑶從服務(wù)器啟動(dòng)負(fù)載采集模塊,每隔一段時(shí)間發(fā)送心跳信息和服務(wù)器性能參數(shù),發(fā)送imsgtype=distribute_client_echo_req,心跳包,boby=null
⑷主服務(wù)器發(fā)送imsgtype=distribute_client_echo_resp,心跳回應(yīng)包,boby=null。
⑸ocx連接服務(wù)器19532端口,建立信令通道
發(fā)送imsgtype=webinterface_ocx_connect_req,連接請(qǐng)求命令,boby=null
⑹主服務(wù)器發(fā)送imsgtype=webinterface_ocx_connect_resp,連接響應(yīng)命令,boby=null
⑺ocx發(fā)送看某一路視頻的定向命令,主服務(wù)器運(yùn)行調(diào)度算法從當(dāng)前服務(wù)器列表中選出合適的服務(wù)器。ocx發(fā)送imsgtype=webinterface_ocx_call_who_req,body=msgcallplaywhoreq,主要包含設(shè)備id信息
⑻主服務(wù)器發(fā)送imsgtype=webinterface_ocx_call_who_resp,body=msgcallplaywhoresp,主服務(wù)器返回選出的服務(wù)器地址和端口返給客戶端。
⑼客戶端利用返回結(jié)果,與選出的服務(wù)器建立數(shù)據(jù)流通道連接。發(fā)送imsgtype=data_ocx_connect_req,媒體數(shù)據(jù)連接請(qǐng)求命令,boby=called
⑽如果選出的是從服務(wù)器,從服務(wù)器回復(fù)imsgtype=data_ocx_connect_resp,boby=0為成功建立連接
⑾客戶端發(fā)送視頻呼叫請(qǐng)求命令,imsgtype=webinterface_ocx_call_paly_req,boby=msgcallplayreq。
⑿主服務(wù)通過控制功能模塊給選出的服務(wù)器發(fā)送視頻呼叫請(qǐng)求命令,選出的服務(wù)器調(diào)用底層接口獲取視頻流轉(zhuǎn)發(fā)給客戶端。主服務(wù)器發(fā)送imsgtype=distribute_client_call_play_req,轉(zhuǎn)發(fā)呼叫命令,boby=msgcallplayreq。從服務(wù)器收到此命令,就開始呼叫視頻。
⒀從服務(wù)器如果呼叫視頻成功,給從服務(wù)器發(fā)送imsgtype=distribute_client_call_play_resp,body=msgdisservercommresp。
⒁主服務(wù)器給ocx發(fā)送imsgtype=webinterface_ocx_call_paly_resp,body=msgwebservercommresp。
⒂客戶端發(fā)送視頻停止呼叫命令,ocx發(fā)送imsgtype=webinterface_ocx_call_stop_req,body=msgcallstopreq。
⒃主服務(wù)器通過控制功能模塊給選出的服務(wù)器發(fā)送視頻停止呼叫命令,選出的服務(wù)器調(diào)用底層接口停止視頻流的獲取。主服務(wù)器發(fā)送imsgtype=distribute_client_call_stop_req,body=msgcallstopreq。
⒄從服務(wù)器收到此命令,視頻轉(zhuǎn)發(fā)服務(wù)器功能完成,然后拆除數(shù)據(jù)流連接,至此,整個(gè)過程完畢。停止視頻成功回復(fù)imsgtype=distribute_client_call_stop_resp,主服務(wù)器要更新調(diào)度計(jì)算模塊列表。
⒅主服務(wù)器給ocx發(fā)送imsgtype=
webinterface_ocx_call_stop_resp,停止播放回復(fù)。
盡管有多種負(fù)載均衡算法可以較好地把數(shù)量流量分配給服務(wù)器去負(fù)載,但如果負(fù)載均衡策略沒有對(duì)網(wǎng)絡(luò)系統(tǒng)狀況的檢測(cè)方式和能力,一旦在某臺(tái)從服務(wù)器與主服務(wù)器網(wǎng)絡(luò)間出現(xiàn)故障的情況下,負(fù)載均衡器依然把一部分?jǐn)?shù)據(jù)流量引向該從服務(wù)器,這勢(shì)必造成大量的服務(wù)器請(qǐng)求被丟失,達(dá)不到不間斷可用性的要求。所以良好的負(fù)載均衡策略應(yīng)有對(duì)網(wǎng)絡(luò)故障、應(yīng)用服務(wù)故障的檢測(cè)方式和能力;
本次升級(jí)采用基于應(yīng)用的偵測(cè):利用從服務(wù)器和主服務(wù)器的應(yīng)用層協(xié)議間的心跳請(qǐng)求,進(jìn)行判斷。心跳算法就是在從服務(wù)器和主服務(wù)器之間建立專門的連接,然后從服務(wù)器每個(gè)一定時(shí)間就向主服務(wù)器發(fā)送心跳包,探詢一次,主服務(wù)器有一組計(jì)數(shù)器與各從服務(wù)器對(duì)應(yīng),該組計(jì)數(shù)器每過時(shí)間t就加加,收到從服務(wù)器的心跳包或者數(shù)據(jù)包,計(jì)數(shù)就清零,當(dāng)計(jì)數(shù)器i超過規(guī)定k時(shí),表示在t*k時(shí)間沒沒有收到第i臺(tái)從服務(wù)器的相應(yīng),就認(rèn)為該服務(wù)器不可用。這樣,就得到了各從服務(wù)器的可用情況。