專利名稱:一種可擴(kuò)展的通用型p2p網(wǎng)絡(luò)模擬器的設(shè)計(jì)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及P2P網(wǎng)絡(luò)模擬技術(shù),為一種可擴(kuò)展的通用型P2P網(wǎng)絡(luò)模擬器的設(shè)計(jì)方法, 主要適用于P2P網(wǎng)絡(luò)的模擬,也可支持其他的分布式系統(tǒng)模擬的設(shè)計(jì)。
背景技術(shù):
P2P網(wǎng)絡(luò)在近幾年快速發(fā)展、廣泛應(yīng)用,其數(shù)據(jù)流量已占據(jù)了互聯(lián)網(wǎng)流量的主體。 由于P2P網(wǎng)絡(luò)規(guī)模巨大、動(dòng)態(tài)性高,利用傳統(tǒng)的仿真實(shí)驗(yàn)方法進(jìn)行性能分析與評價(jià)存在 構(gòu)造復(fù)雜、控制困難、開銷過大、通用性弱的問題,鑒于這一原因,對等網(wǎng)絡(luò)模擬技術(shù) 的研究與開發(fā)正受到越來越多的關(guān)注。
目前,雖然已有多種面向不同應(yīng)用環(huán)境與不同協(xié)議的網(wǎng)絡(luò)模擬器可供選擇,但都存 在通用性弱、擴(kuò)展性低、可用性差的問題,無法實(shí)現(xiàn)多種協(xié)議與環(huán)境的統(tǒng)一模擬與比較。 大多數(shù)研究工作利用片面的方法對其成果進(jìn)行評價(jià),造成模擬器無法對于更多的應(yīng)用提 供模擬環(huán)境,導(dǎo)致了通用性弱的問題。 一部分模擬器作為研究的輔助工具進(jìn)行開發(fā),出 于時(shí)間與成本的考慮,選擇了簡單的實(shí)現(xiàn)方式,使得模擬器進(jìn)行新協(xié)議的模擬時(shí),開發(fā) 的代價(jià)過高,可擴(kuò)展性低。同時(shí),部分模擬器僅關(guān)注于模擬的過程,而忽略了數(shù)據(jù)收集 的工作,造成使用者無法獲得正確的模擬信息進(jìn)行分析,導(dǎo)致了可用性差的問題。
目前,未見通用型的P2P網(wǎng)絡(luò)模擬器的設(shè)計(jì)方法。
發(fā)明內(nèi)容
本發(fā)明要解決的問題是目前沒有通用型的P2P網(wǎng)絡(luò)模擬器設(shè)計(jì)方法,存在通用性 弱、擴(kuò)展性低、可用性差的問題,無法實(shí)現(xiàn)多種協(xié)議與環(huán)境的統(tǒng)一模擬與比較。
本發(fā)明的技術(shù)方案是 一種可擴(kuò)展的通用型P2P網(wǎng)絡(luò)模擬器的設(shè)計(jì)方法,包括以 下步驟-
(1) 應(yīng)用面向?qū)ο?、多層系統(tǒng)結(jié)構(gòu)、離散時(shí)間模擬、事件模擬與數(shù)據(jù)流模擬技術(shù)構(gòu) 建P2P網(wǎng)絡(luò)多層次結(jié)構(gòu);
(2) 搭建多層事件隊(duì)列模型,為多層結(jié)構(gòu)中的每一層提供獨(dú)立的事件容器,并以最 小堆的方式實(shí)現(xiàn);
(3) 搭建多狀態(tài)自描述模型,將系統(tǒng)抽象為對象以提供統(tǒng)一的聲明與響應(yīng)接口;(4)面向事件設(shè)計(jì),將所有系統(tǒng)行為與狀態(tài)抽象為對象進(jìn)行統(tǒng)一的處理; 首先由步驟(l)綜合使用面向?qū)ο?、多層系統(tǒng)結(jié)構(gòu)、離散時(shí)間模擬、事件模擬與數(shù) 據(jù)流模擬技術(shù),為P2P網(wǎng)絡(luò)的模擬定義技術(shù)框架,構(gòu)成P2P網(wǎng)絡(luò)的多層次結(jié)構(gòu)模型;然 后由步驟(2)為多層次結(jié)構(gòu)中的每一層提供獨(dú)立的事件容器,該容器以最小堆的方式實(shí) 現(xiàn),通過重復(fù)輪詢的方法,保證事件因果性在離散時(shí)間模擬中的正確處理;再由步驟(3) 對于系統(tǒng)狀態(tài)提供對象層次的抽象,通過將狀態(tài)抽象為對象的過程,使得單一系統(tǒng)可以 利用事件容器容納多狀態(tài)對象的方式來模擬真實(shí)系統(tǒng)中多狀態(tài)并存,對于阻塞式狀態(tài), 需要提供獨(dú)立的狀態(tài)對象容器進(jìn)行處理;最后步驟(4)綜合利用步驟(2)與步驟(3)的方法,
將系統(tǒng)的所有行為與狀態(tài)抽象為對象,利用面向?qū)ο笾械睦^承方法,為所有對象提供統(tǒng) 一的處理接口,保證事件處理的一致性,所有的事件特征被封裝在指定的事件接口內(nèi), 并為后續(xù)事件的添加提供便利的接口。
本發(fā)明在模擬器的實(shí)現(xiàn)中,對路由層、網(wǎng)絡(luò)層、拓?fù)鋵臃謩e設(shè)計(jì)獨(dú)立的事件隊(duì)列用 以容納相應(yīng)層內(nèi)的事件,并分別抽象出路由事件、網(wǎng)絡(luò)事件與拓?fù)涫录墓步涌谝耘?合事件容器進(jìn)行合作。
本發(fā)明通過統(tǒng)一系統(tǒng)行為抽象的方法,為P2P協(xié)議在模擬器中的實(shí)現(xiàn)提供統(tǒng)一的抽 象過程,簡化真實(shí)協(xié)議的模擬實(shí)現(xiàn)開銷,與現(xiàn)有技術(shù)相比,其顯著優(yōu)點(diǎn)有可以完全模
擬真實(shí)P2P網(wǎng)絡(luò)系統(tǒng)的行為特征,并為模擬器提供了優(yōu)秀的可擴(kuò)展性、可用性與通用性。
圖1是多層事件隊(duì)列模型的示意圖。
圖2是P2P網(wǎng)絡(luò)節(jié)點(diǎn)運(yùn)行時(shí)的狀態(tài)轉(zhuǎn)換示意圖。
具體實(shí)施例方式
本發(fā)明綜合使用面向?qū)ο?、多層系統(tǒng)結(jié)構(gòu)、離散時(shí)間模擬、事件模擬與數(shù)據(jù)流模擬
技術(shù),為P2P網(wǎng)絡(luò)的模擬定義技術(shù)框架,構(gòu)成P2P網(wǎng)絡(luò)的多層次結(jié)構(gòu)模型;然后為多層
結(jié)構(gòu)中的每一層提供獨(dú)立的事件容器;再用多狀態(tài)自描述模型對系統(tǒng)狀態(tài)提供對象層次
的抽象,使得單一系統(tǒng)可以利用事件容器容納多狀態(tài)對象的方式來模擬真實(shí)系統(tǒng)中多狀
態(tài)并存,對于阻塞式狀態(tài),需要提供獨(dú)立的狀態(tài)對象容器進(jìn)行處理;本發(fā)明還將系統(tǒng)的 所有行為與狀態(tài)抽象為對象,利用面向?qū)ο笾械睦^承方法,為所有對象提供統(tǒng)一的處理 接口,保證事件處理的一致性,所有的事件特征被封裝在指定的事件接口內(nèi),并為后續(xù)事件的添加提供便利的接口。
本發(fā)明P2P網(wǎng)絡(luò)模擬器設(shè)計(jì)方法的的核心為多層事件隊(duì)列模型和多狀態(tài)自描述模
型,下面做具體說明。 (1)多層事件隊(duì)列模型
在多層次結(jié)構(gòu)模型下,對于事件機(jī)制進(jìn)行擴(kuò)展,為各層提供獨(dú)立的事件隊(duì)列進(jìn)行封 裝,因此可以提供獨(dú)立的接口對特定層次事件進(jìn)行處理,如對特定模擬層次的事件進(jìn)行 跟蹤或改變其行為,同時(shí)不會(huì)影響其他層中事件的處理過程。由于該方法僅將原有混亂 的事件分解至各自所屬的事件隊(duì)列中,沒有增加事件的類型與數(shù)量,因此不會(huì)降低模擬 運(yùn)行的效率。在模擬器的實(shí)現(xiàn)中,對路由層、網(wǎng)絡(luò)層、拓?fù)鋵臃謩e設(shè)計(jì)了獨(dú)立的事件隊(duì) 列用以容納相應(yīng)層內(nèi)的事件,并分別抽象出路由事件、網(wǎng)絡(luò)事件與拓?fù)涫录墓步涌?以配合事件容器進(jìn)行合作。模擬器運(yùn)行時(shí),在單一時(shí)間步的處理過程中,將同時(shí)在三個(gè) 隊(duì)列中取出該時(shí)間點(diǎn)的事件進(jìn)行處理,在多線程支持下,由于不同事件對應(yīng)于模擬系統(tǒng) 中的不同層次,調(diào)用的系統(tǒng)模塊不同,因此無需對不同隊(duì)列中的事件進(jìn)行互斥操作,可 以進(jìn)一步提高事件的處理速度。但利用多層事件模型,將會(huì)存在不同隊(duì)列中事件同時(shí)間 步生成的問題,下面以拓?fù)鋵影l(fā)出一次査詢請求并查詢結(jié)果為例,對這一問題進(jìn)行解釋。
在單線程執(zhí)行過程中,假設(shè)事件隊(duì)列按照拓?fù)鋵印⒕W(wǎng)絡(luò)層、路由層的順序進(jìn)行處理。 當(dāng)數(shù)據(jù)進(jìn)行發(fā)送操作時(shí),會(huì)在拓?fù)鋵赢a(chǎn)生一次査詢事件,該事件在某一時(shí)間步進(jìn)行處理, 設(shè)時(shí)間為w,若模擬器忽略該處理時(shí)間,則處理完成后將在網(wǎng)絡(luò)層生成一次消息發(fā)送事 件,并且時(shí)間步為w。當(dāng)拓?fù)鋵邮录幚硗瓿珊?,將開始網(wǎng)絡(luò)層事件的處理,并可以對 以上的消息發(fā)送事件進(jìn)行處理。利用同樣的處理,網(wǎng)絡(luò)事件產(chǎn)生的路由事件也可以在該 時(shí)間步內(nèi)完成處理,這一模擬過程是完全正確的。當(dāng)查詢動(dòng)作完成,査詢結(jié)果以同樣的 方式處理后發(fā)送至源節(jié)點(diǎn),若程序正確運(yùn)行,該消息應(yīng)由路由事件處理后生成網(wǎng)絡(luò)事件, 最終產(chǎn)生拓?fù)涫录瓿商幚?。但由于多層事件?duì)列按特定順序進(jìn)行處理,當(dāng)路由層中單
次的接收事件于W時(shí)間完成時(shí),將生成同一時(shí)間步/7內(nèi)的網(wǎng)絡(luò)層事件,但此時(shí)網(wǎng)絡(luò)事 件隊(duì)列已經(jīng)處理結(jié)束,僅在下一時(shí)間步(/7+l)時(shí)才有權(quán)進(jìn)行事件的處理,此時(shí)W事件己 經(jīng)過期,無法完成處理,造成了錯(cuò)誤的操作,即同時(shí)間步內(nèi)不同事件隊(duì)列中的因果事件, 因處理順序的不同,導(dǎo)致結(jié)果事件無法正確處理。
解決方案是采用輪詢方法,同一時(shí)間步內(nèi),在執(zhí)行事件隊(duì)列的處理時(shí),記錄當(dāng)前隊(duì) 列是否存在對應(yīng)于該時(shí)間步的事件,當(dāng)全部事件隊(duì)列完成一次處理后,若當(dāng)前時(shí)間步內(nèi) 有事件進(jìn)行了處理,則有可能產(chǎn)生同時(shí)間步內(nèi)的其他事件,因此需要再次輪詢所有隊(duì)列,重復(fù)以上處理過程直至當(dāng)前時(shí)間步內(nèi)沒有任何事件處理過程發(fā)生,此時(shí)所有事件的時(shí)間 步均都大于當(dāng)前時(shí)間,因此可以繼續(xù)下一時(shí)間步內(nèi)事件的處理。由于現(xiàn)實(shí)世界中時(shí)間的 一致單調(diào)性保證了事件不存在循環(huán)的因果關(guān)系,因此對于真實(shí)網(wǎng)絡(luò)行為的模擬,可以保 證在輪詢方式下存在終止條件,即當(dāng)前時(shí)間步內(nèi)的事件處理完成后,不產(chǎn)生新的事件或 所有產(chǎn)生事件的時(shí)間步大于當(dāng)前時(shí)間。這一方法可以避免模擬行為與真實(shí)行為的差異, 保證了模擬的正確性,但輪詢機(jī)制對于同一時(shí)間步內(nèi)的重復(fù)處理過程將會(huì)降低模擬的效 率。但為了保證模擬行為的正確性,認(rèn)為此時(shí)效率的犧牲是必要的,而且也可以通過改 變事件容器的實(shí)現(xiàn)來進(jìn)一步改進(jìn)模擬效率。 (2)多狀態(tài)自描述模型
多狀態(tài)自描述模型基于面向?qū)ο蠹夹g(shù),對于分布式情況下模塊的多狀態(tài)并發(fā)問題給 出了新穎的解決方式,利用該模型可以有效的提高模塊對于狀態(tài)并發(fā)的管理,減少狀態(tài) 轉(zhuǎn)換過程中的開銷,當(dāng)系統(tǒng)進(jìn)行擴(kuò)展,需要增加新的系統(tǒng)狀態(tài)時(shí),可以降低二次開發(fā)的 開銷,提高系統(tǒng)的可擴(kuò)展性。
真實(shí)P2P網(wǎng)絡(luò)節(jié)點(diǎn)運(yùn)行時(shí)的狀態(tài)轉(zhuǎn)換如附圖2所示。節(jié)點(diǎn)經(jīng)過初始化后,處于等待 狀態(tài),使用者發(fā)起査詢后,將轉(zhuǎn)換至消息發(fā)送狀態(tài),消息發(fā)送完成后,若消息需要等待 回復(fù),則節(jié)點(diǎn)轉(zhuǎn)換至消息等待狀態(tài),否則返回至等待狀態(tài)以準(zhǔn)備下一次的操作。在消息 等待狀態(tài),收到返回的消息后,進(jìn)行消息處理狀態(tài)并進(jìn)行數(shù)據(jù)處理的動(dòng)作,操作完成后 返回等待狀態(tài);若等待超時(shí),節(jié)點(diǎn)則直接返回等待狀態(tài)。同時(shí),由于節(jié)點(diǎn)的動(dòng)態(tài)性,系 統(tǒng)將轉(zhuǎn)換至相應(yīng)的暫停狀態(tài)或終止?fàn)顟B(tài)。
在并發(fā)情況下,同一節(jié)點(diǎn)可能同時(shí)處于除了多種狀態(tài)之下,網(wǎng)絡(luò)程序可以使用多線 程技術(shù),利用單一線程完成消息的整個(gè)處理過程。但對于模擬器而言,由于大量節(jié)點(diǎn)在 單一計(jì)算機(jī)中進(jìn)行模擬,而單一節(jié)點(diǎn)又將處于多個(gè)狀態(tài)之中,所需的線程操作過多,將 極大的降低系統(tǒng)的執(zhí)行效率。另一方面,消息等待狀態(tài)需要暫停線程,等待其他節(jié)點(diǎn)處 理,接收到返回消息后才能夠繼續(xù)操作;工作狀態(tài)需要等待時(shí)間完成操作,都屬于獨(dú)占 型狀態(tài)。在離散時(shí)間模擬方式下,由于該狀態(tài)的獨(dú)占性,將會(huì)導(dǎo)致時(shí)間模塊因無法完成 當(dāng)前時(shí)間步內(nèi)事件的處理而拒絕執(zhí)行后續(xù)事件,造成死鎖。利用多狀態(tài)自描述模型,可 以在離散時(shí)間模擬機(jī)制下,使用面向?qū)ο蠹夹g(shù)模擬線程操作,解決狀態(tài)獨(dú)占性帶來的死 鎖問題。
以往的應(yīng)用與模擬中,利用標(biāo)識符來聲明節(jié)點(diǎn)處于某一特定狀態(tài),節(jié)點(diǎn)執(zhí)行操作前 應(yīng)判斷當(dāng)前狀態(tài),并隨之進(jìn)行相應(yīng)的操作,如下面?zhèn)未a所示node has state A,B,. HowToProcess
if node in state A process state A;
if node in state B process state B;
每次操作前對于狀態(tài)的查詢,降低了系統(tǒng)的運(yùn)行效率,并且由于獨(dú)占性狀態(tài)需要等 待返回,導(dǎo)致整個(gè)處理過程無法繼續(xù)。
多狀態(tài)自描述模型中,節(jié)點(diǎn)狀態(tài)不再以特定的標(biāo)識符進(jìn)行聲明,而是將節(jié)點(diǎn)狀態(tài)的 特征進(jìn)行抽象后封裝在不同的類中,并加入了狀態(tài)自處理的過程。節(jié)點(diǎn)內(nèi)包含了一個(gè)狀 態(tài)對象隊(duì)列,任何節(jié)點(diǎn)事件都將從隊(duì)列頭開始進(jìn)行遍歷,詢問當(dāng)前隊(duì)列中的狀態(tài)是否可 以對事件進(jìn)行處理。當(dāng)節(jié)點(diǎn)運(yùn)行時(shí),向隊(duì)列中的頭位置插入一個(gè)等待狀態(tài)對象,該對象 負(fù)責(zé)對于節(jié)點(diǎn)自發(fā)事件進(jìn)行分析,若該事件將產(chǎn)生后續(xù)的獨(dú)占性狀態(tài),則將該狀態(tài)實(shí)例 化為對象并加入隊(duì)列中。以節(jié)點(diǎn)査詢事件為例,當(dāng)?shù)却隣顟B(tài)對象對一次查詢事件進(jìn)行處 理時(shí),若該查詢需要等待査詢結(jié)果的返回,則實(shí)例化一個(gè)消息等待狀態(tài)的對象加入隊(duì)列, 該對象將僅對該次査詢事件進(jìn)行響應(yīng)。完成以上操作后,節(jié)點(diǎn)開始進(jìn)行后續(xù)時(shí)間步內(nèi)事 件的處理。經(jīng)過一段模擬時(shí)間后,查詢返回事件通過網(wǎng)絡(luò)層發(fā)送至節(jié)點(diǎn),該事件對從隊(duì) 列頭開始詢問狀態(tài)是否可以進(jìn)行響應(yīng),由于頭部節(jié)點(diǎn)的等待狀態(tài)對象僅對節(jié)點(diǎn)自發(fā)事件 進(jìn)行響應(yīng),因此不會(huì)對該事件進(jìn)行處理,并且隊(duì)列中,只有針對于該事件的消息等待狀 態(tài)對象將對該事件進(jìn)行處理。當(dāng)處理完成后,消息等待對象將結(jié)果作為自發(fā)事件通知節(jié) 點(diǎn),隨后退出隊(duì)列并進(jìn)行對象的析構(gòu)操作以釋放資源。處理如下展示的偽代碼
node has state A,B,......
state A is in charge of event X state B is in charge of event Y HowToProcess(event IQ
for each STATE in queue if STATE is in charge of K then give K to STATE
7該方法將狀態(tài)對于事件的判斷過程獨(dú)立于模塊的處理過程,實(shí)現(xiàn)了功能的良好隔 離,在不影響模擬效率的前提下,使得代碼更加清晰可讀,更加易于維護(hù),提高了模擬 器的可擴(kuò)展性。
節(jié)點(diǎn)的暫停狀態(tài)將作為一個(gè)特殊狀態(tài)對象進(jìn)行處理,由于節(jié)點(diǎn)處于暫停狀態(tài)時(shí),無 法對任何事件進(jìn)行響應(yīng),但需保留暫停前節(jié)點(diǎn)的多狀態(tài)與暫停期間的外部事件,用于節(jié) 點(diǎn)恢復(fù)后正常運(yùn)行。因此,我們將實(shí)例化一個(gè)暫停狀態(tài)對象,并直接插入隊(duì)列的頭部, 先于等待狀態(tài)對象對所有事件進(jìn)行處理,由于要對事件進(jìn)行保存,因此需要將所有事件 存入暫停狀態(tài)內(nèi)。經(jīng)過指定的時(shí)間步進(jìn)后,當(dāng)節(jié)點(diǎn)恢復(fù)運(yùn)行時(shí),暫停狀態(tài)將所有事件更 新時(shí)間步后返回事件隊(duì)列,隨后退出狀態(tài)隊(duì)列并析構(gòu)。由于多層事件隊(duì)列將保證同一時(shí) 間步內(nèi)事件都可以被處理,而此時(shí),節(jié)點(diǎn)的狀態(tài)隊(duì)列己經(jīng)恢復(fù)至?xí)和G暗臓顟B(tài),可以對 事件進(jìn)行正確的響應(yīng)與處理。模擬器呈現(xiàn)的效果即為節(jié)點(diǎn)在暫停了指定的時(shí)間后,對于 暫停前的事件依然可以正確執(zhí)行。
另一個(gè)需要特殊處理的狀態(tài)為工作狀態(tài)對象,該狀態(tài)的終止條件不由外部事件觸 發(fā),而表現(xiàn)為經(jīng)過特定時(shí)間步后自動(dòng)完成或在一定的時(shí)間步內(nèi)持續(xù)運(yùn)行,前者是模擬節(jié) 點(diǎn)連接指定資源超時(shí)的典型情況,而后者將為模擬節(jié)點(diǎn)持續(xù)進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)的傳輸提供支 持,由于這類狀態(tài)僅與時(shí)間有關(guān),因此無法通過事件響應(yīng)的方式進(jìn)行處理。此時(shí)我們需 要為節(jié)點(diǎn)加入一個(gè)新的狀態(tài)隊(duì)列,我們稱為持續(xù)狀態(tài)隊(duì)列,用于保存工作狀態(tài)。節(jié)點(diǎn)在 每一時(shí)間步內(nèi),如果當(dāng)前不處于暫停狀態(tài),可對該隊(duì)列中的所有對象進(jìn)行一次輪詢,保 證所有狀態(tài)完成超時(shí)檢査或執(zhí)行相應(yīng)操作。當(dāng)狀態(tài)輪詢時(shí),若發(fā)現(xiàn)狀態(tài)已超時(shí)或相應(yīng)操 作處理完畢,將該對象退出隊(duì)列并進(jìn)行析構(gòu)即可。
通過以上對于特殊狀態(tài)的處理,多狀態(tài)自描述模型能夠完全模擬出真實(shí)系統(tǒng)的各類 行為,并為狀態(tài)事件提供了統(tǒng)一實(shí)現(xiàn)的接口,可以應(yīng)用于各類基于離散事件模型的模擬 系統(tǒng)。對于P2P網(wǎng)絡(luò)這一類規(guī)模巨大、動(dòng)態(tài)性高的分布式系統(tǒng)的模擬,多狀態(tài)自描述模 型給出了新穎、高效、合理的解決方案。
多層事件隊(duì)列模型保證了事件因果關(guān)系在連續(xù)時(shí)間與模擬時(shí)間中的正確執(zhí)行順序, 并且利用統(tǒng)一的事件接口,可以針對特定事件進(jìn)行跟蹤、處理。同時(shí),多層事件隊(duì)列模 型為多線程處理提供了不同事件上的直接隔離,在降低鎖粒度的同時(shí),提高了模擬器的 可擴(kuò)展性性與模擬效率。多狀態(tài)自描述模型,在傳統(tǒng)模擬技術(shù)的基礎(chǔ)上,擴(kuò)展了事件模 擬的概念,將系統(tǒng)狀態(tài)與系統(tǒng)行為統(tǒng)一為系統(tǒng)事件進(jìn)行模擬,結(jié)合多層事件隊(duì)列模型, 可以將系統(tǒng)所有行為抽象為事件,將系統(tǒng)的全部執(zhí)行過程封裝在事件內(nèi),通過事件的生成、觸發(fā)、銷毀過程真實(shí)模擬了系統(tǒng)的全部運(yùn)行過程,即在模擬過程中,利用事件容器 的內(nèi)容與模塊內(nèi)的數(shù)據(jù)集即可完全描述當(dāng)前系統(tǒng)的工作過程,一方面為系統(tǒng)的實(shí)現(xiàn)提供 了一致性,另一方面為模擬狀態(tài)的重現(xiàn)與描述提供了簡單、有效的解決方案。
系統(tǒng)整體架構(gòu)完成后,所有的事件特征被封裝在指定的事件接口內(nèi),并為后續(xù)事件 的添加提供了便利的接口,將這種方法稱為面向事件設(shè)計(jì),將系統(tǒng)的所有行為與狀態(tài)抽 象為對象,利用面向?qū)ο笾械睦^承方法,為所有對象提供統(tǒng)一的處理接口,保證事件處 理的一致性。
完整應(yīng)用以上方法后,模擬器的開發(fā)將分為兩個(gè)獨(dú)立的部分,第一部分是模擬器架 構(gòu)設(shè)計(jì)與網(wǎng)絡(luò)模擬的實(shí)現(xiàn),這部分的工作是模擬器的基礎(chǔ),綜合以上技術(shù),該模擬器架 構(gòu)應(yīng)類似于以下結(jié)構(gòu),軟件主體部分根據(jù)網(wǎng)絡(luò)抽象情況劃分為多層,每一層使用獨(dú)立的 事件容器,通過中央統(tǒng)一的離散時(shí)鐘進(jìn)行控制,最頂層結(jié)構(gòu)提供對于P2P網(wǎng)絡(luò)的抽象接 口,包括實(shí)體對象接口 (如節(jié)點(diǎn),P2P拓?fù)鋵?、消息接口 (用于支持的實(shí)現(xiàn))、狀態(tài)接 口 (用于保證節(jié)點(diǎn)的正確運(yùn)行與狀態(tài)轉(zhuǎn)換)等,架構(gòu)實(shí)現(xiàn)中應(yīng)包括對于以上接口對象的 控制,無需協(xié)議開發(fā)者直接干預(yù);第二部分是對于具體協(xié)議的開發(fā),利用第一部分工作 中完成的模擬器主體結(jié)構(gòu),對于現(xiàn)有P2P協(xié)議進(jìn)行模擬,主要的工作是協(xié)議的轉(zhuǎn)換與細(xì) 節(jié)的制定,因具體協(xié)議而有所區(qū)分。
權(quán)利要求
1、一種可擴(kuò)展的通用型P2P網(wǎng)絡(luò)模擬器的設(shè)計(jì)方法,其特征是包括以下步驟(1)應(yīng)用面向?qū)ο?、多層系統(tǒng)結(jié)構(gòu)、離散時(shí)間模擬、事件模擬與數(shù)據(jù)流模擬技術(shù)構(gòu)建P2P網(wǎng)絡(luò)多層次結(jié)構(gòu);(2)搭建多層事件隊(duì)列模型,為多層結(jié)構(gòu)中的每一層提供獨(dú)立的事件容器,并以最小堆的方式實(shí)現(xiàn);(3)搭建多狀態(tài)自描述模型,將系統(tǒng)抽象為對象以提供統(tǒng)一的聲明與響應(yīng)接口;(4)面向事件設(shè)計(jì),將所有系統(tǒng)行為與狀態(tài)抽象為對象進(jìn)行統(tǒng)一的處理;首先由步驟(1)綜合使用面向?qū)ο蟆⒍鄬酉到y(tǒng)結(jié)構(gòu)、離散時(shí)間模擬、事件模擬與數(shù)據(jù)流模擬技術(shù),為P2P網(wǎng)絡(luò)的模擬定義技術(shù)框架,構(gòu)成P2P網(wǎng)絡(luò)的多層次結(jié)構(gòu)模型;然后由步驟(2)為多層次結(jié)構(gòu)中的每一層提供獨(dú)立的事件容器,該容器以最小堆的方式實(shí)現(xiàn),通過重復(fù)輪詢的方法,保證事件因果性在離散時(shí)間模擬中的正確處理;再由步驟(3)對于系統(tǒng)狀態(tài)提供對象層次的抽象,通過將狀態(tài)抽象為對象的過程,使得單一系統(tǒng)可以利用事件容器容納多狀態(tài)對象的方式來模擬真實(shí)系統(tǒng)中多狀態(tài)并存,對于阻塞式狀態(tài),需要提供獨(dú)立的狀態(tài)對象容器進(jìn)行處理;最后步驟(4)綜合利用步驟(2)與步驟(3)的方法,將系統(tǒng)的所有行為與狀態(tài)抽象為對象,利用面向?qū)ο笾械睦^承方法,為所有對象提供統(tǒng)一的處理接口,保證事件處理的一致性,所有的事件特征被封裝在指定的事件接口內(nèi),并為后續(xù)事件的添加提供便利的接口。
2、 根據(jù)權(quán)利要求1所述的一種可擴(kuò)展的通用型P2P網(wǎng)絡(luò)模擬器的設(shè)計(jì)方法,其特 征是在模擬器的實(shí)現(xiàn)中,對路由層、網(wǎng)絡(luò)層、拓?fù)鋵臃謩e設(shè)計(jì)獨(dú)立的事件隊(duì)列用以容納 相應(yīng)層內(nèi)的事件,并分別抽象出路由事件、網(wǎng)絡(luò)事件與拓?fù)涫录墓步涌谝耘浜鲜录?容器進(jìn)行合作。
3、 根據(jù)權(quán)利要求1所述的一種可擴(kuò)展的通用型P2P網(wǎng)絡(luò)模擬器的設(shè)計(jì)方法,其特 征是步驟(2)的輪詢方法為同一時(shí)間步內(nèi),在執(zhí)行事件隊(duì)列的處理時(shí),記錄當(dāng)前隊(duì)列是 否存在對應(yīng)于該時(shí)間步的事件,當(dāng)全部事件隊(duì)列完成一次處理后,若當(dāng)前時(shí)間步內(nèi)有事 件進(jìn)行了處理,則有可能產(chǎn)生同時(shí)間步內(nèi)的其他事件,需要再次輪詢所有隊(duì)列,重復(fù)以 上處理過程直至當(dāng)前時(shí)間步內(nèi)沒有任何事件處理過程發(fā)生,此時(shí)所有事件的時(shí)間步均都 大于當(dāng)前時(shí)間,可以繼續(xù)下一時(shí)間步內(nèi)事件的處理。
全文摘要
一種可擴(kuò)展的通用型P2P網(wǎng)絡(luò)模擬器的設(shè)計(jì)方法,首先為P2P網(wǎng)絡(luò)的模擬定義技術(shù)框架,構(gòu)成P2P網(wǎng)絡(luò)的多層次結(jié)構(gòu)模型;然后為多層次結(jié)構(gòu)中的每一層提供獨(dú)立的事件容器;再對于系統(tǒng)狀態(tài)提供對象層次的抽象,使系統(tǒng)可以利用事件容器容納多狀態(tài)對象的方式來模擬真實(shí)系統(tǒng)中多狀態(tài)并存;最后將系統(tǒng)的所有行為與狀態(tài)抽象為對象,為所有對象提供統(tǒng)一的處理接口,保證事件處理的一致性。本發(fā)明通過統(tǒng)一系統(tǒng)行為抽象的方法,為P2P協(xié)議在模擬器中的實(shí)現(xiàn)提供統(tǒng)一的抽象過程,簡化真實(shí)協(xié)議的模擬實(shí)現(xiàn)開銷,與現(xiàn)有技術(shù)相比,其顯著優(yōu)點(diǎn)有可以完全模擬真實(shí)P2P網(wǎng)絡(luò)系統(tǒng)的行為特征,并為模擬器提供了優(yōu)秀的可擴(kuò)展性、可用性與通用性。
文檔編號H04L29/08GK101309186SQ20081012427
公開日2008年11月19日 申請日期2008年6月23日 優(yōu)先權(quán)日2008年6月23日
發(fā)明者袁瑞峰, 陳貴海 申請人:南京大學(xué)