本發(fā)明涉及云計(jì)算技術(shù)領(lǐng)域,具體的說(shuō)是一種支持有狀態(tài)構(gòu)件集群化的云操作系統(tǒng)總線及通信方法。
背景技術(shù):隨著云計(jì)算的興起,傳統(tǒng)的數(shù)據(jù)中心正在迅速向云數(shù)據(jù)中心轉(zhuǎn)型。在數(shù)據(jù)中心從初級(jí)形態(tài)向高級(jí)形態(tài)演進(jìn)的物理資源基礎(chǔ)整合、物理與應(yīng)用虛擬化整合、自動(dòng)化集中管理、數(shù)據(jù)中心協(xié)同服務(wù)四個(gè)階段中,云操作系統(tǒng)發(fā)揮著重要作用。云操作系統(tǒng)承擔(dān)著對(duì)上接口應(yīng)用、對(duì)下調(diào)度管理硬件的中間功能,將大量的異構(gòu)設(shè)備融合為標(biāo)準(zhǔn)統(tǒng)一的邏輯資源池,動(dòng)態(tài)調(diào)度給云應(yīng)用,完成對(duì)終端的服務(wù)。云操作系統(tǒng)對(duì)應(yīng)用和硬件的兼容性決定了整個(gè)云數(shù)據(jù)中心的開(kāi)放融合程度。云操作系統(tǒng)必須考慮對(duì)不同廠商軟、硬件的兼容性,同時(shí)要考慮到云計(jì)算應(yīng)用功能和非功能需求不斷變化的實(shí)際,便于第三方基于云操作系統(tǒng)平臺(tái)進(jìn)行應(yīng)用的系統(tǒng)優(yōu)化和二次開(kāi)發(fā)。因此,云操作系統(tǒng)一方面需要采用廣泛兼容的開(kāi)放架構(gòu),既考慮對(duì)第三方軟、硬產(chǎn)品的兼容性,也將第三方二次開(kāi)發(fā)納入其中,提供了完善、標(biāo)準(zhǔn)的接口API,另一方面,更要采用構(gòu)件化、可擴(kuò)展的系統(tǒng)設(shè)計(jì),使資源虛擬化、資源調(diào)度、運(yùn)維管理、計(jì)量計(jì)費(fèi)、自助服務(wù)等功能構(gòu)件可自由組合,按需部署,同時(shí)采用可擴(kuò)展性系統(tǒng)設(shè)計(jì),便于增值構(gòu)件的開(kāi)發(fā)和動(dòng)態(tài)伸縮,滿足用戶個(gè)性化需求。已有云操作系統(tǒng)采用消息隊(duì)列或消息中間件方式建立松耦合、構(gòu)件化的體系結(jié)構(gòu)。然而,基于消息隊(duì)列的架構(gòu)缺乏系統(tǒng)級(jí)的構(gòu)件高可用性支持,需要構(gòu)件自行考慮高可用方案,既加重了構(gòu)件的開(kāi)發(fā)負(fù)擔(dān),也加重了構(gòu)件處理節(jié)點(diǎn)的系統(tǒng)開(kāi)銷(xiāo)。遵循高內(nèi)聚低耦合的軟件設(shè)計(jì)原則,從中間件層面針對(duì)構(gòu)件建立支持處理節(jié)點(diǎn)集群的消息隊(duì)列,可以保障構(gòu)件的高可用性和高效性,但現(xiàn)有的消息中間件基于構(gòu)件的無(wú)狀態(tài)行假設(shè)設(shè)計(jì),缺乏針對(duì)讀寫(xiě)分離機(jī)制和負(fù)載均衡策略,并且缺乏對(duì)構(gòu)件及其處理節(jié)點(diǎn)的管理和監(jiān)控機(jī)制,從而無(wú)法實(shí)現(xiàn)對(duì)有狀態(tài)構(gòu)件處理集群的高可用和高性能支持。
技術(shù)實(shí)現(xiàn)要素:本發(fā)明的技術(shù)任務(wù)是解決現(xiàn)有技術(shù)的不足,提供一種云操作系統(tǒng)總線及通信方法。本發(fā)明的技術(shù)方案是按以下方式實(shí)現(xiàn)的,該一種云操作系統(tǒng)總線,其結(jié)構(gòu)包括隊(duì)列管理模塊、均與隊(duì)列管理模塊相連接的構(gòu)件管理模塊和集群監(jiān)控模塊,其中構(gòu)件管理模塊負(fù)責(zé)云操作系統(tǒng)各組成構(gòu)件的注冊(cè)、刪除、修改和查詢;隊(duì)列管理模塊負(fù)責(zé)根據(jù)構(gòu)件信息建立、刪除和調(diào)整構(gòu)件服務(wù)的消息隊(duì)列;集群監(jiān)控模塊負(fù)責(zé)檢測(cè)構(gòu)件各處理節(jié)點(diǎn)的加入和退出、失效和蘇醒,并將所述檢測(cè)信息發(fā)送給隊(duì)列管理模塊。所述構(gòu)件管理模塊中進(jìn)一步對(duì)各構(gòu)件的服務(wù)操作進(jìn)行區(qū)分,設(shè)定其為冪等或非冪等,其中所述冪等操作屬于無(wú)狀態(tài)操作,在同一狀態(tài)下每次執(zhí)行的結(jié)果相同;所述非冪等操作屬于有狀態(tài)操作,同一狀態(tài)下每次執(zhí)行的結(jié)果不同。所述隊(duì)列管理模塊為每個(gè)構(gòu)件建立一個(gè)讀寫(xiě)分離隊(duì)列組,其具體建立結(jié)構(gòu)為:建立一個(gè)寫(xiě)操作主題,構(gòu)件的每個(gè)處理節(jié)點(diǎn)向?qū)懖僮髦黝}訂閱寫(xiě)操作;根據(jù)構(gòu)件處理節(jié)點(diǎn)數(shù)建立若干個(gè)讀操作子隊(duì)列,構(gòu)件的每個(gè)處理節(jié)點(diǎn)向其中的一個(gè)隊(duì)列訂閱讀操作。所述節(jié)點(diǎn)的加入是指為構(gòu)件添加一個(gè)處理節(jié)點(diǎn);節(jié)點(diǎn)的退出是指為構(gòu)件撤銷(xiāo)一個(gè)處理節(jié)點(diǎn);節(jié)點(diǎn)的失效是指構(gòu)件的一個(gè)處理節(jié)點(diǎn)不可用;節(jié)點(diǎn)的蘇醒是指構(gòu)件一個(gè)不可用處理節(jié)點(diǎn)恢復(fù)可用。所述隊(duì)列管理模塊根據(jù)節(jié)點(diǎn)監(jiān)控模塊發(fā)送的信息調(diào)整隊(duì)列結(jié)構(gòu),其具體調(diào)整方法為:當(dāng)節(jié)點(diǎn)加入事件發(fā)生時(shí),在隊(duì)列組中為建立一個(gè)讀操作隊(duì)列,該節(jié)點(diǎn)向該隊(duì)列訂閱讀操作,并向?qū)懼黝}訂閱寫(xiě)主題;當(dāng)節(jié)點(diǎn)退出事件發(fā)生時(shí),刪除該節(jié)點(diǎn)對(duì)應(yīng)的讀隊(duì)列,關(guān)閉該節(jié)點(diǎn)對(duì)寫(xiě)主題的訂閱;當(dāng)節(jié)點(diǎn)失效事件發(fā)生時(shí),停止向該節(jié)點(diǎn)對(duì)應(yīng)的讀隊(duì)列發(fā)送讀操作請(qǐng)求,在寫(xiě)主題中保留寫(xiě)操作;當(dāng)節(jié)點(diǎn)蘇醒事件發(fā)生時(shí),在寫(xiě)主題中保留寫(xiě)操作同步寫(xiě)操作,恢復(fù)向該節(jié)點(diǎn)對(duì)應(yīng)的讀隊(duì)列發(fā)送讀操作請(qǐng)求。一種基于云操作系統(tǒng)總線的通信方法,其具體實(shí)施步驟為:所述隊(duì)列管理模塊根據(jù)服務(wù)操作請(qǐng)求的類型進(jìn)行路由,其中非冪等操作發(fā)送到唯一的寫(xiě)隊(duì)列;冪等操作根據(jù)負(fù)載均衡策略發(fā)送到根據(jù)處理節(jié)點(diǎn)數(shù)建立的讀隊(duì)列。所述讀操作負(fù)載均衡策略的具體過(guò)程為:1)根據(jù)構(gòu)件的配置信息計(jì)算節(jié)點(diǎn)的處理能力;2)根據(jù)讀寫(xiě)隊(duì)列組規(guī)模計(jì)算各節(jié)點(diǎn)的負(fù)載;3)根據(jù)各節(jié)點(diǎn)的負(fù)載和處理能力計(jì)算各節(jié)點(diǎn)的負(fù)載程度;4)選擇負(fù)載程度最小的節(jié)點(diǎn)進(jìn)行路由。本發(fā)明與現(xiàn)有技術(shù)相比所產(chǎn)生的有益效果是:本發(fā)明的一種云操作系統(tǒng)總線及通信方法對(duì)組成構(gòu)件及其處理節(jié)點(diǎn)進(jìn)行管理和監(jiān)控,并對(duì)構(gòu)件各處理節(jié)點(diǎn)對(duì)應(yīng)的隊(duì)列組進(jìn)行讀寫(xiě)分離和負(fù)載均衡,解決現(xiàn)有松耦合云操作系統(tǒng)中有狀態(tài)構(gòu)件的高可用性和高效性等集群化問(wèn)題,完善了松耦合、構(gòu)件化的云操作系統(tǒng)體系結(jié)構(gòu),通過(guò)支持有狀態(tài)構(gòu)件的高可用性和和負(fù)載均衡保障了云操作系統(tǒng)的整體可用性。附圖說(shuō)明附圖1是本發(fā)明的云操作系統(tǒng)總線構(gòu)架圖。附圖2是本發(fā)明的隊(duì)列組讀寫(xiě)分離示意圖。附圖3是本發(fā)明的讀操作路由算法流程圖。附圖4是本發(fā)明的數(shù)據(jù)寫(xiě)入時(shí)序圖。附圖5是本發(fā)明的節(jié)點(diǎn)狀態(tài)轉(zhuǎn)換圖。附圖6是本發(fā)明的隊(duì)列結(jié)構(gòu)調(diào)整流程圖。具體實(shí)施方式下面結(jié)合附圖對(duì)本發(fā)明的一種云操作系統(tǒng)總線及通信方法作以下詳細(xì)說(shuō)明。一種云操作系統(tǒng)總線的結(jié)構(gòu)如圖1、圖2所示,該云操作系統(tǒng)總線構(gòu)架支持有狀態(tài)構(gòu)件集群化,其結(jié)構(gòu)包括如下模塊:構(gòu)件管理模塊,負(fù)責(zé)管理各組成構(gòu)件的元數(shù)據(jù)信息,支持注冊(cè)、刪除、修改和查詢等構(gòu)件管理操作。其中,構(gòu)件是一個(gè)三元組{名稱、服務(wù)集合、訪問(wèn)地址、描述};服務(wù)是一個(gè)四元組{名稱,消息協(xié)議,參數(shù)列表,key名稱,功能描述,非功能描述}。構(gòu)件管理模塊中進(jìn)一步對(duì)各構(gòu)件的服務(wù)操作進(jìn)行區(qū)分,設(shè)定其為冪等或非冪等,其中,冪等操作屬于無(wú)狀態(tài)操作,在同一狀態(tài)下每次執(zhí)行的結(jié)果相同;非冪等操作屬于有狀態(tài)操作,同一狀態(tài)下每次執(zhí)行的結(jié)果不同。隊(duì)列管理模塊,負(fù)責(zé)根據(jù)構(gòu)件信息建立、刪除和調(diào)整構(gòu)件的消息隊(duì)列組。消息路由器,負(fù)責(zé)根據(jù)路由信息向所述隊(duì)列組分發(fā)消息。集群監(jiān)控模塊,負(fù)責(zé)檢測(cè)構(gòu)件各處理節(jié)點(diǎn)的加入和退出,獲取處理節(jié)點(diǎn)的配置信息,并對(duì)各節(jié)點(diǎn)的數(shù)據(jù)狀態(tài)進(jìn)行控制。構(gòu)件處理集群,負(fù)責(zé)實(shí)現(xiàn)構(gòu)件的具體服務(wù)功能,由若干個(gè)處理節(jié)點(diǎn)組成。構(gòu)件客戶端,負(fù)責(zé)發(fā)起對(duì)構(gòu)件服務(wù)的使用請(qǐng)求。完成圖1所示的構(gòu)架后,如圖2所示,所述隊(duì)列管理模塊為每個(gè)構(gòu)件建立一個(gè)讀寫(xiě)分離隊(duì)列組。其中構(gòu)件注冊(cè)時(shí),系統(tǒng)總線為構(gòu)建分配用戶名user、密碼psw以及唯一的構(gòu)件id,處理節(jié)點(diǎn)的接入過(guò)程為:1)處理節(jié)點(diǎn)在合適的時(shí)候向地址為url的消息總線發(fā)起接入請(qǐng)求,代碼為:connection=ConnectionFactory.createConnection(user,psw,url);session=connection.createSession(false,Session.AUTO_ACKNOWLEDGE);2)消息總線驗(yàn)證接入節(jié)點(diǎn)的用戶名、密碼和id,如驗(yàn)證通過(guò),建立連接。3)建立一個(gè)寫(xiě)操作主題,構(gòu)件的每個(gè)處理節(jié)點(diǎn)向?qū)懖僮髦黝}訂閱寫(xiě)操作。write_topic=session.createTopic(id+"WRITE_TOPIC");write_topic_consumer=session.createConsumer(write_topic);4)處理節(jié)點(diǎn)在writeTopicListener的onMessage方法中實(shí)現(xiàn)具體的寫(xiě)操處理功能,并向消息總線注冊(cè)。write_topic_consumer.setMessageListener(writeTopicListener);write_topic_consumer.listen();5)根據(jù)構(gòu)件處理節(jié)點(diǎn)數(shù)建立若干個(gè)讀操作子隊(duì)列,構(gòu)件的每個(gè)處理節(jié)點(diǎn)向其中的一個(gè)隊(duì)列訂閱讀操作,若尚不存在對(duì)應(yīng)構(gòu)件id的隊(duì)列組,則消息總線新建該隊(duì)列組;若已存在,則消息總線在隊(duì)列組中增加一個(gè)隊(duì)列。read_queue=session.createMultiQueue(id+"READ_QUEUE");read_queue_consumer=session.createConsumer(read_queue);6)處理節(jié)點(diǎn)在readQueueListener的onMessage方法中實(shí)現(xiàn)具體的讀操處理功能,并向消息總線注冊(cè)。read_queue_consumer.setMessageListener(readQueueListener);read_queue_consumer.listen();在上述讀寫(xiě)分離隊(duì)列組基礎(chǔ)上,本發(fā)明實(shí)例提供了一種保障有狀態(tài)構(gòu)件集群高可用、高性能的系統(tǒng)總線通信方法,包括:所述隊(duì)列管理模塊根據(jù)服務(wù)操作請(qǐng)求的類型進(jìn)行路由,其中,所述非冪等操作發(fā)送到唯一的寫(xiě)隊(duì)列;所述冪等操作根據(jù)負(fù)載均衡策略發(fā)送到根據(jù)處理節(jié)點(diǎn)數(shù)建立的讀隊(duì)列。其中,讀操作負(fù)載均衡流程如圖3所示,過(guò)程為根據(jù)構(gòu)件的配置信息計(jì)算節(jié)點(diǎn)的處理能力;1)若節(jié)點(diǎn)i的CPU頻率、內(nèi)存容量和I/O帶寬的配置信息分別為Ci,Mi和Bi,集群的各種資源配置為節(jié)點(diǎn)各種資源之和即C=∑Ci,M=∑Mi,B=∑Bi則節(jié)點(diǎn)i的CPU頻率權(quán)值為WiCPU=Ci/C,內(nèi)存容量權(quán)值WiRAM=Mi/M,I/O帶寬權(quán)值WiIO=Bi/B。若構(gòu)件服務(wù)處理所需資源各種資源比例分別為pCPU,pRAM,pIO,則節(jié)點(diǎn)i的處理能力Wi=pCPUWiCPU+pRAMWiRAM+pIOWiIO2)根據(jù)讀寫(xiě)操作權(quán)值計(jì)算各節(jié)點(diǎn)的負(fù)載。若讀隊(duì)列Lr同寫(xiě)隊(duì)列Lw的讀寫(xiě)操作開(kāi)銷(xiāo)比a;則節(jié)點(diǎn)i的負(fù)載Li=LRi+aLW;各節(jié)點(diǎn)的負(fù)載狀態(tài)Si=Li/Wi。3)選擇負(fù)載最輕的節(jié)點(diǎn)進(jìn)行路由。寫(xiě)操作采用流水化方式進(jìn)行,以提高數(shù)據(jù)寫(xiě)入效率,如圖4所示,其過(guò)程為:第一個(gè)節(jié)點(diǎn)首先寫(xiě)入數(shù)據(jù),寫(xiě)入一個(gè)數(shù)據(jù)分片(64KB)后,在繼續(xù)接收數(shù)據(jù)的同時(shí)向第二節(jié)點(diǎn)轉(zhuǎn)發(fā)已寫(xiě)入的64K數(shù)據(jù),第二節(jié)點(diǎn)至第N節(jié)點(diǎn)以相同方式接收和轉(zhuǎn)發(fā)數(shù)據(jù),直到第N節(jié)點(diǎn)寫(xiě)入最后一個(gè)數(shù)據(jù)分片(不超過(guò)64KB)。在上述云操作系統(tǒng)總線架構(gòu)基礎(chǔ)上,所述節(jié)點(diǎn)監(jiān)控模塊進(jìn)一步將構(gòu)件處理節(jié)點(diǎn)的加入、退出、失效和恢復(fù)事件發(fā)送給所述隊(duì)列管理模塊,節(jié)點(diǎn)狀態(tài)轉(zhuǎn)換關(guān)系如圖5所示,其中,所述節(jié)點(diǎn)加入事件是指為構(gòu)件添加一個(gè)處理節(jié)點(diǎn)。所述節(jié)點(diǎn)退出事件是指為構(gòu)件撤銷(xiāo)一個(gè)處理節(jié)點(diǎn)。所述節(jié)點(diǎn)失效事件是指構(gòu)件的一個(gè)處理節(jié)點(diǎn)不可用。所述節(jié)點(diǎn)蘇醒事件是指構(gòu)件一個(gè)不可用處理節(jié)點(diǎn)恢復(fù)可用。所述隊(duì)列管理模塊進(jìn)一步根據(jù)所述節(jié)點(diǎn)監(jiān)控模塊發(fā)送節(jié)點(diǎn)加入、退出、失效、恢復(fù)事件調(diào)整隊(duì)列結(jié)構(gòu),調(diào)整流程如圖6所示,其中,當(dāng)節(jié)點(diǎn)加入事件發(fā)生時(shí),在隊(duì)列組中為該節(jié)點(diǎn)建立一個(gè)讀操作隊(duì)列,該節(jié)點(diǎn)向該隊(duì)列訂閱讀操作,并向?qū)懼黝}訂閱寫(xiě)主題。當(dāng)節(jié)點(diǎn)退出事件發(fā)生時(shí),刪除該節(jié)點(diǎn)對(duì)應(yīng)的讀隊(duì)列,關(guān)閉其對(duì)寫(xiě)主題的訂閱。當(dāng)節(jié)點(diǎn)失效事件發(fā)生時(shí),停止向該節(jié)點(diǎn)對(duì)應(yīng)的讀隊(duì)列發(fā)送讀操作請(qǐng)求,在寫(xiě)主題中為該節(jié)點(diǎn)保留寫(xiě)操作。當(dāng)節(jié)點(diǎn)蘇醒事件發(fā)生時(shí),在寫(xiě)主題中保留寫(xiě)操作同步寫(xiě)操作,恢復(fù)向該節(jié)點(diǎn)對(duì)應(yīng)的讀隊(duì)列發(fā)送讀操作請(qǐng)求。