專利名稱:一種分布式并行調(diào)度寬帶網(wǎng)絡(luò)服務(wù)器系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)服務(wù)器,特別涉及寬帶網(wǎng)絡(luò)服務(wù)器,如寬帶視頻服務(wù)器、寬帶數(shù)據(jù)服務(wù)器等。
集群系統(tǒng)CLUSTER多臺(tái)服務(wù)器(高性能PC機(jī))以高速通用網(wǎng)絡(luò)互聯(lián)設(shè)備連接組成,并運(yùn)行相關(guān)程序,統(tǒng)一調(diào)度,協(xié)調(diào)處理,實(shí)現(xiàn)高效并行處理的系統(tǒng)。具有能同時(shí)承擔(dān)盡量多個(gè)用戶/處理(請(qǐng)求)任務(wù),高可用性,高可擴(kuò)充性等特點(diǎn)?,F(xiàn)有寬帶網(wǎng)絡(luò)服務(wù)器情況1.TurboClusterTurboCluster是一個(gè)企業(yè)級(jí)的集群方案,它允許在多個(gè)計(jì)算機(jī)上構(gòu)建高可用的、可擴(kuò)展的網(wǎng)絡(luò)。使用TurboCluster系統(tǒng)可以顯著地提高基于TCP/IP協(xié)議的多種網(wǎng)絡(luò)服務(wù)的服務(wù)質(zhì)量,這些服務(wù)包括Web、Mail、News和Ftp等。TurboCluster具有良好的可用性、可擴(kuò)展性和可管理性,集群內(nèi)部的實(shí)際服務(wù)器的數(shù)量可以擴(kuò)充,其結(jié)構(gòu)如圖1所示。當(dāng)客戶機(jī)向服務(wù)器集群系統(tǒng)發(fā)送一個(gè)請(qǐng)求時(shí),該請(qǐng)求首先到達(dá)高級(jí)流量管理器,高級(jí)流量管理器通過(guò)一定的調(diào)度策略將此請(qǐng)求轉(zhuǎn)發(fā)到集群中的某一臺(tái)實(shí)際服務(wù)器上處理,最終的回應(yīng)請(qǐng)求將直接發(fā)送給客戶機(jī)。由于最終的回應(yīng)請(qǐng)求沒(méi)有通過(guò)高級(jí)瀏覽管理器而是直接發(fā)送給客戶,這樣大大減輕了高級(jí)流量管理器上的負(fù)載,從而降低了瓶頸產(chǎn)生的可能。TurboCluster中采用的調(diào)度策略有輪回(Round Robin)、加權(quán)輪回(Weighted Round Robin)、最少連接(Least Connection)。為了減少高級(jí)流量管理器產(chǎn)生失效的可能,TurboCluster為高級(jí)流量管理器準(zhǔn)備了一個(gè)備份機(jī)。該備份機(jī)不斷詢問(wèn)管理器來(lái)確認(rèn)它正在正常工作,一旦發(fā)現(xiàn)主管理器已經(jīng)失效,備份機(jī)將接替它繼續(xù)工作。2.LinuxVirtualServerLinux虛擬服務(wù)器(Linux Virtual Server,LVS)建筑于實(shí)際的服務(wù)器集群之上,用戶看不到提供服務(wù)的多臺(tái)實(shí)際服務(wù)器,而只能看見(jiàn)一臺(tái)作為負(fù)載平衡器的服務(wù)器。實(shí)際的服務(wù)器通過(guò)高速局域網(wǎng)連接。實(shí)際服務(wù)器的前端是一臺(tái)負(fù)載平衡器,他將用戶的請(qǐng)求調(diào)度到實(shí)際服務(wù)器上完成,這樣看起來(lái)好像所有服務(wù)都是通過(guò)虛擬服務(wù)器來(lái)完成的。Linux虛擬服務(wù)器能夠提供良好的可擴(kuò)展性、可靠性和可用性。用戶可以透明地增加或減少一個(gè)節(jié)點(diǎn),可以對(duì)實(shí)際服務(wù)器進(jìn)行監(jiān)測(cè),如果發(fā)現(xiàn)有節(jié)點(diǎn)失敗就重新配置系統(tǒng)。Linux Virtual Server的結(jié)構(gòu)如圖2所示??蛻羰褂肰IP(虛擬IP)地址訪問(wèn)服務(wù)器。其負(fù)載平衡的方案為1)網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)技術(shù)負(fù)載平衡器在收到服務(wù)請(qǐng)求(IP包)后,按負(fù)載平衡算法,確定實(shí)際服務(wù)器,把該連接信息寫(xiě)入IP請(qǐng)求連接表,同時(shí)把該IP包的目的地址和端口號(hào)由VIP地址改為該服務(wù)器的IP地址和端口號(hào),轉(zhuǎn)發(fā)該IP包,實(shí)際服務(wù)器在完成請(qǐng)求任務(wù)后,把應(yīng)答IP包送回負(fù)載平衡器,負(fù)載平衡器再把應(yīng)答IP包的源地址改為VIP地址并轉(zhuǎn)發(fā)到外部網(wǎng)絡(luò)。
2)IP隧道(IP-TUNNEL)技術(shù)負(fù)載平衡器在收到來(lái)自外部網(wǎng)絡(luò)的服務(wù)請(qǐng)求IP后,封裝源IP地址,然后以數(shù)據(jù)包形式,轉(zhuǎn)發(fā)到某一實(shí)際服務(wù)器,實(shí)際服務(wù)器在完成請(qǐng)求任務(wù)后,直接按源IP地址把結(jié)果返回發(fā)出服務(wù)請(qǐng)求的客戶機(jī),這種方法的負(fù)載平衡器不再承擔(dān)轉(zhuǎn)發(fā)返回IP包的任務(wù),負(fù)載就比NAT方法少了。
3)直接路由(DIRECT ROUTING)技術(shù)這種方法的LVS有所不同,負(fù)載平衡器和實(shí)際服務(wù)器都處于同一段局域網(wǎng),負(fù)載平衡器接受到客戶機(jī)的服務(wù)請(qǐng)求IP包,負(fù)載平衡器分配給某一實(shí)際服務(wù)器,然后直接修改鏈路層的MAC地址為該實(shí)際服務(wù)器的MAC地址,把IP包轉(zhuǎn)送到該實(shí)際服務(wù)器,在完成請(qǐng)求后,實(shí)際服務(wù)器也是直接把結(jié)果送到客戶機(jī)。這一策略進(jìn)一步減小了負(fù)載平衡器自身的負(fù)載。
從以上系統(tǒng)可以看出,為了最大限度地利用集群中的一切資源,集群系統(tǒng)需要具有動(dòng)態(tài)負(fù)載平衡功能,它監(jiān)視集群中的實(shí)際節(jié)點(diǎn)的負(fù)載情況并動(dòng)態(tài)地進(jìn)行調(diào)度的改變??梢哉f(shuō),調(diào)度功能的好壞直接影響系統(tǒng)的整體服務(wù)能力。不論是TurboCluster中采用高級(jí)流量管理器的調(diào)度方式,還是LVS虛擬服務(wù)器中實(shí)現(xiàn)的基于NAT、IP-TUNNEL或DIRECT ROUTING技術(shù)的調(diào)度方案,都可抽象為圖3的集中式調(diào)度模型。
客戶請(qǐng)求由單一的調(diào)度接口接收并排隊(duì),根據(jù)調(diào)度算法逐個(gè)轉(zhuǎn)發(fā)給實(shí)際的服務(wù)器。顯然隨著系統(tǒng)規(guī)模(對(duì)于技術(shù)較先進(jìn)的直接路由方式,最大服務(wù)器節(jié)點(diǎn)數(shù)超過(guò)100個(gè))的擴(kuò)大和用戶訪問(wèn)量的增大,調(diào)度接口必將成為系統(tǒng)瓶頸。這使得在有大量客戶請(qǐng)求到達(dá)時(shí),便會(huì)因調(diào)度接口主機(jī)的嚴(yán)重超載,而使對(duì)客戶請(qǐng)求的響應(yīng)時(shí)間可能變得很長(zhǎng),超過(guò)客戶容忍程度,甚至?xí)`認(rèn)為系統(tǒng)已不可用。更嚴(yán)重的是,如果這臺(tái)特殊主機(jī)崩潰,整個(gè)系統(tǒng)即不可用,即使又自動(dòng)選另一臺(tái)或啟動(dòng)備用機(jī)作為新的調(diào)度接口主機(jī),但瓶頸問(wèn)題仍然沒(méi)有根本解決。
本發(fā)明技術(shù)目的是實(shí)現(xiàn)一種分布式并行調(diào)度接口的寬帶網(wǎng)絡(luò)服務(wù)器系統(tǒng),解決現(xiàn)有機(jī)群式寬帶服務(wù)器對(duì)客戶請(qǐng)求調(diào)度的瓶頸問(wèn)題,縮短客戶請(qǐng)求的響應(yīng)時(shí)間,增強(qiáng)系統(tǒng)的可用性;極大地提高系統(tǒng)的可擴(kuò)展性和負(fù)載能力,從而提高服務(wù)器系統(tǒng)整體的性價(jià)比。為了達(dá)到此目的,本發(fā)明采用的技術(shù)方案是客戶機(jī)與服務(wù)器群協(xié)作,調(diào)度信息拾取和調(diào)度請(qǐng)求處理異步進(jìn)行;服務(wù)器群中每個(gè)節(jié)點(diǎn)都能接受、處理和響應(yīng)調(diào)度請(qǐng)求,調(diào)度過(guò)程體現(xiàn)為分布式并行??蛻魴C(jī)請(qǐng)求調(diào)度的系統(tǒng)流程框圖如圖4所示,它的調(diào)度模型如圖5所示。
通過(guò)實(shí)現(xiàn)本發(fā)明分布式并行的輸入輸出調(diào)度接口,可以徹底消除了現(xiàn)有技術(shù)中存在的調(diào)度瓶頸問(wèn)題。本發(fā)明的工作步驟是本發(fā)明的實(shí)施分為異步的兩個(gè)過(guò)程(如圖4)服務(wù)器信息拾取及維護(hù)過(guò)程B和客戶請(qǐng)求調(diào)度過(guò)程A。
在尚未發(fā)起客戶請(qǐng)求的時(shí)段,運(yùn)行在各服務(wù)器中的調(diào)度服務(wù)端程序交互各服務(wù)器節(jié)點(diǎn)信息B1,運(yùn)行在客戶計(jì)算機(jī)中的調(diào)度客戶端程序和服務(wù)器中的調(diào)度服務(wù)端程序定時(shí)通信,獲得最近時(shí)段服務(wù)器群中各活動(dòng)服務(wù)器節(jié)點(diǎn)及其提供的服務(wù)類型和服務(wù)能力等信息B2,并在本機(jī)中維護(hù)相關(guān)信息表。
當(dāng)客戶訪問(wèn)服務(wù)器時(shí),客戶計(jì)算機(jī)中的客戶應(yīng)用程序發(fā)出的客戶請(qǐng)求通過(guò)調(diào)度客戶端程序提供的訪問(wèn)接口從本機(jī)的信息表中隨機(jī)獲取一個(gè)有效(活動(dòng)且有相關(guān)服務(wù))服務(wù)器的地址A1,并向此服務(wù)器發(fā)起請(qǐng)求A2。由于是隨機(jī)取得的服務(wù)器地址,不同客戶計(jì)算機(jī)的請(qǐng)求會(huì)隨機(jī)地分布到不同的服務(wù)器節(jié)點(diǎn),這就解決了所有的請(qǐng)求從同一個(gè)調(diào)度接口進(jìn)入服務(wù)器系統(tǒng)的瓶頸問(wèn)題;然后,接收客戶請(qǐng)求的節(jié)點(diǎn)服務(wù)器根據(jù)當(dāng)前系統(tǒng)狀況和調(diào)度算法返回給客戶一個(gè)真實(shí)服務(wù)器地址,由于當(dāng)前服務(wù)器也在可選之列,通常被優(yōu)先選中,此時(shí)客戶計(jì)算機(jī)將直接與其建立通信連接,開(kāi)始提供客戶要求的應(yīng)用服務(wù),調(diào)度結(jié)束;如果此服務(wù)器負(fù)載已過(guò)重(由調(diào)度算法決定),不能對(duì)此請(qǐng)求提供服務(wù),則返回給客戶的會(huì)是一臺(tái)負(fù)載較輕的服務(wù)器的地址,客戶請(qǐng)求不用延遲等待,繼續(xù)向新的服務(wù)器發(fā)送請(qǐng)求,從而能被此服務(wù)器接受并提供服務(wù)。
最壞的情況是,系統(tǒng)整體負(fù)載都很高,此時(shí)客戶請(qǐng)求將根據(jù)調(diào)度服務(wù)端程序返回的服務(wù)器地址逐個(gè)嘗試連接(每次連接時(shí)延約為十多毫秒),只有當(dāng)所有服務(wù)器都不能服務(wù)時(shí)才會(huì)放棄請(qǐng)求,不會(huì)出現(xiàn)前述集群系統(tǒng)中那種雖然服務(wù)器仍有服務(wù)能力,但因請(qǐng)求報(bào)文在調(diào)度接口阻塞,而使請(qǐng)求被拒絕的情況,提高了系統(tǒng)的可用性。
附圖及
圖1是turbocluster服務(wù)器結(jié)構(gòu)2是Linux虛擬服務(wù)器結(jié)構(gòu)3是集中式調(diào)度模型4是系統(tǒng)流程框5是分布式并行調(diào)度模型6是VOD服務(wù)系統(tǒng)結(jié)構(gòu)圖其中,c1,c2,c3...訪問(wèn)本服務(wù)器的客戶機(jī),為通用個(gè)人計(jì)算機(jī)PC,通過(guò)100Mbps以太網(wǎng)絡(luò)適配器連入Internet;安裝運(yùn)行windows2000操作系統(tǒng)、VOD客戶應(yīng)用軟件和本發(fā)明的客戶端軟件模塊。
局域網(wǎng)連接服務(wù)器群內(nèi)部各節(jié)點(diǎn)的物理網(wǎng)絡(luò)通路;采用100Mbps以太網(wǎng)高速互聯(lián)設(shè)備;Internet連接客戶計(jì)算機(jī)和服務(wù)器的網(wǎng)絡(luò)通路;s1,s2,s3,s4...通用高性能PC機(jī)(帶100Mbps以太網(wǎng)絡(luò)適配器),作為服務(wù)器提供VOD服務(wù);安裝運(yùn)行l(wèi)inux操作系統(tǒng);安裝運(yùn)行本發(fā)明的服務(wù)端軟件模塊和VOD服務(wù)應(yīng)用軟件。
圖7是應(yīng)用于VOD服務(wù)器的調(diào)度軟件結(jié)構(gòu)圖其中,調(diào)度服務(wù)端程序和調(diào)度客戶端程序都采用C++語(yǔ)言編寫(xiě)。
圖8是節(jié)點(diǎn)管理模塊程序流程9是應(yīng)用服務(wù)器接口模塊結(jié)構(gòu)11是調(diào)度子模塊結(jié)構(gòu)圖視頻點(diǎn)播系統(tǒng)通過(guò)高速上網(wǎng)技術(shù)連上各種寬帶多媒體網(wǎng)站進(jìn)行網(wǎng)上電影、電視、網(wǎng)絡(luò)音樂(lè)、遠(yuǎn)程教育、會(huì)議、醫(yī)療等各種交互式活動(dòng)。實(shí)施分兩個(gè)階段第一階段客戶機(jī)獲得服務(wù)器群最新信息,對(duì)應(yīng)圖4的B過(guò)程。步驟1啟動(dòng)調(diào)度服務(wù)端程序要求服務(wù)器系統(tǒng)中每臺(tái)主機(jī)(s1,s2,s3,s4)都運(yùn)行調(diào)度服務(wù)端程序。調(diào)度服務(wù)端程序?yàn)槎嗑€程形式的守護(hù)進(jìn)程,如圖7,此程序包括節(jié)點(diǎn)管理、任務(wù)調(diào)度,應(yīng)用服務(wù)接口和負(fù)荷拾取與維護(hù)等子模塊。調(diào)度服務(wù)端程序維護(hù)有四張表服務(wù)名字-端口號(hào)映射表——表中的每一項(xiàng)是一個(gè)服務(wù)名字-端口號(hào)的映射,用于描述應(yīng)用服務(wù)的訪問(wèn)入口。
主機(jī)更新索引表——用于更新節(jié)點(diǎn)主機(jī)信息時(shí)確定發(fā)送信息報(bào)文到哪臺(tái)節(jié)點(diǎn)主機(jī)。
主機(jī)負(fù)載表——記錄了系統(tǒng)中所有活動(dòng)主機(jī)的負(fù)載情況。
服務(wù)-主機(jī)映射表——記錄各臺(tái)服務(wù)主機(jī)所提供的各項(xiàng)服務(wù)的信息。
啟動(dòng)調(diào)度服務(wù)端程序?qū)⑹紫纫l(fā)節(jié)點(diǎn)管理子模塊運(yùn)行。其流程如圖8,描述如下1、進(jìn)行網(wǎng)絡(luò)初始化工作創(chuàng)建TCP通信套接字、UDP通信套接字并綁定到指定的端口,創(chuàng)建UNIX通信套接字。
2、將程序初始化為一個(gè)守護(hù)程序,1、2步的實(shí)現(xiàn)均為中等程序員所熟悉,在此不詳述。
3、在服務(wù)器群內(nèi)廣播本節(jié)點(diǎn)信息,以此向其他活動(dòng)主機(jī)節(jié)點(diǎn)聲明本機(jī)加入系統(tǒng)。
4、產(chǎn)生一個(gè)線程,定時(shí)查看并處理主機(jī)更新索引表中各主機(jī)信息主機(jī)更新索引表是以接收到此條記錄的時(shí)標(biāo)RecvTime的升序進(jìn)行排序的,處理從頭到尾進(jìn)行。如果第一個(gè)元素的RecvTime與當(dāng)前時(shí)間的差值小于一個(gè)更新周期UPD_HOST_TIME(根據(jù)系統(tǒng)規(guī)模用宏的方式定義),則不作任何操作,等待下一次更新,因?yàn)橹鳈C(jī)更新索引表中的所有主機(jī)都在一個(gè)更新周期內(nèi)發(fā)送了報(bào)文到本機(jī)。刪除主機(jī)更新索引表中的死亡主機(jī),RecvTime與當(dāng)前時(shí)間的差值大于三個(gè)更新周期的元素都認(rèn)為是死亡的主機(jī)。在刪除死亡主機(jī)后,需刪除主機(jī)負(fù)載表、服務(wù)-主機(jī)映射表中的相應(yīng)主機(jī)記錄。另外,如果有某些服務(wù)是這些死亡主機(jī)所獨(dú)有的,還要在服務(wù)名字-端口號(hào)映射表中刪除相應(yīng)的服務(wù)信息。這時(shí),主機(jī)更新索引表的最前面將有一些元素的RecvTime與當(dāng)前時(shí)間的差值是在一個(gè)更新周期與三個(gè)更新周期之間,這些主機(jī)就需要進(jìn)行更新——通過(guò)UDP通信套接字向它們發(fā)送本主機(jī)信息報(bào)文。但是對(duì)這些主機(jī)并不是全部更新,而是從中選擇一部分進(jìn)行更新,更新的最大數(shù)目是所有活動(dòng)主機(jī)數(shù)目的1/3,這個(gè)數(shù)目的設(shè)計(jì)是考慮要在三個(gè)更新周期內(nèi)更新完成所有的活動(dòng)主機(jī)。
5、產(chǎn)生一個(gè)線程,定時(shí)檢查本地服務(wù)名字-端口號(hào)映射表中的服務(wù)是否死亡。因?yàn)楸镜胤?wù)名字-端口號(hào)映射表中的每個(gè)元素都有一個(gè)提供服務(wù)的服務(wù)器進(jìn)程號(hào)屬性,就通過(guò)檢查這個(gè)進(jìn)程號(hào)對(duì)應(yīng)的進(jìn)程的狀態(tài)是否活動(dòng)來(lái)檢查服務(wù)是否死亡。此線程同時(shí)啟動(dòng)一定時(shí)器,通過(guò)系統(tǒng)調(diào)用接口提取本機(jī)負(fù)載信息,更新主機(jī)-負(fù)載表中本機(jī)負(fù)載的項(xiàng)。
6、采用I/O多路復(fù)用select()來(lái)同時(shí)監(jiān)聽(tīng)一個(gè)TCP通信端口(與客戶機(jī)通信)、一個(gè)UDP通信端口(服務(wù)器節(jié)點(diǎn)機(jī)之間相互通信)和一個(gè)UNIX域套接字端口(與應(yīng)用服務(wù)進(jìn)程通信)。
7、主線程進(jìn)入監(jiān)聽(tīng)循環(huán),等待接收各端口消息并分別產(chǎn)生各消息處理線程。消息處理描述TCP消息由調(diào)度客戶端程序發(fā)起,主要是客戶更新服務(wù)主機(jī)信息和名字服務(wù)映射。當(dāng)調(diào)度服務(wù)端程序監(jiān)聽(tīng)到一個(gè)TCP消息則生成一個(gè)線程處理,處理流程如下1.從TCP套接字讀出消息;2.判斷消息中的版本號(hào),如果版本號(hào)和系統(tǒng)信息當(dāng)前版本一致,則發(fā)送一個(gè)空數(shù)據(jù)報(bào)文,否則,發(fā)送新版本的服務(wù)主機(jī)信息和服務(wù)映射信息(從各表中獲取);3.關(guān)閉套接字,結(jié)束線程。UDP消息是服務(wù)節(jié)點(diǎn)機(jī)之間的通信,用于交互節(jié)點(diǎn)主機(jī)信息(負(fù)載,服務(wù))。
當(dāng)?shù)竭_(dá)一個(gè)消息則生成一個(gè)線程,處理流程如下1.套接字中讀出數(shù)據(jù)報(bào),并驗(yàn)證其合法性;2.據(jù)消息的類型,作不同的處理;2.1節(jié)點(diǎn)機(jī)更新請(qǐng)求類型消息①根據(jù)信源主機(jī)的地址,在更新索引表中查找該主機(jī)的更新信息。如果當(dāng)前時(shí)間與該主機(jī)更新信息的發(fā)送時(shí)標(biāo)send_time的間隔<定時(shí)器時(shí)間T,則說(shuō)明已經(jīng)發(fā)送了消息給信源主機(jī)(相當(dāng)于應(yīng)答),更新信源主機(jī)的接收時(shí)標(biāo)recv_time,并按照主機(jī)的recv_time遞減的方向進(jìn)行排序。轉(zhuǎn)②。如果時(shí)間間隔>T,則通過(guò)本節(jié)點(diǎn)機(jī)中維護(hù)的各表組織應(yīng)答的信息,發(fā)送給信源主機(jī),同時(shí)更新send_time和recv_time,并按照主機(jī)的recv_time遞減的方向進(jìn)行排序。轉(zhuǎn)②。如果沒(méi)有找到該主機(jī)信息,說(shuō)明接收到一個(gè)新啟動(dòng)的服務(wù)器節(jié)點(diǎn)發(fā)送的廣播消息,也應(yīng)該組織本地主機(jī)的消息,發(fā)送給信源主機(jī),進(jìn)行應(yīng)答。然后在本機(jī)的更新索引表中增加該信源主機(jī)的send_time和recv_time,并按照主機(jī)的recv_time遞減的方向進(jìn)行排序。
②根據(jù)消息,更新服務(wù)-主機(jī)映射表、服務(wù)名字-端口號(hào)映射表;③從消息中取得負(fù)載信息,更新主機(jī)-負(fù)載表;④關(guān)閉套接字,結(jié)束線程。
2.2節(jié)點(diǎn)機(jī)更新應(yīng)答類型消息①根據(jù)信源主機(jī)的地址,在更新索引表中查找該主機(jī)的更新信息。更新信源主機(jī)的recv_time,并按照主機(jī)的recv_time遞減的方向進(jìn)行排序。
②根據(jù),更新服務(wù)名字-端口號(hào)映射表、服務(wù)-主機(jī)映射表;③從消息的負(fù)載項(xiàng)取得負(fù)載信息,更新主機(jī)-負(fù)載表;④關(guān)閉套接字,結(jié)束線程。UNIX域消息與VOD應(yīng)用服務(wù)器進(jìn)行通信,主要是應(yīng)用服務(wù)器向本調(diào)度程序注冊(cè)/注銷相關(guān)服務(wù),以獲得在整個(gè)服務(wù)群內(nèi)的調(diào)度支持,并通過(guò)此消息發(fā)起調(diào)度請(qǐng)求。當(dāng)?shù)竭_(dá)一個(gè)消息則生成一個(gè)線程,處理流程如下1.從套接字中讀出消息,并驗(yàn)證其合法性;
2.根據(jù)消息的類型,作不同的處理;①請(qǐng)求注冊(cè)類型消息在服務(wù)名字-端口號(hào)映射表中增加服務(wù)項(xiàng),修改服務(wù)-服務(wù)器映射表。
②請(qǐng)求注銷類型消息在服務(wù)名字-端口號(hào)映射表中刪除服務(wù)項(xiàng),修改服務(wù)-服務(wù)器映射表。
③請(qǐng)求調(diào)度類型消息調(diào)用調(diào)度子模塊,并將返回服務(wù)器IP地址通過(guò)UNIX域套接字返回給應(yīng)用服務(wù)器。
3.關(guān)閉套接字,結(jié)束線程。步驟2啟動(dòng)VOD服務(wù)器模塊程序?yàn)榱耸褂帽景l(fā)明軟件的功能,VOD服務(wù)器程序作為寬帶服務(wù)的一種,在啟動(dòng)時(shí)需調(diào)用本軟件提供的接口函數(shù)(以頭文件形式提供),通過(guò)前述的UNIX域消息向本軟件調(diào)度服務(wù)端程序注冊(cè)其應(yīng)用服務(wù)——服務(wù)名及訪問(wèn)端口。步驟3客戶機(jī)(c1,c2,c3)運(yùn)行調(diào)度客戶端程序調(diào)度客戶端程序分為后臺(tái)執(zhí)行程序UPD.EXE和動(dòng)態(tài)鏈接庫(kù)SchedClientPro.DLL。,UPD.EXE要求在客戶應(yīng)用程序如VOD客戶程序運(yùn)行之前運(yùn)行,一般安排在客戶開(kāi)啟客戶程序前通過(guò)操作系統(tǒng)啟動(dòng)運(yùn)行或由VOD客戶程序編制人員調(diào)用動(dòng)態(tài)鏈接庫(kù)提供的接口函數(shù)啟動(dòng)。此程序安裝時(shí),會(huì)在本機(jī)系統(tǒng)目錄中生成一個(gè)可用服務(wù)器節(jié)點(diǎn)的IP地址的列表文件,其中的地址由安裝過(guò)程很容易保證是可用的。
程序UPD.EXE在本機(jī)系統(tǒng)目錄中的以文件形式維護(hù)有效服務(wù)器地址表、服務(wù)名字-端口映射列表、服務(wù)-服務(wù)器映射列表,其執(zhí)行流程如圖10。首先從有效服務(wù)器地址列表中隨機(jī)獲取一服務(wù)器地址,接著檢查服務(wù)器信息版本號(hào),此版本號(hào)保存在系統(tǒng)目錄中的另一文件中,用于保證信息與服務(wù)器群的最新信息同步。如果沒(méi)有找此文件(在初始安裝時(shí)),則生成它,并置初始版本號(hào)為0;向獲得的服務(wù)器的系統(tǒng)調(diào)度端口發(fā)起TCP連接,如果連接失敗,則嘗試另外的地址,直至所有地址都不可用才失敗返回;如前述,通過(guò)此連接,調(diào)度服務(wù)端程序組織服務(wù)器群的各項(xiàng)最新信息返回給本機(jī),并在本地修改各表,成功返回。此后,調(diào)度客戶端程序會(huì)定時(shí)重復(fù)以上操作,保證客戶應(yīng)用程序發(fā)起請(qǐng)求時(shí),總能獲得最新的有效的服務(wù)器地址。步驟4啟動(dòng)VOD客戶端程序按照windows操作系統(tǒng)的應(yīng)用軟件通常的方式啟動(dòng),本實(shí)施例無(wú)特殊要求。第二階段服務(wù)器調(diào)度客戶請(qǐng)求,對(duì)應(yīng)圖4的A過(guò)程。步驟5VOD客戶程序調(diào)用本軟件提供的動(dòng)態(tài)鏈接庫(kù)方式的接口函數(shù),從調(diào)度客戶程序隨機(jī)獲得一個(gè)或多個(gè)有效服務(wù)器地址。步驟6VOD客戶程序按照VOD服務(wù)自己的相關(guān)應(yīng)用協(xié)議向該服務(wù)器節(jié)點(diǎn)機(jī)上的VOD服務(wù)程序的應(yīng)用調(diào)度端口發(fā)起TCP連接請(qǐng)求,連接成功則發(fā)送應(yīng)用調(diào)度請(qǐng)求報(bào)文,在極少情況連接不成功時(shí),則認(rèn)為此服務(wù)器地址無(wú)效,選取另一服務(wù)器地址發(fā)起連接請(qǐng)求。VOD服務(wù)程序接受請(qǐng)求連接后,再通過(guò)UNIX套節(jié)字向前述的節(jié)點(diǎn)管理子模塊發(fā)送請(qǐng)求調(diào)度類型消息。步驟7如圖8,節(jié)點(diǎn)管理子模塊收到一個(gè)UNIX消息,將產(chǎn)生一個(gè)子線程,由它調(diào)用任務(wù)調(diào)度子模塊接口函數(shù),并要求返回一個(gè)調(diào)度結(jié)果——提供應(yīng)用服務(wù)的服務(wù)器節(jié)點(diǎn)IP地址。然后通過(guò)原UNIX套接字返回給VOD服務(wù)程序。如圖11,任務(wù)調(diào)度子模塊實(shí)現(xiàn)為多個(gè)可擴(kuò)展的調(diào)度算法,如輪轉(zhuǎn)服務(wù)法、加權(quán)輪轉(zhuǎn)服務(wù)法、最少連接先服務(wù)法、本地優(yōu)先法、有副本優(yōu)先服務(wù)法等調(diào)度算法,不同算法的具體實(shí)現(xiàn)非本發(fā)明所限定,不在此贅述。根據(jù)應(yīng)用類型不同調(diào)用函數(shù)可輸入不同參數(shù),使不同應(yīng)用服務(wù)器可選取最合適的調(diào)度算法,如HTTP服務(wù)器可采用最少連接先服務(wù)法,F(xiàn)TP服務(wù)器可采用最小帶寬使用量?jī)?yōu)先法。本實(shí)施例采取最少連接數(shù)加本機(jī)優(yōu)先服務(wù)算法。步驟8VOD服務(wù)程序通過(guò)TCP通信連接返回此調(diào)度結(jié)果給VOD客戶程序;VOD客戶程序立即開(kāi)始與此服務(wù)器的數(shù)據(jù)傳輸端口建立應(yīng)用數(shù)據(jù)傳輸連接,連接成功則可結(jié)束調(diào)度(實(shí)際情況往往如此)。極少情況下連接失敗,則認(rèn)為此地址的服務(wù)無(wú)效回到步驟5重復(fù)執(zhí)行。
從以上步驟可以看出客戶請(qǐng)求隨機(jī)發(fā)往服務(wù)器群中的任意有效服務(wù)器,能同時(shí)接收請(qǐng)求的服務(wù)器數(shù)將和活動(dòng)服務(wù)器的總數(shù)相同,請(qǐng)求信息的帶寬是現(xiàn)有系統(tǒng)的N倍(N為服務(wù)器節(jié)點(diǎn)數(shù)),而且接收到請(qǐng)求的服務(wù)器能根據(jù)調(diào)度算法重定位客戶請(qǐng)求,進(jìn)一步防止了對(duì)請(qǐng)求的處理被阻塞在一臺(tái)服務(wù)器的請(qǐng)求隊(duì)列中,實(shí)現(xiàn)了動(dòng)態(tài)負(fù)載平衡的功能。由此,我們可以得出結(jié)論本發(fā)明徹底解決了VOD客戶和VOD服務(wù)器系統(tǒng)之間調(diào)度瓶頸的問(wèn)題,實(shí)施本發(fā)明能在現(xiàn)有硬件系統(tǒng)規(guī)模基礎(chǔ)上支持更多的點(diǎn)播用戶,極大地提高系統(tǒng)的可擴(kuò)展性和對(duì)用戶的負(fù)載能力,從而提高服務(wù)器系統(tǒng)整體的性價(jià)比。本發(fā)明實(shí)施例技術(shù)效果比較目前現(xiàn)有的一個(gè)寬帶業(yè)務(wù)VOD系統(tǒng)滿足6000用戶的VOD點(diǎn)播,同時(shí)支持300個(gè)用戶的正常并發(fā)點(diǎn)播,流連接的時(shí)間不超過(guò)20秒。其媒體服務(wù)器采用Sun 6000E系統(tǒng),可存儲(chǔ)300G以上的視頻節(jié)目,但系統(tǒng)造價(jià)在200萬(wàn)人民幣以上。
而本發(fā)明實(shí)施例系統(tǒng)可以同時(shí)使用的用戶數(shù)100-10000戶,服務(wù)器響應(yīng)時(shí)間小于2秒鐘,采用本發(fā)明方案的達(dá)到與上面系統(tǒng)相同或更好性能指標(biāo)的系統(tǒng)只需不到50萬(wàn)人民幣。
權(quán)利要求
1.一種分布式并行調(diào)度網(wǎng)絡(luò)服務(wù)器系統(tǒng),包括服務(wù)器和客戶計(jì)算機(jī),其特征是它執(zhí)行下面步驟工作它采用異步的兩個(gè)過(guò)程服務(wù)器信息拾取及維護(hù)過(guò)程B和客戶請(qǐng)求調(diào)度過(guò)程A。從尚未發(fā)起客戶請(qǐng)求的時(shí)段起,運(yùn)行在各服務(wù)器中的調(diào)度服務(wù)端程序就交互各服務(wù)器節(jié)點(diǎn)信息B1,運(yùn)行在客戶計(jì)算機(jī)中的調(diào)度客戶端程序和服務(wù)器中的調(diào)度服務(wù)端程序定時(shí)通信,獲得最近時(shí)段服務(wù)器群中各活動(dòng)服務(wù)器節(jié)點(diǎn)及其提供的服務(wù)類型和服務(wù)能力等信息B2,并在本機(jī)中維護(hù)相關(guān)信息表;當(dāng)客戶訪問(wèn)服務(wù)器時(shí),客戶計(jì)算機(jī)中的應(yīng)用客戶請(qǐng)求通過(guò)調(diào)度客戶端程序提供的訪問(wèn)接口隨機(jī)獲取一個(gè)或一組有效(活動(dòng)且有相關(guān)服務(wù))服務(wù)器的地址A1,并取一個(gè)向其發(fā)起請(qǐng)求A2;然后,接收客戶請(qǐng)求的服務(wù)器根據(jù)當(dāng)前服務(wù)器系統(tǒng)狀況經(jīng)調(diào)度算法返回給客戶一個(gè)真實(shí)服務(wù)器地址,此時(shí)客戶計(jì)算機(jī)將直接與其建立應(yīng)用通信連接,開(kāi)始提供客戶要求的應(yīng)用服務(wù),調(diào)度結(jié)束;如果此服務(wù)器負(fù)載已過(guò)重,不能對(duì)此服務(wù)器請(qǐng)求提供服務(wù),客戶請(qǐng)求不用延遲等待,繼續(xù)向新的服務(wù)器發(fā)送請(qǐng)求,從而能被新的服務(wù)器接受并提供服務(wù)。
2.根據(jù)權(quán)利要求1所述的一種分布式并行調(diào)度網(wǎng)絡(luò)服務(wù)器系統(tǒng),其特征是所述的分布式并行調(diào)度網(wǎng)絡(luò)服務(wù)器是VOD視頻點(diǎn)播系統(tǒng),它采用的工作步驟是分為兩個(gè)階段第一階段客戶機(jī)獲得服務(wù)器群最新信息步驟1啟動(dòng)調(diào)度服務(wù)端程序服務(wù)器系統(tǒng)中每臺(tái)主機(jī)都運(yùn)行調(diào)度服務(wù)端程序,調(diào)度服務(wù)端程序?yàn)槎嗑€程形式的守護(hù)進(jìn)程,此程序包括節(jié)點(diǎn)管理、任務(wù)調(diào)度和負(fù)荷拾取及維護(hù)等子模塊,啟動(dòng)調(diào)度服務(wù)端程序?qū)⑹紫纫l(fā)節(jié)點(diǎn)管理子模塊運(yùn)行,其流程是1、進(jìn)行網(wǎng)絡(luò)初始化工作創(chuàng)建TCP套接字、UDP套接字和UNIX套接字,并綁定到指定的端口;2、將程序初始化為一個(gè)守護(hù)程序;3、在服務(wù)器內(nèi)廣播本節(jié)點(diǎn)信息,向其他活動(dòng)主機(jī)節(jié)點(diǎn)聲明本機(jī)加入系統(tǒng);4、產(chǎn)生一個(gè)線程,定時(shí)查看并處理主機(jī)更新主機(jī)信息;5、產(chǎn)生一個(gè)線程,定時(shí)檢查本地服務(wù)名字-端口號(hào)映射表中的服務(wù)是否死亡;子線程啟動(dòng)定時(shí)器,通過(guò)接口提取負(fù)載信息;6、采用I/0多路復(fù)用select()來(lái)同時(shí)監(jiān)聽(tīng)一個(gè)TCP通信端口(與客戶通信)、一個(gè)UDP通信端口(節(jié)點(diǎn)機(jī)之間相互通信)和一個(gè)UNIX域套接字端口(與應(yīng)用服務(wù)器通信);7、主線程進(jìn)入循環(huán),接收各端口消息并處理消息;步驟2啟動(dòng)VOD服務(wù)器模塊程序步驟3客戶機(jī)運(yùn)行調(diào)度客戶端程序程序執(zhí)行流程是首先從地址列表文件中隨機(jī)獲取一服務(wù)器地址,接著檢查服務(wù)器信息版本號(hào),此版本號(hào)保存在系統(tǒng)目錄中的另一文件serverVer中,用于保證信息的最新性。如果沒(méi)有找到此文件(在初始安裝時(shí)),則生成它,并置版本號(hào)為0;向發(fā)起TCP連接,如果連接失敗,則嘗試另外的地址,直至所有地址都不可用才失敗返回;通過(guò)連接,獲取服務(wù)器群的各項(xiàng)信息,并在本地生成最新的服務(wù)器IP地址列表、服務(wù)一服務(wù)器映射表和服務(wù)名字一服務(wù)端口映射表,成功返回;此后,調(diào)度客戶端程序會(huì)定時(shí)重復(fù)以上操作,保證客戶應(yīng)用程序發(fā)起請(qǐng)求時(shí),總能獲得有效的服務(wù)器地址;步驟4啟動(dòng)VOD客戶端程序第二階段服務(wù)器調(diào)度客戶請(qǐng)求步驟5VOD客戶程序調(diào)用本軟件提供的動(dòng)態(tài)鏈接庫(kù)方式的接口,從調(diào)度客戶程序隨機(jī)獲得一有效服務(wù)器地址;步驟6VOD客戶程序按照VOD服務(wù)自己的相關(guān)協(xié)議向該服務(wù)器上的VOD服務(wù)程序的應(yīng)用調(diào)度端口發(fā)起TCP連接請(qǐng)求,連接成功則發(fā)送應(yīng)用調(diào)度請(qǐng)求信息,在極少情況連接不成功時(shí),則認(rèn)為此服務(wù)器地址無(wú)效,回到步驟5,選取另一服務(wù)器地址發(fā)起連接請(qǐng)求;VOD服務(wù)程序接受請(qǐng)求連接后,再向前述的節(jié)點(diǎn)管理子模塊UNIX套節(jié)字發(fā)送請(qǐng)求調(diào)度類消息;步驟7節(jié)點(diǎn)管理子模塊收到一個(gè)UNIX消息,將產(chǎn)生一個(gè)子線程,由它調(diào)用任務(wù)調(diào)度子模塊接口函數(shù),并要求返回一個(gè)調(diào)度結(jié)果——服務(wù)器地址;然后通過(guò)原UNIX套接字返回給VOD服務(wù)程序;任務(wù)調(diào)度子模塊實(shí)現(xiàn)為多個(gè)可擴(kuò)展的調(diào)度算法,如輪轉(zhuǎn)服務(wù)法、加權(quán)輪轉(zhuǎn)服務(wù)法、最少連接先服務(wù)法、本地優(yōu)先法、有副本優(yōu)先服務(wù)法等調(diào)度算法;步驟8VOD服務(wù)程序通過(guò)TCP通信連接返回此調(diào)度結(jié)果給VOD客戶程序;VOD客戶程序立即開(kāi)始與此服務(wù)器建立應(yīng)用數(shù)據(jù)傳輸連接,連接成功則可結(jié)束調(diào)度。
全文摘要
本發(fā)明公開(kāi)了一種分布式并行調(diào)度網(wǎng)絡(luò)服務(wù)器系統(tǒng),客戶端與服務(wù)器端協(xié)作,調(diào)度信息拾取和調(diào)度請(qǐng)求處理異步進(jìn)行;服務(wù)器群中每個(gè)節(jié)點(diǎn)都能接受和處理調(diào)度請(qǐng)求,調(diào)度過(guò)程體現(xiàn)為分布式并行。通過(guò)實(shí)現(xiàn)此分布式并行的輸入輸出調(diào)度接口,徹底消除了現(xiàn)有技術(shù)中存在的調(diào)度瓶頸問(wèn)題。實(shí)施本發(fā)明能在現(xiàn)有硬件系統(tǒng)規(guī)?;A(chǔ)上支持更多的點(diǎn)播用戶,極大地提高系統(tǒng)的可擴(kuò)展性和對(duì)用戶的負(fù)載能力,從而提高服務(wù)器系統(tǒng)整體的性價(jià)比。
文檔編號(hào)H04L29/00GK1455347SQ0211368
公開(kāi)日2003年11月12日 申請(qǐng)日期2002年4月30日 優(yōu)先權(quán)日2002年4月30日
發(fā)明者劉心松, 劉丹, 唐續(xù), 劉流, 羅朝勁 申請(qǐng)人:電子科技大學(xué)