專利名稱:用于自動(dòng)調(diào)節(jié)從發(fā)送器通過并行連接到接收器的大量數(shù)據(jù)傳送的機(jī)制的制作方法
技術(shù)領(lǐng)域:
本公開內(nèi)容大體上涉及從發(fā)送器通過網(wǎng)絡(luò)到接收器的數(shù)據(jù)傳送,更具體地,涉及使用并行數(shù)據(jù)協(xié)議從發(fā)送器通過網(wǎng)絡(luò)到接收器的大量數(shù)據(jù)傳送。
背景技術(shù):
當(dāng)在發(fā)送器-接收器系統(tǒng)中傳送數(shù)據(jù)時(shí),并行數(shù)據(jù)協(xié)議可被用于發(fā)送器-接收器系統(tǒng)中的大量數(shù)據(jù)傳送,在所述發(fā)送器-接收器系統(tǒng)中,發(fā)送器和接收器通過一個(gè)或多個(gè)網(wǎng)絡(luò)進(jìn)行通信。發(fā)送器-接收器系統(tǒng)的例子包括客戶端-服務(wù)器系統(tǒng)和對(duì)等系統(tǒng)。在這樣的發(fā)送器-接收器系統(tǒng)中,以前考慮在發(fā)送器與接收器之間打開多個(gè)并行連接(諸如多個(gè)TCP連接)。打開多個(gè)連接的目的是聚合網(wǎng)絡(luò)的可用帶寬。更準(zhǔn)確地講,發(fā)送器與接收器之間的單個(gè)連接可能不能使用給定網(wǎng)絡(luò)中的所有可用帶寬。通過打開多個(gè)并行連接,可實(shí)現(xiàn)任何一個(gè)特定網(wǎng)絡(luò)中的帶寬的最大利用。
發(fā)明內(nèi)容
帶寬聚合的一個(gè)問題是,使得可供使用的帶寬的量可以如此大以至于它超出接收器存儲(chǔ)數(shù)據(jù)的能力或者發(fā)送器檢索用于發(fā)送的數(shù)據(jù)的能力。在這樣的數(shù)據(jù)傳送中,從發(fā)送器到接收器的數(shù)據(jù)傳送的瓶頸可能不是由可用網(wǎng)絡(luò)帶寬的缺乏而引起的。具體地講,在存在多余的可用帶寬的情況下,數(shù)據(jù)傳送的瓶頸實(shí)際上是讀取數(shù)據(jù)和將數(shù)據(jù)寫入到盤時(shí)所涉及的物理I/o。如果I/O存儲(chǔ)系統(tǒng)的帶寬是瓶頸,則通過使用多個(gè)并行連接來聚合帶寬的系統(tǒng)將獨(dú)占比它們能夠使用的網(wǎng)絡(luò)套接字多的可用網(wǎng)絡(luò)套接字。這樣的布置對(duì)于通過相同的通信網(wǎng)絡(luò)操作的其他發(fā)送器-接收器系統(tǒng)是不公平的。在本公開內(nèi)容中,通過下述方式來解決前述問題,即,基于I/O存儲(chǔ)系統(tǒng)的性能來自動(dòng)調(diào)節(jié)(autotune)發(fā)送器和通過網(wǎng)絡(luò)與該發(fā)送器連接的接收器之間的連接的數(shù)量。通過打開和/或關(guān)閉連接自動(dòng)調(diào)節(jié)連接的數(shù)量以便建立兩個(gè)系統(tǒng)之間的最佳數(shù)量的連接。自動(dòng)調(diào)節(jié)可具體地通過下述方式發(fā)生:當(dāng)接收器檢測到大量數(shù)據(jù)傳送的瓶頸存在于接收器的I/O存儲(chǔ)系統(tǒng)中時(shí),關(guān)閉現(xiàn)存連接,并且當(dāng)接收器的I/O存儲(chǔ)系統(tǒng)寫數(shù)據(jù)比從網(wǎng)絡(luò)接收數(shù)據(jù)快時(shí),打開新連接。而且,通過下述方式來自動(dòng)調(diào)節(jié)發(fā)送器與接收器之間的連接的數(shù)量:當(dāng)發(fā)送器的I/O存儲(chǔ)系統(tǒng)讀數(shù)據(jù)比通過網(wǎng)絡(luò)送出數(shù)據(jù)快時(shí),打開新連接,并且當(dāng)發(fā)送器的I/O存儲(chǔ)系統(tǒng)讀數(shù)據(jù)比通過網(wǎng)絡(luò)送出數(shù)據(jù)慢并且多于一個(gè)的發(fā)送器正將數(shù)據(jù)發(fā)送到接收器時(shí),關(guān)閉現(xiàn)存連接。因此,在這里描述的示例性實(shí)施例中,通過網(wǎng)絡(luò)在發(fā)送器與接收器之間建立多個(gè)連接。所述多個(gè)連接可以是,例如,多個(gè)TCP連接。然后通過在所述多個(gè)連接上劃分地發(fā)送數(shù)據(jù)來將數(shù)據(jù)從發(fā)送器發(fā)送到接收器,以便聚合網(wǎng)絡(luò)的帶寬的利用。通過下述方式來自動(dòng)調(diào)節(jié)發(fā)送器與接收器之間的連接的最佳數(shù)量:當(dāng)接收器檢測到大量數(shù)據(jù)傳送的瓶頸存在于接收器的I/O存儲(chǔ)系統(tǒng)中時(shí),關(guān)閉現(xiàn)存連接。就這一點(diǎn)而言,現(xiàn)存連接的關(guān)閉是次要連接而非主要連接的關(guān)閉。通過下述方式來進(jìn)一步自動(dòng)調(diào)節(jié)連接的數(shù)量:當(dāng)接收器的I/o存儲(chǔ)系統(tǒng)寫數(shù)據(jù)比從網(wǎng)絡(luò)接收數(shù)據(jù)快時(shí),打開新連接。另外,通過下述方式來自動(dòng)調(diào)節(jié)發(fā)送器與接收器之間的連接的數(shù)量:當(dāng)發(fā)送器的I/o存儲(chǔ)系統(tǒng)讀數(shù)據(jù)比通過網(wǎng)絡(luò)送出數(shù)據(jù)快時(shí),打開新連接。通過下述方式來進(jìn)一步自動(dòng)調(diào)節(jié)連接的數(shù)量:當(dāng)發(fā)送器的I/o存儲(chǔ)系統(tǒng)讀數(shù)據(jù)比通過網(wǎng)絡(luò)送出數(shù)據(jù)慢并且多于一個(gè)的發(fā)送器正將數(shù)據(jù)發(fā)送到接收器時(shí),關(guān)閉現(xiàn)存連接。借助于前述布置,通??商峁┳孕?zhǔn),在所述自校準(zhǔn)中,發(fā)送器和接收器動(dòng)態(tài)地增加和減少連接的數(shù)量,以便通過提供理想的吞吐量來改進(jìn)大量數(shù)據(jù)傳送的性能。另外,在大量的發(fā)送器-接收器布置之間保持公平性。例如,如果當(dāng)前瓶頸是接收器的系統(tǒng)1/0,使得當(dāng)前數(shù)量的并行連接聚合了多余的網(wǎng)絡(luò)帶寬,則可關(guān)閉這些連接中的一些,以便釋放帶寬以供其他發(fā)送器-接收器系統(tǒng)使用。在這里還描述的示例性實(shí)施例中,接收器的I/O存儲(chǔ)系統(tǒng)包括盤。在這個(gè)示例性實(shí)施例中,當(dāng)自動(dòng)調(diào)節(jié)連接的數(shù)量時(shí),當(dāng)在接收器的I/o存儲(chǔ)系統(tǒng)上執(zhí)行盤的查找操作時(shí),肯定地檢測到大量數(shù)據(jù)傳送的瓶頸在接收器的I/o存儲(chǔ)系統(tǒng)中。更具體地講,因?yàn)槎鄠€(gè)連接正被使用,所以數(shù)據(jù)可能不能按順序到達(dá)接收器。如果接收器超時(shí)等待下一連續(xù)數(shù)據(jù)塊,則接收器的I/o存儲(chǔ)系統(tǒng)可對(duì)亂序數(shù)據(jù)進(jìn)行盤寫入,這可能要求附加的查找操作。這通常意味著,將數(shù)據(jù)從發(fā)送器傳送到接收器比接收器的I/o存儲(chǔ)系統(tǒng)將數(shù)據(jù)寫到盤快。因此,瓶頸可能存在于接收器的i/o存儲(chǔ)系統(tǒng)中。在這里描述的另一示例性實(shí)施例中,接收器的I/O存儲(chǔ)系統(tǒng)包括盤。在這個(gè)另一示例性實(shí)施例中,當(dāng)自動(dòng)調(diào)節(jié)連接的數(shù)量時(shí),當(dāng)接收器的I/o存儲(chǔ)系統(tǒng)將數(shù)據(jù)寫到盤比先前的I/o寫速率慢時(shí),肯定地檢測到大量數(shù)據(jù)傳送的瓶頸在接收器的I/O存儲(chǔ)系統(tǒng)中。所述先前的I/o寫速率可以基于先前對(duì)多于一次寫操作測量的I/O寫速率,或者可以基于先前對(duì)一時(shí)間段的寫操作測量的I/o寫速率,或者可以基于先前對(duì)寫操作測量的I/O寫速率的加權(quán)平均值。例如,如果接收器的I/o存儲(chǔ)系統(tǒng)的先前的I/O寫速率為lOMb/s,并且接收器的I/o存儲(chǔ)系統(tǒng)當(dāng)前正以5Mb/s寫數(shù)據(jù),則瓶頸可能存在于接收器的I/O存儲(chǔ)系統(tǒng)中。當(dāng)例如I/O存儲(chǔ)系統(tǒng)正在處理其他非MDT應(yīng)用時(shí),可能發(fā)生接收器的I/O存儲(chǔ)系統(tǒng)寫速率變慢。在這里描述的另一示例性實(shí)施例中,連接數(shù)量的自動(dòng)調(diào)節(jié)還包括:在發(fā)送器檢測到大量數(shù)據(jù)傳送的瓶頸存在于網(wǎng)絡(luò)中的情況下,發(fā)送器關(guān)閉發(fā)送器與接收器之間的現(xiàn)存連接。結(jié)果,可減少網(wǎng)絡(luò)的進(jìn)一步擁塞。在這個(gè)示例性實(shí)施例中,在當(dāng)前的往返時(shí)間(RTT)比先前的RTT長時(shí),肯定地檢測到大量數(shù)據(jù)傳送的瓶頸在網(wǎng)絡(luò)中。當(dāng)前的RTT和先前的RTT可以基于多于一個(gè)消息包的RTT,或者可以基于RTT的加權(quán)平均值。如果當(dāng)前的RTT大大地長于先前的RTT,則網(wǎng)絡(luò)可能忙并且具有來自其他發(fā)送器-接收器系統(tǒng)的更多流量。通過在網(wǎng)絡(luò)忙時(shí)關(guān)閉現(xiàn)存連接,可減少由通過繁忙網(wǎng)絡(luò)發(fā)送更多數(shù)據(jù)而引起的任何進(jìn)一步擁塞。在這里描述的再一示例性實(shí)施例中,連接數(shù)量的自動(dòng)調(diào)節(jié)還包括:在發(fā)送器檢測到大量數(shù)據(jù)傳送的瓶頸存在于發(fā)送器的I/o存儲(chǔ)系統(tǒng)中的情況下,關(guān)閉發(fā)送器與接收器之間的現(xiàn)存連接。當(dāng)發(fā)送器處的緩沖區(qū)基本上空時(shí),肯定地檢測到大量數(shù)據(jù)傳送的瓶頸在發(fā)送器的I/o存儲(chǔ)系統(tǒng)中。在這里描述的又一示例性實(shí)施例中,在發(fā)送器檢測到發(fā)送器處的緩沖區(qū)基本上滿的情況下,發(fā)送器將用于打開新連接的請(qǐng)求發(fā)送到接收器,或者利用已經(jīng)被創(chuàng)建的但是當(dāng)前未被用于發(fā)送數(shù)據(jù)的連接。因?yàn)榭蓽p少從發(fā)送器發(fā)送數(shù)據(jù)時(shí)的延遲或間隙,所以當(dāng)發(fā)送器處的緩沖區(qū)基本上滿時(shí)打開新連接具有提供平穩(wěn)的總數(shù)據(jù)傳送的有益效果。在一些情況下,可根據(jù)網(wǎng)絡(luò)中的瓶頸的檢測或者根據(jù)接收器的I/o存儲(chǔ)系統(tǒng)中的瓶頸的檢測來調(diào)整發(fā)送器和接收器處的緩沖區(qū)大小。具體地講,在這個(gè)示例性實(shí)施例中,可增大發(fā)送器處的緩沖區(qū)的大小,以可能防止緩沖區(qū)溢出數(shù)據(jù)。根據(jù)這里描述的另一示例性實(shí)施例,存在多個(gè)發(fā)送器,每個(gè)發(fā)送器將多個(gè)大量數(shù)據(jù)傳送中的相應(yīng)一個(gè)大量數(shù)據(jù)傳送發(fā)送到接收器。在這個(gè)示例性實(shí)施例中,當(dāng)通過網(wǎng)絡(luò)建立發(fā)送器與接收器之間的多個(gè)連接時(shí),接收器基于其他發(fā)送器請(qǐng)求的連接的數(shù)量來設(shè)置發(fā)送器與接收器之間可建立的連接的最多數(shù)量。例如,如果接收器具有所有發(fā)送器可共享的最多20個(gè)連接,并且其他發(fā)送器當(dāng)前正利用這20個(gè)連接中的15個(gè)連接,則接收器可基于其他發(fā)送器正使用的15個(gè)連接來設(shè)置在其上發(fā)送器可用于傳送數(shù)據(jù)的最多5個(gè)連接。并且,在這個(gè)示例性實(shí)施例中,接收器基于其他發(fā)送器請(qǐng)求的連接的數(shù)量來設(shè)置在其內(nèi)可建立最多數(shù)量連接的時(shí)間段。另外,接收器基于其他發(fā)送器請(qǐng)求的連接的數(shù)量來設(shè)置用于建立可被建立的最多數(shù)量的連接中的每個(gè)連接的起始時(shí)間。例如,如果接收器設(shè)置最多3個(gè)連接,則在主要連接被建立之后的I分鐘可建立第一次要連接,并且第一次要連接可持續(xù)4分鐘,并且在主要連接被建立之后的2分鐘可建立第二次要連接,并且第二次要連接可持續(xù)2分鐘。在這里描述的另一示例性實(shí)施例中,作業(yè)隊(duì)列由調(diào)度管理器維護(hù),與傳入的被請(qǐng)求連接的數(shù)量相對(duì)比,所述調(diào)度管理器管理所有的多個(gè)發(fā)送器之間存在的當(dāng)前連接的數(shù)量。另外,調(diào)度管理器將優(yōu)先級(jí)分配給所述多個(gè)發(fā)送器中的每一個(gè)。就這一點(diǎn)而言,與將較少數(shù)量的連接分配給較低優(yōu)先級(jí)的發(fā)送器相對(duì)比,調(diào)度管理器將較多數(shù)量的連接分配給較高優(yōu)先級(jí)的發(fā)送器。根據(jù)這里描述的另一示例性實(shí)施例,當(dāng)發(fā)送器的I/O存儲(chǔ)系統(tǒng)讀數(shù)據(jù)比通過網(wǎng)絡(luò)送出數(shù)據(jù)快時(shí),發(fā)送器將用于打開一個(gè)或多個(gè)連接的請(qǐng)求發(fā)送到接收器。當(dāng)自動(dòng)調(diào)節(jié)連接的數(shù)量時(shí),如果被請(qǐng)求的一個(gè)或多個(gè)連接被調(diào)度管理器確定為可用,則接收器打開所述一個(gè)或多個(gè)連接。根據(jù)這里描述的再一示例性實(shí)施例,在當(dāng)前的往返時(shí)間(RTT)從先前的RTT大大地縮短時(shí),發(fā)送器將用于打開一個(gè)或多個(gè)連接的請(qǐng)求發(fā)送到接收器。當(dāng)前的RTT和先前的RTT可以基于多于一個(gè)消息包的RTT,或者可以基于RTT的加權(quán)平均值。當(dāng)自動(dòng)調(diào)節(jié)連接的數(shù)量時(shí),如果被請(qǐng)求的一個(gè)或多個(gè)連接被調(diào)度管理器確定為可用,則接收器打開所述一個(gè)或多個(gè)連接。提供這個(gè)簡要的發(fā)明內(nèi)容,以使得本公開內(nèi)容的本質(zhì)可被快速地理解??赏ㄟ^參照以下具體實(shí)施方式
和附圖來獲得更完整的理解。
圖1是通過在其上可實(shí)現(xiàn)示例性實(shí)施例的架構(gòu)的網(wǎng)絡(luò)連接的多個(gè)發(fā)送器和接收器的代表性示圖。圖2是用于解釋圖1的發(fā)送器的內(nèi)部架構(gòu)的詳細(xì)框圖。
圖3是用于解釋圖1的接收器的內(nèi)部架構(gòu)的詳細(xì)框圖。圖4A是用于解釋根據(jù)示例性實(shí)施例的發(fā)送器與接收器之間的主要連接的建立的發(fā)送器和接收器的示圖。圖4B是用于解釋根據(jù)示例性實(shí)施例的發(fā)送器與接收器之間的次要連接的建立的發(fā)送器和接收器的示圖。圖5是用于提供根據(jù)示例性實(shí)施例的接收器向發(fā)送器通知增加或減少會(huì)話中的連接數(shù)量的解釋的順序圖。圖6是用于提供根據(jù)示例性實(shí)施例的將數(shù)據(jù)從發(fā)送器發(fā)送到接收器的大體解釋的發(fā)送器和接收器的另一視圖。圖7是根據(jù)示例性實(shí)施例的針對(duì)傳輸發(fā)送器的類圖。圖8是根據(jù)示例性實(shí)施例的針對(duì)傳輸接收器的類圖。圖9是根據(jù)示例性實(shí)施例的針對(duì)服務(wù)器分配器的類圖。圖10是根據(jù)示例性實(shí)施例的針對(duì)數(shù)據(jù)源的類圖。圖11是根據(jù)示例性實(shí)施例的針對(duì)客戶端交互的類圖。圖12是根據(jù)示例性實(shí)施例的針對(duì)服務(wù)器交互的類圖。圖13A和圖13B是“put”情況下的客戶端一方的順序圖。圖14A和圖14B是“put”情況下的提供者一方的順序圖。圖15是“get”情況下的客戶端一方的順序圖。圖16是“get”情況下的提供者一方的順序圖。圖17是客戶端一方用于取消“get”操作的順序圖。圖18是提供者一方用于取消“get”操作的順序圖。圖19是客戶端一方用于取消“put”操作的順序圖。圖20是提供者一方用于取消“put”操作的順序圖。圖21是圖1的接收器的I/O存儲(chǔ)系統(tǒng)中的寫操作的代表性示圖。圖22是如圖21所示的DataWriteQueue2101的代表性示圖。圖23是圖1的接收器的I/O存儲(chǔ)系統(tǒng)中的寫操作的另一代表性示圖。圖24A是用于在圖1中的發(fā)送器101的I/O存儲(chǔ)系統(tǒng)中檢測數(shù)據(jù)傳送中的瓶頸的順序圖。圖24B是圖1中的發(fā)送器101的I/O存儲(chǔ)系統(tǒng)中的讀操作的代表性示圖。圖25是根據(jù)示例性實(shí)施例的針對(duì)服務(wù)器的類圖。圖26是根據(jù)示例性實(shí)施例的針對(duì)客戶端的類圖。圖27是根據(jù)示例性實(shí)施例的針對(duì)數(shù)據(jù)串化器的類圖。圖28是根據(jù)示例性實(shí)施例的針對(duì)數(shù)據(jù)解串器的類圖。圖29是用于在客戶端建立會(huì)話的順序圖。圖30是用于提供根據(jù)示例性實(shí)施例的用于在發(fā)送器建立開始會(huì)話的描述的流程圖。圖31是用于提供根據(jù)示例性實(shí)施例的用于在發(fā)送器建立加入會(huì)話的描述的流程圖。圖32是用于在服務(wù)器建立會(huì)話的順序圖。
圖33是用于提供根據(jù)示例性實(shí)施例的用于在接收器建立會(huì)話的描述的流程圖。圖34是用于客戶端處的數(shù)據(jù)交換的順序圖。圖35和圖36是用于提供發(fā)送器處的數(shù)據(jù)交換的描述的流程圖。圖37是用于服務(wù)器處的數(shù)據(jù)交換的順序圖。圖38和圖39是用于提供接收器處的數(shù)據(jù)交換的描述的流程圖。圖40是用于提供另一示例性實(shí)施例的詳細(xì)解釋的流程圖。
具體實(shí)施例方式圖1是通過在其上可實(shí)現(xiàn)示例性實(shí)施例的架構(gòu)的網(wǎng)絡(luò)連接的多個(gè)發(fā)送器與接收器的代表性示圖。如圖1所示,發(fā)送器101、131和132通過網(wǎng)絡(luò)120與接收器102連接。更具體地講,發(fā)送器101通過網(wǎng)絡(luò)接口 111與網(wǎng)絡(luò)120連接,發(fā)送器131通過網(wǎng)絡(luò)接口 112與網(wǎng)絡(luò)120連接,發(fā)送器132通過網(wǎng)絡(luò)接口 113與網(wǎng)絡(luò)120連接,接收器102通過網(wǎng)絡(luò)接口114與網(wǎng)絡(luò)120連接。在圖1中,發(fā)送器101、131和132被示出為通過一個(gè)網(wǎng)絡(luò)連接;然而,在其他示例性實(shí)施例中,發(fā)送器101、131和132以及接收器102可通過多于一個(gè)的網(wǎng)絡(luò)連接。另外,可存在與網(wǎng)絡(luò)120連接或者與多個(gè)網(wǎng)絡(luò)連接的多于或少于三個(gè)的發(fā)送器以及多于一個(gè)的接收器。網(wǎng)絡(luò)120是內(nèi)聯(lián)網(wǎng),但是在其他7]^例性實(shí)施例中,網(wǎng)絡(luò)120可以是互聯(lián)網(wǎng)或者任何其他合適類型的用于傳送數(shù)據(jù)的網(wǎng)絡(luò)。發(fā)送器101、131和132是能夠通過網(wǎng)絡(luò)發(fā)送大量數(shù)據(jù)傳送的裝置。然而,發(fā)送器101、131和132不限于發(fā)送數(shù)據(jù),還可以是能夠接收被傳送數(shù)據(jù)的裝置。發(fā)送器101、131和132可以是例如計(jì)算機(jī)或者能夠通過網(wǎng)絡(luò)`發(fā)送大量數(shù)據(jù)傳送的任何其他裝置。另外,發(fā)送器101、131和132可以是客戶端-服務(wù)器系統(tǒng)中的客戶端裝置,或者可以是對(duì)等系統(tǒng)中的
對(duì)等裝置。接收器102是能夠通過網(wǎng)絡(luò)接收和發(fā)送大量數(shù)據(jù)傳送的裝置。接收器102可以是例如計(jì)算機(jī)或者能夠通過網(wǎng)絡(luò)接收和發(fā)送大量數(shù)據(jù)傳送的任何其他裝置。另外,接收器102可以是客戶端-服務(wù)器系統(tǒng)中的服務(wù)器裝置,或者可以是對(duì)等系統(tǒng)中的對(duì)等裝置。網(wǎng)絡(luò)接口 111至114可以是有線或無線物理接口。網(wǎng)絡(luò)接口 111至114中的每一個(gè)包括一個(gè)或多個(gè)端口,以便與網(wǎng)絡(luò)120建立一個(gè)或多個(gè)套接字連接。圖2是用于解釋圖1的發(fā)送器101、131和132中的每一個(gè)的內(nèi)部架構(gòu)的詳細(xì)框圖。如圖2所示,發(fā)送器101、131和132中的每一個(gè)可包括與計(jì)算機(jī)總線200接口連接的中央處理單元(CPU) 202。還與計(jì)算機(jī)總線200接口連接的是硬盤(或固定盤)220、網(wǎng)絡(luò)接口 111、112或113、用作主要的運(yùn)行時(shí)暫存器的隨機(jī)存取存儲(chǔ)器(RAM)208、以及只讀存儲(chǔ)器(ROM)210。RAM208與計(jì)算機(jī)總線200接口連接,以便在執(zhí)行軟件程序(諸如操作系統(tǒng)、應(yīng)用程序和接口驅(qū)動(dòng)程序)中的指令期間將存儲(chǔ)在RAM208中的信息提供給CPU202。更具體地講,CPU202首先將計(jì)算機(jī)可執(zhí)行處理步驟從固定盤220或另一存儲(chǔ)裝置加載到RAM208的區(qū)域中。CPU202然后可從RAM208執(zhí)行被存儲(chǔ)的處理步驟,以便執(zhí)行加載的計(jì)算機(jī)可執(zhí)行處理步驟。另外,諸如收集的網(wǎng)絡(luò)性能統(tǒng)計(jì)數(shù)據(jù)或其他信息之類的數(shù)據(jù)可被存儲(chǔ)在RAM208中,以使得該數(shù)據(jù)可在計(jì)算機(jī)可執(zhí)行軟件程序的執(zhí)行期間被CPU202訪問,達(dá)到這樣的軟件程序需要訪問和/或修改該數(shù)據(jù)的程度。如圖2中還示出的,硬盤220包含操作系統(tǒng)228、應(yīng)用程序230 (諸如用于啟動(dòng)和關(guān)閉發(fā)送器101、131或132的程序)或其他程序。硬盤220還包含用于與網(wǎng)絡(luò)(諸如網(wǎng)絡(luò)120)的軟件接口的網(wǎng)絡(luò)驅(qū)動(dòng)程序232。硬盤220還包含用于控制從發(fā)送器發(fā)送數(shù)據(jù)的流傳輸(streaming)軟件234。最后,硬盤220包含用于控制發(fā)送器101與接收器102之間的連接的數(shù)量的自動(dòng)調(diào)節(jié)軟件236,其將結(jié)合圖40被更詳細(xì)地描述。在示例性實(shí)施例中,流傳輸軟件234和自動(dòng)調(diào)節(jié)軟件236被CPU202加載到RAM208的區(qū)域中。CPU202然后從RAM208執(zhí)行被存儲(chǔ)的流傳輸軟件234和自動(dòng)調(diào)節(jié)軟件236,以便執(zhí)行加載的計(jì)算機(jī)可執(zhí)行步驟。另外,應(yīng)用程序230被CPU202加載到RAM208的區(qū)域中。CPU202然后執(zhí)行以下結(jié)合圖40詳細(xì)描述的被存儲(chǔ)的處理步驟,以便執(zhí)行加載的計(jì)算機(jī)可執(zhí)行步驟。圖3是用于解釋圖1的接收器102的內(nèi)部架構(gòu)的詳細(xì)框圖。如圖3所示,接收器102包括與計(jì)算機(jī)總線300接口連接的中央處理單元(CPU)302。還與計(jì)算機(jī)總線300接口連接的是硬盤(或固定盤)320、網(wǎng)絡(luò)接口 114、用作主要的運(yùn)行時(shí)暫存器的隨機(jī)存取存儲(chǔ)器(RAM) 308、以及只讀存儲(chǔ)器(ROM) 310。RAM308與計(jì)算機(jī)總線300接口連接,以便在執(zhí)行軟件程序(諸如操作系統(tǒng)、應(yīng)用程序和接口驅(qū)動(dòng)程序)中的指令期間將存儲(chǔ)在RAM308中的信息提供給CPU302。更具體地講,CPU302首先將計(jì)算機(jī)可執(zhí)行處理步驟從固定盤320或另一存儲(chǔ)裝置加載到RAM308的區(qū)域中。CPU302然后可從RAM308執(zhí)行被存儲(chǔ)的處理步驟,以便執(zhí)行加載的計(jì)算機(jī)可執(zhí)行處理步驟。另外,諸如收集的網(wǎng)絡(luò)性能統(tǒng)計(jì)數(shù)據(jù)或其他信息之類的數(shù)據(jù)可被存儲(chǔ)在RAM308中,以使得該數(shù)據(jù)可在計(jì)算機(jī)可執(zhí)行軟件程序的執(zhí)行期間被CPU302訪問,達(dá)到這樣的軟件程序需要訪問和/或修改該數(shù)據(jù)的程度。如圖3中還示出的,硬盤320包含操作系統(tǒng)328、應(yīng)用程序330(諸如用于啟動(dòng)和關(guān)閉接收器102的程序)或其他程序。硬盤320還包含用于與網(wǎng)絡(luò)(諸如網(wǎng)絡(luò)120)的軟件接口的網(wǎng)絡(luò)驅(qū)動(dòng)程序332。硬盤320還包含用于控制接收器102接收數(shù)據(jù)的流傳輸軟件334。另外,硬盤320包含用于對(duì)于發(fā)送器101與接收器102之間的連接調(diào)度不同參數(shù)的調(diào)度管理器338,其將結(jié)合圖40被更詳細(xì)地描述。最后,硬盤320包含用于控制發(fā)送器101與接收器102之間的連接的數(shù)量的自動(dòng)調(diào)節(jié)軟件336,其也將結(jié)合圖40被更詳細(xì)地描述。調(diào)度管理器338可起到很多作用。例如,調(diào)度管理器338可起到保持跟蹤被分配給各個(gè)數(shù)據(jù)傳送作業(yè)/會(huì)話的優(yōu)先級(jí)的作用。另外,調(diào)度管理器338可起到管理數(shù)據(jù)傳送會(huì)話可打開的連接的數(shù)量的作用。具體地講,調(diào)度管理器338維護(hù)作業(yè)隊(duì)列,以針對(duì)給定的數(shù)據(jù)傳送保持跟蹤發(fā)送器與接收器之間的連接的當(dāng)前數(shù)量。此外,調(diào)度管理器338可起到限定給定數(shù)量的連接可在發(fā)送器與接收器之間被打開的起始時(shí)間的作用。最后,調(diào)度管理器338可起到下述作用:限定在其內(nèi)給定數(shù)量的連接可被啟動(dòng)和保持打開的時(shí)間段或持續(xù)時(shí)間,并且在該時(shí)間段過去之后終止連接。這些作用將在下面結(jié)合圖40被更詳細(xì)地描述。當(dāng)起到前述作用時(shí),調(diào)度管理器338使用某些準(zhǔn)則(例如,用戶定義的優(yōu)先級(jí)和系統(tǒng)負(fù)載定義的優(yōu)先級(jí))來在每個(gè)作用內(nèi)作出某些決定。用戶定義的優(yōu)先級(jí)的一個(gè)例子是向高支付客戶的數(shù)據(jù)傳送給予高于低支付客戶的優(yōu)先次序。系統(tǒng)負(fù)載定義的優(yōu)先級(jí)的一些例子包括:保持系統(tǒng)具有足夠的負(fù)載而不打斷所有的數(shù)據(jù)傳送、帶寬和系統(tǒng)資源的有效利用以使得不存在利用不足、公平負(fù)載平衡方案(如果用戶想使用該方案來進(jìn)行數(shù)據(jù)傳送);以及與短期數(shù)據(jù)傳送相比優(yōu)先執(zhí)行長期數(shù)據(jù)傳送,或者將更多連接給予短期數(shù)據(jù)傳送,以使得它們首先執(zhí)行它們的傳送并退出而無需等待長期數(shù)據(jù)傳送完成。為了便利于調(diào)度管理器338起到前述作用,使得以下信息可供調(diào)度管理器338使用:給定發(fā)送器與接收器之間的可用帶寬,給定數(shù)據(jù)傳送作業(yè)的數(shù)據(jù)大小,被分配給不同發(fā)送器的優(yōu)先級(jí),以及來自自動(dòng)調(diào)節(jié)軟件336的與基于以下方面的性能的可允許連接數(shù)量有關(guān)的推薦:當(dāng)前CPU負(fù)荷、當(dāng)前內(nèi)存負(fù)荷、盤上的當(dāng)前負(fù)荷或者數(shù)據(jù)傳送的任何盤相關(guān)瓶頸、以及網(wǎng)絡(luò)上的當(dāng)前負(fù)荷或者數(shù)據(jù)傳送的任何網(wǎng)絡(luò)相關(guān)瓶頸。在示例性實(shí)施例中,流傳輸軟件334、自動(dòng)調(diào)節(jié)軟件336和調(diào)度管理器338被CPU302加載到RAM308的區(qū)域中。CPU302然后從RAM308執(zhí)行流傳輸軟件334、自動(dòng)調(diào)節(jié)軟件336和調(diào)度管理器338的被存儲(chǔ)的處理步驟,以便執(zhí)行加載的計(jì)算機(jī)可執(zhí)行步驟。另外,應(yīng)用程序330的處理步驟被CPU302加載到RAM308的區(qū)域中。CPU302然后執(zhí)行如以下結(jié)合圖40詳細(xì)描述的被存儲(chǔ)的處理步驟,以便執(zhí)行加載的計(jì)算機(jī)可執(zhí)行步驟。圖4A是用于解釋根據(jù)示例性實(shí)施例的發(fā)送器與接收器之間的主要連接的建立的發(fā)送器和接收器的示圖。通常,提供并行數(shù)據(jù)協(xié)議(PDP),所述PDP通過多個(gè)套接字利用多個(gè)傳輸控制協(xié)議(TCP)連接來在發(fā)送器101與接收器102之間發(fā)送和接收數(shù)據(jù)。然而,可利用用于多流數(shù)據(jù)傳輸?shù)钠渌噙B接系統(tǒng)(即,通過任何面向連接的協(xié)議的任何邏輯連接端點(diǎn)),只要接收器在數(shù)據(jù)被寫到存儲(chǔ)系統(tǒng)中之前將數(shù)據(jù)收集到內(nèi)存緩沖區(qū)中即可,其將在下面結(jié)合圖6被更詳細(xì)地描述。在圖4A中,僅示出了發(fā)送器101 ;然而,在其他示例性實(shí)施例中,多于一個(gè)的發(fā)送器(諸如發(fā)送器131和132)可與接收器102形成連接。在圖4A中,所實(shí)現(xiàn)的示例性PDP是專有的、輕量級(jí)的基于二值請(qǐng)求/響應(yīng)的協(xié)議,該協(xié)議使得可通過多個(gè)流(比如,TCP連接)來發(fā)送和接收數(shù)據(jù)。在實(shí)際的數(shù)據(jù)傳送可發(fā)生之前,發(fā)送器101首先將請(qǐng)求消息發(fā)送到接收器102(401)。請(qǐng)求消息包括向接收器102注冊的被請(qǐng)求URI (路徑)。當(dāng)接收器102接收到有效的請(qǐng)求消息時(shí),接收器102用響應(yīng)消息進(jìn)行回復(fù),所述響應(yīng)消息包括接收器102分配的、可供發(fā)送器101用于打開數(shù)據(jù)傳送連接的唯一會(huì)話id(402)。前述步驟401和402在接收器102啟動(dòng)第一套接字以建立用于傳送數(shù)據(jù)的會(huì)話。在接收器102發(fā)送的響應(yīng)消息中,接收器102包括發(fā)送器101被允許加入被建立會(huì)話的多個(gè)連接。如果發(fā)送器101嘗試加入多于所提供的多個(gè)連接,則接收器102可拒絕額外的加入請(qǐng)求。另外,響應(yīng)消息可包括被建立會(huì)話的生命周期的長度。在所包括的生命周期到期之后,發(fā)送器101停止并終止所述會(huì)話。如果接收器102忙,則接收器102將嘗試再次創(chuàng)建會(huì)話之前的等待時(shí)間段返回給發(fā)送器101。發(fā)送器101然后基于接收器102給予的時(shí)間來發(fā)送隨后的創(chuàng)建會(huì)話請(qǐng)求。如果發(fā)送器101在規(guī)定的時(shí)間段到期之前發(fā)送隨后的創(chuàng)建會(huì)話請(qǐng)求,則接收器102將拒絕用于創(chuàng)建會(huì)話的請(qǐng)求?!?huì)話被創(chuàng)建,接著數(shù)據(jù)就可從發(fā)送器101被發(fā)送到接收器102 (403),并且數(shù)據(jù)就可從接收器102被發(fā)送到發(fā)送器101 (404)。在發(fā)送器101與接收器102之間發(fā)送的數(shù)據(jù)包括數(shù)據(jù)頭id和將被發(fā)送的若干個(gè)數(shù)據(jù)部分。圖4B是用于解釋根據(jù)示例性實(shí)施例的發(fā)送器與接收器之間的次要連接的建立的發(fā)送器和接收器的示圖。在圖4B中,在給定的被建立的會(huì)話期間,如以上在圖4A中所描述的,發(fā)送器101可通過下述方式加入現(xiàn)存的數(shù)據(jù)傳送會(huì)話:發(fā)送用于打開與接收器102的新連接的加入請(qǐng)求,并提供有效的會(huì)話id (405)。如果發(fā)送器101提供有效的會(huì)話id,則接收器102返回包括加入會(huì)話id的響應(yīng)消息(406)。另外,響應(yīng)消息可包括狀態(tài)變化,所述狀態(tài)變化包括當(dāng)前會(huì)話的維持時(shí)間(time-alive)和加入會(huì)話的更新列表。一旦加入會(huì)話被創(chuàng)建,數(shù)據(jù)就可從發(fā)送器101被發(fā)送到接收器102 (407),并且數(shù)據(jù)就可從接收器102被發(fā)送到發(fā)送器101 (408)。在發(fā)送器101與接收器102之間發(fā)送的數(shù)據(jù)包括數(shù)據(jù)頭id和將被發(fā)送的若干個(gè)數(shù)據(jù)部分。在一些情況下,在圖4B的步驟406中,接收器102可發(fā)送拒絕來自發(fā)送器101的加入請(qǐng)求的響應(yīng)消息。接收器102可拒絕加入請(qǐng)求,例如因?yàn)樵撜?qǐng)求超過了圖4A中接收器所提供的允許的連接數(shù)量。在這些情況下,響應(yīng)消息包括當(dāng)前會(huì)話所允許的連接數(shù)量。另夕卜,響應(yīng)消息可包括發(fā)送器101在再次試圖加入會(huì)話之前應(yīng)該等待的時(shí)間段(比如,秒數(shù))。就這一點(diǎn)而言,發(fā)送器101可在接收器102提供的該秒數(shù)過去之后啟動(dòng)新的加入請(qǐng)求。圖5是用于提供根據(jù)示例性實(shí)施例的接收器向發(fā)送器通知增加或減少會(huì)話中的連接數(shù)量的解釋的順序圖。在圖5中,發(fā)送器101將偏移為1、長度為I的數(shù)據(jù)部分發(fā)送到接收器102 (501)。發(fā)送器101然后將偏移為2、長度為2的數(shù)據(jù)部分發(fā)送到接收器102(502),并繼續(xù)發(fā)送具有后續(xù)的偏移和長度的數(shù)據(jù)部分(503)。接收器102然后確定發(fā)送器101是否可啟動(dòng)更多的加入會(huì)話,并將與偏移和長度一起接收的數(shù)據(jù)部分的應(yīng)答與新加入會(huì)話的數(shù)量和會(huì)話id—起發(fā)送到發(fā)送器101(504)。所述應(yīng)答還可包括啟動(dòng)新的加入會(huì)話之前要等待的時(shí)間段。發(fā)送器101然后發(fā)送具有會(huì)話id的加入請(qǐng)求(505),并且一旦會(huì)話被創(chuàng)建,發(fā)送器101就通過新創(chuàng)建的加入會(huì)話來發(fā)送包括偏移和長度的另一數(shù)據(jù)部分(506)。在一些情況下,接收器102可確定關(guān)閉一個(gè)或多個(gè)現(xiàn)存連接。在這些情況下,接收器發(fā)送接收器102已關(guān)閉一個(gè)或多個(gè)連接的應(yīng)答。當(dāng)發(fā)送器101接收到一個(gè)或多個(gè)連接已被接收器102關(guān)閉的應(yīng)答時(shí),發(fā)送器101通過重新分配在剩余的打開連接上發(fā)送的數(shù)據(jù)來對(duì)所述應(yīng)答作出反應(yīng)。圖6是用于提供根據(jù)示例性實(shí)施例的將數(shù)據(jù)從發(fā)送器發(fā)送到接收器的大體解釋的發(fā)送器和接收器的另一示圖。在圖6中,發(fā)送器101包括I/O存儲(chǔ)系統(tǒng),所述I/O存儲(chǔ)系統(tǒng)包括存儲(chǔ)介質(zhì)601 (諸如存儲(chǔ)數(shù)據(jù)的盤)、數(shù)據(jù)緩沖區(qū)讀取器602 (包括數(shù)據(jù)緩沖區(qū)621)、以及用于發(fā)送數(shù)據(jù)的數(shù)據(jù)blob串化器603。發(fā)送器101通過連接604a和605a、通過連接604b和605b、以及通過連接604c和605c與接收器102連接。接收器102包括I/O存儲(chǔ)系統(tǒng),所述I/O存儲(chǔ)系統(tǒng)包括存儲(chǔ)介質(zhì)609 (諸如盤)、數(shù)據(jù)blob解串器608 (包括數(shù)據(jù)緩沖區(qū)622)、以及用于接收發(fā)送的數(shù)據(jù)的數(shù)據(jù)blob解串器文件607。在圖6中,通過使用單獨(dú)的線程來異步地完成源數(shù)據(jù)的實(shí)際讀取,所述單獨(dú)的線程與將由發(fā)送器101發(fā)送的數(shù)據(jù)一起填充在存儲(chǔ)介質(zhì)601中。數(shù)據(jù)被數(shù)據(jù)緩沖區(qū)讀取器602從存儲(chǔ)介質(zhì)601讀取,并被存儲(chǔ)在數(shù)據(jù)緩沖區(qū)621中。每個(gè)發(fā)送器連接604a、604b和604c使下一可用數(shù)據(jù)塊從數(shù)據(jù)緩沖區(qū)621出列。數(shù)據(jù)緩沖區(qū)讀取器602從數(shù)據(jù)緩沖區(qū)621讀取數(shù)據(jù),并且數(shù)據(jù)blob串化器603通過使下一可用數(shù)據(jù)塊出列的特定連接發(fā)送下一可用數(shù)據(jù)塊。發(fā)送的數(shù)據(jù)塊通過接收器連接605a、605b和605c中的對(duì)應(yīng)一個(gè)被接收。數(shù)據(jù)blob解串器文件607從接收器連接605a、605b和605c接收發(fā)送的數(shù)據(jù)塊。數(shù)據(jù)blob解串器608將數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)緩沖區(qū)622中,并通過將數(shù)據(jù)塊放入正確順序中來重新創(chuàng)建原始文件。數(shù)據(jù)blob解串器608然后使用后臺(tái)線程來將數(shù)據(jù)寫到存儲(chǔ)介質(zhì)609。
由于性能原因,數(shù)據(jù)blob解串器608將一些數(shù)據(jù)高速緩存在數(shù)據(jù)緩沖區(qū)622中,以在數(shù)據(jù)按原始排序被放置時(shí)優(yōu)選地將數(shù)據(jù)寫到存儲(chǔ)介質(zhì)609。在一些情況下,當(dāng)在不同的連接上發(fā)送的數(shù)據(jù)的排序變得太過無序時(shí),數(shù)據(jù)blob解串器608將查找輸出文件中的不同位置,并將數(shù)據(jù)寫到存儲(chǔ)介質(zhì)609,以防止處理內(nèi)存被高速緩存的數(shù)據(jù)耗盡。大量數(shù)據(jù)傳送-并行數(shù)據(jù)協(xié)議(MDT-PDP)在這里描述的示例性架構(gòu)中,MDT-PDP傳輸組件充當(dāng)針對(duì)應(yīng)用內(nèi)的Soap連接庫(SCL)子系統(tǒng)的傳輸句柄(handler)。這包括傳送SOAP請(qǐng)求和響應(yīng)。從SCL客戶端和SCL服務(wù)的觀點(diǎn)來講,MDT-PDP傳輸在功能上等同于SCL的缺省的基于HTTP的傳輸。然而,這里提供的公開內(nèi)容不限于前述示例性架構(gòu),并且可實(shí)現(xiàn)任何傳輸協(xié)議,只要實(shí)現(xiàn)權(quán)利要求的特征即可。SOAP連接庫的目的是提供基于SOAP消息的Web服務(wù)的提供者卿,接收器)功能和客戶端功能。提供者功能是提供Web服務(wù)以執(zhí)行特定處理并提供用于訪問的信息的功能。反之,客戶端功能是訪問Web服務(wù)的功能。使用SOAP連接庫的Web服務(wù)不僅是客戶端使用SOAP連接庫,而且它還使得能夠?qū)碜允褂肕icrosoft.NET框架和其他Web服務(wù)框架的客戶端的請(qǐng)求進(jìn)行處理。類似地,客戶端功能不僅是Web服務(wù)使用SOAP連接庫,而且它還使得能夠執(zhí)行與使用.NET框架和其他Web服務(wù)框架的Web服務(wù)相關(guān)的請(qǐng)求。在這里描述的示例性架構(gòu)中,MDT-PDP實(shí)現(xiàn)了 SCL內(nèi)定義的傳輸句柄接口。它們是發(fā)送器和接收器中的每一方的PdpTransportReceiver和PdpTransportSender。發(fā)送器一方的PdpTransportSender負(fù)責(zé)通過PDP發(fā)送器與PDP接收器之間的并行連接來建立F1DP發(fā)送器會(huì)話句柄鏈內(nèi)的這些句柄的調(diào)用取決于數(shù)據(jù)的流動(dòng)方向和發(fā)起者。句柄鏈內(nèi)的這些句柄的調(diào)用還與底層PDP層處的數(shù)據(jù)傳送的開始和結(jié)束相關(guān)。圖7至圖12是形成示例性實(shí)施例的架構(gòu)的每個(gè)主要類的類圖。以下結(jié)合圖13至圖20來詳細(xì)地提供關(guān)于每個(gè)主要類之間的具體關(guān)系和交互的描述。圖7是根據(jù)示例性實(shí)施例的針對(duì)傳輸發(fā)送器的類圖。如圖7所示,pdp::PdpTransportClientSender 對(duì)象 703 和 pdp::PdpTransportProviderSender 對(duì)象704 均繼承 pdp::PdpTransportSender 對(duì)象 702。另外,pdp::PdpTransportSender 對(duì)象 702實(shí)現(xiàn)SCL庫的transport:: TransportSender對(duì)象701。圖7的類圖中的send O方法使用MessageContext對(duì)象通過傳輸層發(fā)送消息。當(dāng)該方法對(duì)消息的發(fā)送進(jìn)行處理時(shí),該方法被調(diào)用。圖8是根據(jù)示例性實(shí)施例的針對(duì)傳輸接收器的類圖。如圖8所示,pdp::PdpTransportClientReceiver 對(duì)象和 pdp::PdpTransportProviderReceiver 對(duì)象804 均繼承 pdp::PdpTransportReceiver 對(duì)象 802。另外,pdp::PdpTransportReceiver 對(duì)象802實(shí)現(xiàn)transport:: TransportReceiver對(duì)象801。這個(gè)receive O方法從傳輸層接收消息,并執(zhí)行管理以將接收的消息的各種信息存儲(chǔ)在Message類中以供接收。圖9是根據(jù)示例性實(shí)施例的針對(duì)服務(wù)器分配器的類圖。如圖9所示,pdp::SoapDispatcher 對(duì)象 903 繼承 server::DispatcherBase 對(duì)象 902,并依賴于pdp::DataBlobProviderSoap 對(duì)象 904 和 application::ApplicationInfo 對(duì)象 905。另外,server::DispatcherBase 對(duì)象 902 依賴于 server::Dispatcher 對(duì)象 901。SoapDispatcher類包含維護(hù)信息的AppicationInfo對(duì)象,所述信息諸如當(dāng)用戶用Soap連接庫創(chuàng)建服務(wù)或客戶端時(shí)的操作信息和客戶端信息。因此,SoapDispatcher可通過ApplicationInfo對(duì)象與SCL通信,并且SCL將對(duì)于不同類型的分配句柄的DispatcherHandler (未示出)包含在DispatchHandlerChain 對(duì)象(未不出)中。圖10是根據(jù)示例性實(shí)施例的針對(duì)數(shù)據(jù)源的類圖。如圖10所示,pdp::MdtDataSource 對(duì)象 1002 繼承 dataholder::DataSource 對(duì)象 1003,并與 transport::DataBlobDeserializerFiIe對(duì)象1001相關(guān)聯(lián)。DataSource對(duì)象包含允許調(diào)用者檢索其中保存有數(shù)據(jù)的inputStream對(duì)象的功能。圖11是根據(jù)示例性實(shí)施例的針對(duì)客戶端交互的類圖。如圖11所示,PdpTransportClientReceiver 對(duì)象 1101 和 PdpTransportClientSender 對(duì)象 1103 中的每一個(gè)依賴于SimpleClient對(duì)象1102。DataSource對(duì)象包含針對(duì)MDT客戶端的客戶端信息。圖12是根據(jù)示例性實(shí)施例的針對(duì)服務(wù)器交互的類圖。如圖12所示,PdpTransportProviderReceiver 對(duì)象 1202 和 PdpTransportProviderSender 對(duì)象 1203 中的每一個(gè)依賴于ServerSession對(duì)象1201。ServerSession定義PDP服務(wù)器的服務(wù)器會(huì)話。圖13A和圖13B是“put”情況下的客戶端一方的順序圖。如圖13A所示,在1301中,SCLClient 對(duì)象從用戶繼承 PUT (〈filename〉)。在 1302 中,:HandlerChain 對(duì)象從SCLClient 對(duì)象繼承 invoke (MessageContext)。在 1303 中,:PdpTransportClientSender從:HandlerChain 對(duì)象繼承 ini t (MessageContext)。 在 1304 和 1305中,:PdpTransportClientSender 對(duì)象與:DataBlobProviderSoap 對(duì)象和:SimpleClient 對(duì)象相關(guān)聯(lián)。在 1306、1307 和 1308 中,:SimpleClient 對(duì)象從:PdpTransportClientSender對(duì)象繼承 setDataBlobPr ovider (DataBlobProvider)、setLocallnetAddresses(inetAdress [])和 setConnectionOptions(PdpConnectionOptions)。 在 1309中,:PdpTransportClientSender 對(duì)象從:HandlerChain 對(duì)象繼承 send (MessageContext)。SCLClient對(duì)象充當(dāng)SOAP客戶端,所述SOAP客戶端利用MDT和PDP協(xié)議通過該定制的傳輸來發(fā)送和接收SOAP消息。SimpleClient對(duì)象是允許發(fā)送器利用PDP協(xié)議通過多個(gè)連接來發(fā)送數(shù)據(jù)的“簡單”組件。此外,對(duì)于“PUT”操作,發(fā)送器將數(shù)據(jù)發(fā)送到接收器(S卩,提供者)。對(duì)于“GET”操作,發(fā)送器從提供者(S卩,接收器)取回?cái)?shù)據(jù)。在1310 中,:SimpleClient 對(duì)象從:PdpTransportClientSender 對(duì)象繼承g(shù)etSessionO:ClientSession。在 1311 中,:SimpleClient 對(duì)象與:ClientSession 對(duì)象相關(guān)聯(lián),并且在 1312 和 1313 中,:ClientSession 對(duì)象與:DataBlobSerializeQueue對(duì)象和=DataBlobDeserializeQueue 對(duì)象相關(guān)聯(lián)。在 1314 中,:ClientSession 對(duì)象從:SimpleClient 對(duì)象繼 7承 startSession(MessageRequest):MessagesResponse。在 1315 中,:ClientSession 對(duì)象與:ClientConnection 對(duì)象相關(guān)聯(lián)。在 1316 和1317 中,:ClientConnection 對(duì)象從它自己繼承 createSession(MessageRequest)和 doRequestO。在 1318 中,:ClientConnection 對(duì)象與:ClientSession 對(duì)象相關(guān)聯(lián)。在1319中,:ClientSession對(duì)象與:SimpleClient對(duì)象相關(guān)聯(lián)。在1320中,:SimpleClient 對(duì)象與=PdpTransportClientSender 對(duì)象相關(guān)聯(lián)。在 1321中,:PdpTransportClientSender 對(duì)象與:DataBlobSerializerSoap 對(duì)象相關(guān)聯(lián)。在1322 中,:DataBlobSerializeQueue 對(duì)象從:PdpTransportClientSender 對(duì)象繼承addDataBlob(DataBlobSerializer)。在 1323 中,:PdpTransportClientSender 對(duì)象從:HandlerChain 對(duì)象繼承 destroy (MessageContext),并且在 1324 中,:ClientSession對(duì)象從:PdpTransportClientSender 對(duì)象繼承 WaitForRequestCompletion O。在 1325 中,:PdpTransportClientReceiver 對(duì)象從:HandlerChain 對(duì)象繼承receive (MessageContext)。應(yīng)該注意的是,DataBlobSerializerSoap 類擴(kuò)展DataBlobSerializer (參見比如下述圖 27),并利用 SCL MessageSerializer 對(duì)象來使MessageContext對(duì)象中的消息串行化。DataBlobSerializer將數(shù)據(jù)blob串化器定義為抽象類,該抽象類也被以下更詳細(xì)描述的DataBlobSerializerNoData和DataBlobSerializerPartStream 擴(kuò)展。在1326 中,=DataBlobSerializerSoap 對(duì)象從:ClientConnection 對(duì)象繼承 serialize (OutputStream)。在 1327 中,:ClientConnection 對(duì)象從它自己繼承 doReponseO。在 1328 中,:ClientSession 對(duì)象從:ClientSession 對(duì)象繼承 setCompletionStatus(SESSION—RESPONSE)。 在 1330 中,:SimpleClient 對(duì)象從=PdpTransportClientReceiver 對(duì)象繼承 read():DataBlobDeserializerD 在 1329中,:ClientSession 對(duì)象從:SimpleClient 對(duì)象繼承 waitForCompletionO。在 1331中,:ClientSession 對(duì)象從:SimpleClient 對(duì)象繼承 getlncominDataBlobs:DataBlobDeserializerQueue0 在 1332 中,=DataBlobDeserializerQueue 對(duì)象從:SimpleClient對(duì)象繼承 getDataBlobs O:DataBlobDeseralizer。在 1333 中,:SimpleClient 對(duì)象與:PdpTransportClientReceiver 相關(guān)聯(lián)。在 1334 中,:PdpTransportClientReceiver 從它自己繼承 deseriliaze (DataBlobDeserializer []MessageContext)。圖14A和圖14B是“put”情況下的提供者一方的順序圖。如圖14A所7j\,:ServerConnection 對(duì)象從它自己繼承 doRequest。在 1402 中,:ServerSession從:ServerConnection 對(duì)象繼 7承 getlncominDataBlobsO =DataBlobDeserializeQueue。在 1403 和 1404 中,:DataBlobDeserializerQueue 對(duì)象和:DataBlobDeserializer對(duì)象從:ServerConnection 對(duì)象繼承 getDataBlob(MessagesHeader):DataBlobDeserializer 和 deserialize(InputStream)。 在 1405 中,:ServerSession 對(duì) 象從:ServerConnection 對(duì)象繼承 setCompletionState(SESSION—REQUEST)。在 1406中,:SoapDispatcher 對(duì)象從:ServerSession 對(duì)象繼承 doWork(ServerSession)。在1414 中,:HandlerChain 從:SoapDispatcher 對(duì)象繼承 invoke (MessageContext)。在 1415 中,:PdpTransportProviderReceiver 從:HandlerChain 對(duì)象繼承 receive (MessageContext)。 在 1407 和 1408 中,:ServerSession 對(duì)象和=DataBlobDeserializerQueue 從:PdpTransportProviderReceiver 對(duì)象繼 7承 getlncominDataBlobs():DataBlobDeserializerQueue 和 getDataBlobsO:DataB1bDeserializer。應(yīng)該注意的是,DataBlobDeserializerFile類實(shí)現(xiàn)基于文件的數(shù)據(jù)blob解串器。DataBlobDeserializerQueue 類實(shí)現(xiàn)數(shù)據(jù) blob 解串器隊(duì)列。DataBlobDeserializerRAF類的實(shí)現(xiàn)是將數(shù)據(jù)部分解串到單個(gè)文件的一種實(shí)現(xiàn)。這個(gè)DataBlobDeserializerRAF實(shí)現(xiàn)使用RandomAccessFile (“RAF”)來寫出數(shù)據(jù)部分。此外,盡管使用內(nèi)存中數(shù)據(jù)部分緩沖區(qū)和后臺(tái)寫線程,但是將輸入流寫到盤和從輸入流進(jìn)行讀取是去耦合的(decoupled)。ServerConnection類包括PDP服務(wù)器和PDP服務(wù)器的會(huì)話信息。調(diào)用者可通過該類創(chuàng)建并啟動(dòng)PDP連接并且接收和發(fā)送消息。在1409 中,:ServerConnection 對(duì)象從它自己繼承 doResponse。在 1416 和1417 中,:PdpTransportProviderReceiver 繼 7承 deserializeSOAP(DataBlobDeserializeerFile,MessageContext)和 deserializeAttachment(DataBlobDeserializerRAFj MessageContext) o 在 1418 中,:PdpTransportProviderReceiver 對(duì)象從:HandlerChain 對(duì)象繼承 destroy(MessageContext)。在 1419 和 1420 中,:PdpTransportProviderSender對(duì)象從:HandlerChain 對(duì)象繼承 init(MessageContext)和 send(MessageContext)。在 1421 中,:PdpTransportProviderSender 與:DataBlobSerializerSoap 對(duì)象相關(guān)聯(lián)。在 1410 中,=DataBlobSerializeQueue 從:PdpTransportProviderSender 對(duì)象繼承 addDataBlob (DataBlobSerializer)。 在 1411 中,=DataBlobSerializeQueue從:ServerConnection 對(duì)象繼承 getNextDataBlob(DataBlobSerializer):DataBlobSerializerD 在 1412 中,=DataBlobSerializerSoap 對(duì)象從:ServerConnection 對(duì)象繼承serialize (OutputStream) ο 在 1413 中,:ServerSession 對(duì)象從:ServerConnection 對(duì)象繼承 setCompletionState (SESSION—DONE)。圖15是“get”情況下的客戶端一方的順序圖。如圖15所示,在1501中,SCLClient 對(duì)象從用戶繼承 GET (〈filename〉)。在 1502 中,:HandlerChain 對(duì)象從SCLClient 對(duì)象繼承 Invoke (messagecontext)。在 1503 中,:PdpTransportClientSender對(duì)象從:HandlerChain 對(duì)象繼承 init (MessageContext)。在 1504、1505 和 1506中,:SimpleClient 對(duì)象從:PdpTransportClientSender 對(duì)象繼承 SetDataBlobProvider (DataBlobProvider)、setLocalInetAddress (InetAddress [])和 setConnectionOptions (PdpConnectionOptions)ο 在 1507 中,:PdpTransportClientSender 對(duì)象從:HandlerChain 對(duì)象繼承 send(MessageContext)。在 1508 中,:SimpleClient 對(duì)象從:PdpTransportClientSender 對(duì)象繼承 getSessionO:ClientSession。在 1509中,:PdpTransportClientSender 對(duì)象從它自己繼承 sendSoapMessage (MessageContext,DataBlobSerializeQueue)。在 1510 中,:PdpTransportClientSender 對(duì)象從:HandlerChain對(duì)象繼承 destroy (MessageContext)。在 1511 和 1512 中,:PdpTransportClientReceiver對(duì)象從:HandlerChain 對(duì)象繼承 receive (MessageContext)和 destroy (MessageContext)。圖16是“get”情況下的提供者一方的順序圖。如圖16所示,在1601中,:SoapDispatcher 對(duì)象從:ServerSession 對(duì)象繼承 doWork(ServerSession)。在1602 中,:HandlerChain 對(duì)象從:SoapDispatcher 對(duì)象繼承 invoke (messageContext) 0在 1603 和 1604 中,:PdpTransportProviderReceiver 從:HandlerChain 對(duì)象繼承 receive (MessageContext)和 destroy (MessageContext)。 在 1605和 1606 中,:PdpTransportProviderSender 對(duì)象從:HandlerChain 對(duì)象繼承 init(MessageContext)和 send (MessageContext)。 在 1607中,:PdpTransportProviderSender 從它自己繼承 sendSoapMessage (MessageContextj DataBlobSerializeQueue)。在 1608 中,:PdpTransportProviderSender 對(duì)象從:HandlerChain對(duì)象繼承 destroy (MessageContext)。圖17是用于取消“get”操作的客戶端一方的順序圖。如圖17所示,在1701中,:ClientSession 對(duì)象從:PdpTransportClientSender 對(duì)象繼承 start a newsession() 0 在 1702 中,:ClientConnection 對(duì)象從:ClientSession 對(duì)象繼承 start theconnection (socket thread)。在 1703 中,:MeterInputStream 對(duì)象從:ClientConnection對(duì)象繼承打ead(byte口,int,int):1nt。在 1704 中,:SessionDataMeter 對(duì)象被:MeterInputStream 對(duì)象中的函數(shù) 5^onBytesRead(1ng)實(shí)例化。在 1705中,:SessionDataMeter 對(duì)象將 SessionEvent O 與=PdpTransportClientSender 相關(guān)聯(lián)。在1706 中,《interface》: InTransportEventListener 對(duì)象從:PdpTransportClientSender對(duì)象繼承 handlelnTransportEvent (InTransportEvent) ο 在 1707 中,《interface》:InTransportEventListener 對(duì)象將 throw IOException()與:PdpTransportClientSender對(duì)象相關(guān)聯(lián)。在 1708 中,:ClientSession 對(duì)象從:PdpTransportClientSender 對(duì)象繼7承 terminate (Exception) ο 在 1709 中,:ClientConnection 對(duì)象從:ClientSession 對(duì)象繼承close O ο MeterinputStream對(duì)象通過調(diào)用SessionDataMeter對(duì)象中的函數(shù)onBytesRead(long)來更新通過利用SessionDataMeter對(duì)象接收的數(shù)據(jù)字節(jié)。圖18是用于取消“get”操作的提供者一方的順序圖。如圖18所示,在1801中,:ServerSession 對(duì)象從 SoapDispatcher:eventProcessorThread 繼承 Start a newserversession O。在 1802 中,:ServerConnection 對(duì)象從:ServerSession 對(duì)象繼承start a connection socket()。在 1803 中,:MeterOutputStream 從:ServerConnection對(duì)象繼承 *write (byte [],int,int)。 在 1804 中,:SessionDataMeter 對(duì)象從:MeterOutputStream對(duì)象繼承 ^onByteWrite (long)。在 1805 中,:SessionDataMeter 將waitForEvent ():SessionEvent 與 SoapDispatcher:eventProcessorThread 對(duì)象相關(guān)聯(lián)。在 1806 中,<<interace>>: OutTransportEventListener 對(duì)象從 SoapDispatcher: eventProcessorThread 對(duì)象繼承 handleOutTransportEcent (OutTransportEvent)。在 1807 中,<〈interface>>:OutTransportEventListener 對(duì)象與 SoapDispatcher: eventProcessorThread 對(duì)象相關(guān)聯(lián)。在 1808 中,:ServerSession 對(duì)象從 SoapDispatcher: eventProcessorThread 繼承 terminate (Exception)。在 1809 中,:ServerConnection 對(duì)象從:ServerSession對(duì)象繼承close O ο圖19是用于取消“put”操作的客戶端一方的順序圖。如圖19所不,:MeterOutputStream 對(duì)象從:ClientConnection 對(duì)象繼承 write (byte 口,int, int)。在 1902 中,:SessionDataMeter 對(duì)象繼承 onBytesWrite (long)。 在 1903中,=SessionDataMeter 對(duì)象從=PdpTransportClientSender 對(duì)象繼承waitForEventO:SessionEventο 在 1904 中,《interface》:OutTransportEventListener 對(duì)象從:PdpTransportClientSender 對(duì)象繼 7承 handleOutTransportEvent(OutTransportEvent) ο 在 1905 中,《interface》:OutTransportEventListener 對(duì)象將 throwIOExceptionO 與:PdpTransportClientSender 對(duì)象相關(guān)聯(lián)。在 1906 中,:ClientSession 對(duì)象從=PdpTransportClientSender 對(duì)象繼承terminate (Exception) ο 在 1907 中,:ClientConnection 對(duì)象從:ClientSession 對(duì)象繼承 close O ο圖20是用于取消“put”操作的提供者一方的順序圖。如圖20所不,:MeterInputStream 對(duì)象從:ServerConnection 對(duì)象繼 7承 read (byte 口,int, int)。在 2002 中,:SessionDataMeter 對(duì)象繼承 onBytesRead (long)。 在 2003中,:SessionDataMeter 對(duì)象從 SoapDispatcher:eventProcessorThread 對(duì)象繼承waitForEventO:SessionEvent0 在 2004 中,〈〈interface》:InTransportEventListener 對(duì)象從 SoapDispatcher:eventProcessorThread 對(duì)象繼 7承 handleInTransportEvent (InTransportEvent) ο 在 2005 中,〈〈interface》:InTransportEventListener 對(duì)象將 throw IOException ()與 SoapDispatcher: eventProcessorThread 對(duì)象相關(guān)聯(lián)。在2006 中,:ServerSession 對(duì)象從 SoapDispatcher:eventProcessorThread 對(duì)象繼承terminate (Exception) ο 在 2007 中,:ServerConnection 對(duì)象從:ServerSession 對(duì)象繼承 close O。圖21是圖1的接收器102的I/O存儲(chǔ)系統(tǒng)中的寫操作的代表性示圖。通常,在并行連接數(shù)據(jù)傳送系統(tǒng)中,接收器的I/o存儲(chǔ)系統(tǒng)可以是大量數(shù)據(jù)傳送的瓶頸,更具體地講,I/o存儲(chǔ)系統(tǒng)中所包括的盤可以是大量數(shù)據(jù)傳送的瓶頸。就這一點(diǎn)而言,當(dāng)文件被劃分為小片段或小塊并通過分離的連接被傳遞時(shí),數(shù)據(jù)可能不能按順序到達(dá)接收器,尤其是當(dāng)連接的數(shù)量增加時(shí)。如果接收器超時(shí)等待下一連續(xù)數(shù)據(jù)塊到達(dá),則在將數(shù)據(jù)寫到盤之前,接收器的數(shù)據(jù)緩沖區(qū)可能變滿。如果接收器的數(shù)據(jù)緩沖區(qū)變滿,則接收器的I/o存儲(chǔ)系統(tǒng)可能被迫對(duì)亂序數(shù)據(jù)進(jìn)行盤寫入,這可能需要額外的查找操作。如果接收器的I/o存儲(chǔ)系統(tǒng)是對(duì)于數(shù)據(jù)傳送的瓶頸,則執(zhí)行額外的查找操作將進(jìn)一步增加傳送數(shù)據(jù)花費(fèi)的時(shí)間。另外,由于缺少應(yīng)答(即,對(duì)于由于接收器緩沖區(qū)滿而丟失的數(shù)據(jù)的應(yīng)答),前述可能還觸發(fā)從發(fā)送器重發(fā)數(shù)據(jù)的事件,從而為數(shù)據(jù)傳送增加進(jìn)一步的延遲。在這種情況下,接收器可停止接受新的連接請(qǐng)求,并且還可減少現(xiàn)存的連接數(shù)量,以可能避免滿緩沖區(qū)狀況,這繼而可進(jìn)一步避免高成本的查找操作。當(dāng)通過多個(gè)連接發(fā)送數(shù)據(jù)時(shí),多對(duì)一關(guān)系存在于發(fā)送器101和接收器102之間的連接與輸出文件之間。也就是說,在多個(gè)并發(fā)連接中傳送的數(shù)據(jù)被匯集到單個(gè)文件中。在接收器接收數(shù)據(jù)的每個(gè)連接內(nèi),啟動(dòng)從與所述單個(gè)文件相關(guān)聯(lián)的入站(inbound)連接讀取所有數(shù)據(jù)塊的線程。傳送同一文件的塊的N個(gè)并行連接全都對(duì)如圖6所示的同一數(shù)據(jù)blob解串器文件607調(diào)用解串方法。(圖6的)數(shù)據(jù)blob解串器的任務(wù)于是是,從所有N個(gè)連接讀取與所述文件相關(guān)聯(lián)的所有數(shù)據(jù)塊,并以有效的方式將所述數(shù)據(jù)傳送到圖6的存儲(chǔ)介質(zhì)609。如圖21所示,DataffriteQueue2101將數(shù)據(jù)存儲(chǔ)為橢圓形所表示的DataffriteObject的形式。在圖21中,寫線程2102將DataffriteObject寫到文件。標(biāo)號(hào)2103表示文件的開頭。而且,已經(jīng)被寫到文件的數(shù)據(jù)被表示為標(biāo)號(hào)2105。區(qū)域2106表示在其中數(shù)據(jù)已被接收、但是還未被寫到文件的區(qū)域。區(qū)域2107表示在其中數(shù)據(jù)還未被接收的區(qū)域。DataWriteQueue是線程安全的阻止隊(duì)列實(shí)現(xiàn)。實(shí)例監(jiān)視器用作remove O方法和insert ()方法的同步鎖。它們從隊(duì)列移除項(xiàng)目。removeDataWriteOb jectWithOffsetO方法可被用于移除從特定偏移開始的變化。該方法將阻止,直到所需的數(shù)據(jù)區(qū)塊可得。DataffriteObject對(duì)象將內(nèi)存緩沖區(qū)中的數(shù)據(jù)存儲(chǔ)在LinkList對(duì)象中以鏈接該數(shù)據(jù),并且它還記錄數(shù)據(jù)偏移和長度信息。在圖21中,當(dāng)前文件位置可供寫線程2102用于將數(shù)據(jù)寫到文件。然而,可能的是,對(duì)于當(dāng)前文件位置2105,沒有這樣的DataWriteObject存在于DataWriteQueue2101中。因?yàn)椴煌倪B接被用于從文件的不同區(qū)域傳輸數(shù)據(jù),所以到寫線程2102準(zhǔn)備將文件的特定區(qū)域?qū)懙奖P的時(shí)候,文件的該特定區(qū)域可能還未被接收。這可能表明內(nèi)存緩沖區(qū)沒有大到足以在寫到存儲(chǔ)器之前容納臨時(shí)塊數(shù)據(jù),這繼而意味著查找操作可能被執(zhí)行。這通常意味著,與處理I/O存儲(chǔ)系統(tǒng)相比,從發(fā)送器101到接收器102的數(shù)據(jù)傳送速率更快。因此,可減少加入連接的數(shù)量以避免文件查找操作,以下將結(jié)合圖40來更詳細(xì)地描述這種情況。更具體地講,如果寫線程2102在這種情況下被允許將文件的不同區(qū)域?qū)懙奖P,則寫線程2102將執(zhí)行要被避免的查找操作。另一方面,如果寫線程2102無限期地阻止,從而等待無限量的時(shí)間以使DataWriteObject通過連接之一被提交到隊(duì)列,則也存在低效率的可能性。當(dāng)利用更快的網(wǎng)絡(luò)并且I/O存儲(chǔ)系統(tǒng)的盤是數(shù)據(jù)傳送中的瓶頸時(shí),尤其如此。在這種情況下,使寫線程2102等待地越長,傳送變得效率越低。為了提供高效率的PDP數(shù)據(jù)傳送,使兩件事平衡:(I)頻繁地將數(shù)據(jù)寫到盤,這意味著允許寫線程2102頻繁地保持未被阻止;和(2)避免文件查找操作,這意味著有時(shí)阻止寫線程2102以等待直到從連接之一讀取針對(duì)當(dāng)前文件位置的數(shù)據(jù)。上述平衡在DataWriteQueue2101中執(zhí)行。在針對(duì)當(dāng)前文件位置2104的DataffriteObject不可得時(shí),DataffriteQueue利用例如以下啟發(fā)法(heuristic)(該啟發(fā)法趨向于基本上避免不必要的查找操作,并且還趨向于基本上避免寫線程2102的不必要的阻止):如果DataWriteObject對(duì)于當(dāng)前文件位置不可得:(I)對(duì)于將通過讀線程被添加到DataWriteQueue2101的被請(qǐng)求的DataWriteObject等待直到2秒;(2)如果被請(qǐng)求的DataWriteObject在2秒超時(shí)時(shí)間段內(nèi)變?yōu)榭傻?,貝U返回它;以及(3)如果被請(qǐng)求的DataffriteObject沒有在2秒超時(shí)時(shí)間段內(nèi)變?yōu)榭傻?,則將可得的具有最低絕對(duì)偏移的DataWriteObject返回給寫線程2102。這種啟發(fā)法嘗試使保持寫線程寫到盤與避免文件查找操作相平衡。然而,可能不能完全避免查找操作,并且為了更好的數(shù)據(jù)傳送性能,接收器102可阻止來自發(fā)送器101的加入請(qǐng)求,并請(qǐng)求發(fā)送器101關(guān)閉一個(gè)或多個(gè)次要連接,以下將結(jié)合圖40來更詳細(xì)地描述這種情況。當(dāng)內(nèi)存中存在較少的DataWriteObject (即,表示還未被寫線程2102寫到文件的數(shù)據(jù))時(shí),代表當(dāng)前文件位置2104的DataWriteObject可得是不太可能的。如果寫線程2102在這種情況下被允許將可得的DataWriteObject之一寫到文件,則更可能的是需要在文件上的查找操作。因此,當(dāng)DataWriteQueue2101幾乎為空時(shí),寫線程2102在它試圖移除DataffriteObject時(shí)被阻止,以允許DataWriteQueue2101被連接讀線程填充到最小水平。在不同的情況下,當(dāng)讀線程試圖將DataWriteObject添加到DataWriteQueue2101時(shí),這些讀線程可被阻止。在這種情況下,當(dāng)DataWriteQueue2101填充有非常大量的DataffriteObject 時(shí),接著,試圖將另一 DataWriteObject 添加到 DataWriteQueue2101 的連接讀線程(未示出)將被阻止。這允許寫線程2102將DataWriteObject中的一些寫到盤。在內(nèi)部,DataffriteQueue2101利用 ConsumerProducerThrottle 對(duì)象(未示出)來決定何時(shí)發(fā)生了前述的阻止情況。ConsumerProducerThrottle對(duì)象是定義關(guān)于實(shí)現(xiàn)DataWriteObjectThrottle (未示出)的契約(contract)的接口對(duì)象。DataffriteObjectThrottle允許應(yīng)用配置在將未實(shí)現(xiàn)的數(shù)據(jù)寫到盤存儲(chǔ)器之前將該數(shù)據(jù)高速緩存在內(nèi)存中的內(nèi)存緩沖區(qū)大小,并且它還包含當(dāng)前的和消耗的恢復(fù)緩沖區(qū)信息。當(dāng)寫線程2102 請(qǐng)求從 DataWriteQueue2101 移除 DataWriteObject時(shí),DataWriteQueue 向 ConsumerProducerThrottle 對(duì)象通知該請(qǐng)求。如果DataWriteQueue2101在其中不具有最少數(shù)量的DataWriteObject,則ConsumerProducerThrottle 對(duì)象阻止寫線程 2102。一旦 DataWriteQueue2101 被足夠的DataWriteObject 填充,ConsumerProducerThrottle 就釋放寫線程 2102??商鎿Q地,當(dāng)讀線程請(qǐng)求將新的DataWriteObject添加到DataWriteQueue2101時(shí),DataWriteQueue2101可能已達(dá)到最多數(shù)量的DataWriteObject。在這種情況下,讀線程被阻止,直到寫線程2102具有從DataWriteQueue2101移除DataWriteObject的機(jī)會(huì)。再次,DataWriteQueue2101 利用其 ConsumerProducerThrottle 對(duì)象來決定何時(shí)發(fā)生了前述情況。當(dāng)讀線程將DataWriteObject添加到DataWriteQueue2101時(shí),DataWriteQueue210I 向 ConsumerProducerThrottle 通知 DataWriteObject 正被添力口。如果 ConsumerProductThrottle 決定 DataWriteQueue2101 已達(dá)到其最多數(shù)量的DataWriteObject,則ConsumerProductThrottle阻止讀線程。讀線程保持被阻止,直到隊(duì)列中的DataWriteObject的數(shù)量減少。圖22是如圖21所示的DataWriteQueue2101的代表性示圖。在圖22中,DataWr iteQueue2101 被不為在接收多個(gè) DataWr iteOb ject (例如,DataWriteOb ject220 Ia 至2201d)之后。在這個(gè)例子中,DataWriteOb ject被組織成5個(gè)鏈,這5個(gè)鏈表示文件的5個(gè)鄰接區(qū)域。0&丨3 1';^6013」^(^22013至2201(1表不所述5個(gè)鏈之一。通常,03丨3 1';^6013」^(^2101充當(dāng)N個(gè)讀線程的同步和組織點(diǎn)。為了避免查找操作,DataWriteQueue自動(dòng)地檢測表示文件的鄰接區(qū)域的DataWriteObject的集合。當(dāng)DataWriteQueue2101接收到表示文件的鄰接區(qū)域的多個(gè)DataWriteObject時(shí),無論每個(gè)DataWriteObject來自哪個(gè)連接,DataWriteQueue2101 都在內(nèi)部將這些 DataWriteObject 收集成單個(gè)鏈。DataWriteQueue由此將DataWriteObject存儲(chǔ)為DataWriteObject鏈的無序集合。當(dāng)圖21 的寫線程 2102 從 DataWriteQueue 移除 DataWriteObject 時(shí),寫線程 2102指示當(dāng)前文件位置。為了可能避免文件查找操作,DataWriteQueue2101提供其偏移是當(dāng)前文件位置2104的DataWriteObject。寫線程2102然后可在不執(zhí)行查找操作的情況下寫到當(dāng)前文件位置2104。在內(nèi)部,D`ataWriteQueue2101維護(hù)表示文件的鄰接區(qū)域的M個(gè)DataWriteObject 鏈的收集。DataWriteQueue2101 檢查所述 M 個(gè) DataWriteObject 鏈的起始偏移,并且如果存在其初始偏移與當(dāng)前文件位置匹配的鏈,則返回該整個(gè)鏈。圖23是圖1的接收器102的I/O存儲(chǔ)系統(tǒng)中的寫操作的另一代表性示圖。通常,因?yàn)閿?shù)據(jù)可能不能依次到達(dá),所以多個(gè)連接可將數(shù)據(jù)寫到內(nèi)存緩沖區(qū)以重新組裝數(shù)據(jù)。通過在將數(shù)據(jù)寫到盤的同時(shí)測量I/O存儲(chǔ)系統(tǒng)寫速率,可確定盤是否忙于對(duì)來自其他應(yīng)用和任務(wù)的請(qǐng)求進(jìn)行處理。因此,可適當(dāng)?shù)販p少或增加連接的數(shù)量,將結(jié)合圖40來更詳細(xì)地描述這種情況。如圖23所示,寫線程2102將數(shù)據(jù)寫到存儲(chǔ)介質(zhì)609中的文件(如圖6所示)。寫線程2102的使用將N個(gè)讀線程從文件寫操作去賴合。DataWriteObject通過連接605a至605c被添加,并且被寫線程2102移除。寫線程2102將數(shù)據(jù)寫到存儲(chǔ)介質(zhì)609的速率是I/O存儲(chǔ)系統(tǒng)的被測寫速率。圖24A是用于檢測在圖1中的發(fā)送器101的1/0存儲(chǔ)系統(tǒng)中的數(shù)據(jù)傳送中的瓶頸的順序圖。通常,發(fā)送器101可利用往返時(shí)間(RTT)來找到網(wǎng)絡(luò)性能。所利用的RTT可以是TCP的RTT或者計(jì)算RTT的任何其他專有方法?,F(xiàn)代的TCP實(shí)現(xiàn)通過下述方式來設(shè)法回答網(wǎng)絡(luò)性能的問題:監(jiān)視數(shù)據(jù)包的正常交換,并逐漸產(chǎn)生對(duì)多久為“太久”的估計(jì)。這個(gè)處理被稱為往返時(shí)間(RTT)估計(jì)。RTT估計(jì)是TCP交換中的重要性能參數(shù),尤其是在無限大的傳送中,在所述無限大的傳送中,無論鏈路的質(zhì)量是否良好,大多數(shù)TCP實(shí)現(xiàn)最終都丟棄包并重傳它們。如果RTT估計(jì)太低,則不必要地重傳包;如果RTT估計(jì)太高,則在主機(jī)等待超時(shí)的同時(shí)連接可處于空閑狀態(tài)。當(dāng)發(fā)送器101發(fā)現(xiàn)發(fā)送到接收器102的消息包的RTT時(shí)間花費(fèi)比先前的消息包長時(shí),這可表明網(wǎng)絡(luò)忙并且具有更多的流量。在這種情況下,發(fā)送器101可減少連接的數(shù)量并通知接收器102??商鎿Q地,當(dāng)RTT花費(fèi)較短的時(shí)間段時(shí),發(fā)送器可要求增加連接的數(shù)量。將結(jié)合圖40來更詳細(xì)地描述前述連接數(shù)量的減少和增加。在圖24A中,發(fā)送器101可要求接收器102向發(fā)送器101發(fā)送應(yīng)答。當(dāng)發(fā)送器101檢測到它將不再保存高速緩存的信息的情況時(shí),發(fā)送器101將通知接收器102,并迫使接收器發(fā)送應(yīng)答(ACK)以允許雙方適當(dāng)?shù)厍宄咚倬彺娴男畔⒉⑶斑M(jìn)到新的數(shù)據(jù)部分。在這種情況下,接收器可決定它是否可針對(duì)發(fā)送器101增加連接數(shù)量以利用更多的帶寬。所述應(yīng)答(ACK)是指應(yīng)用層上的應(yīng)答,而非傳輸層(諸如TCP協(xié)議)中的ACK信號(hào)。為此,MDT實(shí)現(xiàn)供接收器作為應(yīng)答(即,這里的ACK)向客戶端通知數(shù)據(jù)已達(dá)到的通信信道??商鎿Q地,接收器否定應(yīng)答(RNA)可被用于實(shí)現(xiàn)前述的高速緩存的清除。特別地,在圖24A中,發(fā)送器101在送出消息之前將數(shù)據(jù)讀取到內(nèi)存緩沖區(qū)中(步驟2401)。在步驟2402至2406中,發(fā)送器101發(fā)送偏移為al、長度為bl的數(shù)據(jù)部分,發(fā)送偏移為a2、長度為b2的數(shù)據(jù)部分,發(fā)送偏移為a3、長度為b3的數(shù)據(jù)部分,并繼續(xù)發(fā)送數(shù)據(jù)部分,直到這些數(shù)據(jù)部分達(dá)到偏移a (n-1)、長度b (n-1),并最終達(dá)到偏移an、長度bn,其中,“η”表示序列中的數(shù)據(jù)部分的數(shù)量。在步驟2407中,發(fā)送器101請(qǐng)求接收器發(fā)送包括所識(shí)別的數(shù)據(jù)部分的列表的ACK。接收器102使它跟蹤的數(shù)據(jù)包的值的偏移和長度向前移動(dòng),并將這些數(shù)據(jù)包寫到存儲(chǔ)器。在步驟2408中,接收器102發(fā)送被請(qǐng)求的ACK,發(fā)送器101清除高速緩存在內(nèi)存緩沖區(qū)中的數(shù)據(jù)。圖24Β是圖1中的發(fā)送器101的I/O存儲(chǔ)系統(tǒng)中的讀操作的代表性示圖。在圖24Β中,數(shù)據(jù)緩沖區(qū)讀取器2411在獨(dú)立的線程中從存儲(chǔ)介質(zhì)(即,盤)601讀取數(shù)據(jù)區(qū)塊。數(shù)據(jù)緩沖區(qū)讀取器2411使用包括“Free”部分和“Full”部分的雙隊(duì)列機(jī)制。數(shù)據(jù)緩沖區(qū)讀取器2411將數(shù)據(jù)緩沖區(qū)部分加載到內(nèi)存緩沖區(qū)2412的“Full”側(cè)中。數(shù)據(jù)緩沖區(qū)讀取器2411管理加載且循環(huán)的數(shù)據(jù)緩沖區(qū)部分列表,并以同步的方式提供對(duì)加載的數(shù)據(jù)緩沖區(qū)部分的訪問。另外,數(shù)據(jù)緩沖區(qū)部分提供從網(wǎng)絡(luò)讀取它們的內(nèi)容和將它們的內(nèi)容寫到網(wǎng)絡(luò)的能力。DataBlobSerializerPartStream2421a>242Ib 和 2421c 從數(shù)據(jù)緩沖區(qū)讀取器2411檢索加載的數(shù)據(jù)部分,并通過網(wǎng)絡(luò)依次發(fā)送這些數(shù)據(jù)部分。DataBlobSerializerPartStream針對(duì)給定的輸入流或數(shù)據(jù)緩沖區(qū)讀取器擴(kuò)展DataBlobSerializer,以使數(shù)據(jù)與基于PDP協(xié)議連接的數(shù)據(jù)串行化。DataBlobSerializerPartStream2421a、2421b和2421c也循環(huán)利用的數(shù)據(jù)部分。連接604a、604b和604c將端對(duì)端連接套接字提供給遠(yuǎn)程主機(jī),并使用DataBlobSerializerPartStream對(duì)象2421a、2421b和2421c來將數(shù)據(jù)發(fā)送到遠(yuǎn)程主機(jī)。連接604a、604b和604c與本地主機(jī)上的其他連接實(shí)例并行地工作。
圖24B中所示的復(fù)雜的雙隊(duì)列機(jī)制提供以下高效率構(gòu)思:(I)從盤異步地讀取數(shù)據(jù),從而在數(shù)據(jù)讀取和數(shù)據(jù)發(fā)送中實(shí)現(xiàn)時(shí)序重疊;(2)提供對(duì)加載的數(shù)據(jù)緩沖區(qū)部分的列表的同步訪問的能力,該能力使得可同時(shí)運(yùn)行連接線程以通過多個(gè)套接字并行地發(fā)送數(shù)據(jù);以及(3)重復(fù)使用數(shù)據(jù)緩沖區(qū)部分的能力,從而基本上避免不必要的堆內(nèi)存分配和垃圾收集。
當(dāng)數(shù)據(jù)緩沖區(qū)讀取器2411從存儲(chǔ)介質(zhì)(B卩,盤)601讀取數(shù)據(jù)比網(wǎng)絡(luò)可發(fā)送數(shù)據(jù)快、并且內(nèi)存緩沖區(qū)達(dá)到其極限(所述極限適用于許多客戶端-服務(wù)器應(yīng)用系統(tǒng))時(shí),客戶端將停止將數(shù)據(jù)讀取到內(nèi)存緩沖區(qū)中,直到內(nèi)存可用。這導(dǎo)致在其中從盤讀取數(shù)據(jù)和網(wǎng)絡(luò)上發(fā)送數(shù)據(jù)不重疊的時(shí)間跨度,從而導(dǎo)致數(shù)據(jù)在系統(tǒng)上的非規(guī)范化的流動(dòng)。這至少對(duì)于較大數(shù)據(jù)集合降低了數(shù)據(jù)的凈吞吐量。然而,一旦檢測到發(fā)送器的內(nèi)存緩沖區(qū)頻繁地變滿(這識(shí)別網(wǎng)絡(luò)是數(shù)據(jù)傳送的瓶頸),就可通過下述方式來采取校正動(dòng)作:當(dāng)帶寬低時(shí),減少連接的數(shù)量以減輕數(shù)據(jù)對(duì)網(wǎng)絡(luò)的堵塞,并且基本上同時(shí)地,引入延時(shí)。基本上與減少連接的數(shù)量同時(shí)地,也在從存儲(chǔ)介質(zhì)(即,盤)讀取數(shù)據(jù)中引入延遲,以實(shí)現(xiàn)發(fā)送數(shù)據(jù)的適當(dāng)規(guī)范化的流動(dòng)。以下將結(jié)合圖40來更詳細(xì)地描述前述的檢測和校正動(dòng)作。圖25至圖28是針對(duì)形成示例性實(shí)施例的架構(gòu)的核心的每個(gè)主要類的類圖。以下結(jié)合圖29至圖39來詳細(xì)地提供關(guān)于每個(gè)主要類之間的具體關(guān)系和交互的描述。圖25是根據(jù)示例性實(shí)施例的針對(duì)服務(wù)器的類圖。如圖25所不,server:: ServerSession 對(duì)象 2501 與 server: !Dispatcher 對(duì)象 2502、server::ServerConnection 對(duì)象 2503 和 server::Server 對(duì)象 2504 相關(guān)聯(lián)。另夕卜,server::ServerConnection 對(duì)象 2503 與 server::ServerSession 對(duì)象 2501和 server::Server 對(duì)象 2504 相關(guān)聯(lián)。而且,server::Server 對(duì)象 2504 與server:: ServerSession 對(duì)象 2501 和 server::Dispatcher 對(duì)象 2502 相關(guān)聯(lián)。應(yīng)該注意的是,該圖中所指定的類被MDT應(yīng)用使用來通過SOAP連接庫(即,SCL)創(chuàng)建PDP協(xié)議服務(wù)器以接受PDP協(xié)議客戶端連接請(qǐng)求并維護(hù)服務(wù)器會(huì)話。Server對(duì)象實(shí)現(xiàn)PDP服務(wù)器,創(chuàng)建并啟動(dòng)PDP服務(wù)器的實(shí)例以監(jiān)聽特定地址和端口,并且構(gòu)建并維護(hù)服務(wù)器連接部分和加入會(huì)話。調(diào)用者也可從這個(gè)類檢索會(huì)話id。圖26是根據(jù)示例性實(shí)施例的針對(duì)客戶端的類圖。如圖26所示,ClientConnection對(duì)象2603和SimpleClient對(duì)象2602中的每一個(gè)與ClientSession對(duì)象2601相關(guān)聯(lián)。這些類被MDT應(yīng)用使用來通過Soap連接庫創(chuàng)建PDP協(xié)議以連接到PDP協(xié)議服務(wù)器連接并維護(hù)客戶端會(huì)話。圖27是根據(jù)示例性實(shí)施例的針對(duì)數(shù)據(jù)串化器的類圖。如圖27所示,DataBlobItem對(duì)象 2703 與 DataBlobSerializer 對(duì)象 2701 相關(guān)聯(lián)。另外,DataBlobSerializerPartStream對(duì)象 2702 和 DataBlobSerializerNoData 對(duì)象 2704 中的每一個(gè)與 DataBlobSerializer 對(duì)象 2701 相關(guān)聯(lián)。DataBlobSerializerNoData 和 DataBlobSerializerPartStream 都擴(kuò)展DataBlobSerializer對(duì)象。并且,DataBlobSerializerNoData提供不包含任何數(shù)據(jù)的串行化的數(shù)據(jù)blob。圖28是根據(jù)示例性實(shí)施例的針對(duì)數(shù)據(jù)解串器的類圖。如圖28所示,DataBlobDeserializerFile 對(duì)象 2803 和 DataBlobDeserializerRAF 對(duì)象 2802 中的每一個(gè)繼承 DataBlobDeserializer 對(duì)象 2801。另外,DataBlobDeserializerRAF 對(duì)象 2802與 DataWriteQueue 對(duì)象 2804 相關(guān)聯(lián)。DataBlobDeserializer 定義數(shù)據(jù) blob 解串器和DataBlobDeserializerFiIeλ DataBlobDeserializerRAF, DataBlobSerializerQueue 擴(kuò)展這個(gè)對(duì)象,并利用SCL MessageSerializer對(duì)象來對(duì)MessageContext對(duì)象中的消息進(jìn)行解串O圖29是用于在客戶端建立會(huì)話的順序圖。如圖29所示,在2901中,client::ClientSession 對(duì)象從開發(fā)工具(Developer)繼承 startSession O。在 2902中,<<interface>>:PdpClientSocketFactory 對(duì)象從 client::ClientSession 對(duì)象繼承create (UrlEx): Socket。在 2903 中,〈〈static〉〉: Request 對(duì)象從:ClientConnection對(duì)象繼承 write (OutputStream)。 在 2904 中,〈〈static〉〉: Response 對(duì)象從:ClientConnection 對(duì)象繼承 read (InputStream)。在 2905 中,:ClientConnection 對(duì)象從 client::ClientSession 對(duì)象繼 7承 getResponse O:Messages.Response。Message.Response是Message類(未示出)的內(nèi)部類,并定義PDP響應(yīng)消息。Message類包含用于F1DP通信的所有傳輸消息。通過該類,調(diào)用者可從輸入流得到下一 PDP消息,并定義基本PDP消肩、O在2906 中,client::ClientSession對(duì)象從開發(fā)工具繼承 joinSession ()。在 2907中,<<interface>>:PdpClientSocketFactory 對(duì)象從 client::ClientSession 對(duì)象繼承create (UrlEx): Socket。在 2908 中,〈〈static〉〉: Join對(duì)象從:ClientConnection對(duì)象接收write (OutputStream)。在 2909 中,〈〈static〉〉: Response 對(duì)象從:ClientConnection 對(duì)象繼承read(InputStream)。在 2910 中,:ClientConnection對(duì)象從 client::ClientSession對(duì)象繼承 getResponse O:Message.Response。在 2911 中,client::ClientSession 對(duì)象從開發(fā)工具繼承waitForCompletionO。在2912中,:ClientConnection從它自己繼承 doRequestO。在 2913 中,:ClientConnection 將 setCompletionState (REQUEST)與client::ClientSession 相關(guān)聯(lián)。在2914 中,:ClientConnection 對(duì)象從它自己繼承 doRequest。在 2915中,:ClientConnection 將 setCom`pletionState (REQUEST)與 client::ClientSession相關(guān)聯(lián)。在2916中,:ClientConnection從它自己繼承doResponseO。在2917 中,:ClientConnection 對(duì)象將 setCompletionState (RESPONSE)與client::ClientSession對(duì)象相關(guān)聯(lián)。在2918中,:ClientConnection對(duì)象從它自己繼承doResponse O。在 2919 中,:ClientConnection 對(duì)象關(guān)聯(lián) setCompletionState (RESPONSE)。在 2920 中,:ClientConnection對(duì)象從它自己繼承 close O。在 2921 中,:ClientConnection對(duì)象從它自己繼承close O。圖30是用于提供根據(jù)示例性實(shí)施例的在發(fā)送器(例如,圖1的發(fā)送器101)建立開始會(huì)話的描述的流程圖。在步驟3001中,開始會(huì)話的建立開始。在步驟3002中,在發(fā)送器創(chuàng)建用于建立開始會(huì)話的套接字。在步驟3003中,發(fā)送器將用于建立開始會(huì)話的請(qǐng)求消息發(fā)送到接收器(例如,圖1的接收器102)。發(fā)送器然后讀取從接收器發(fā)送到發(fā)送器的響應(yīng)消息(步驟3004)。在步驟3005中,確定響應(yīng)消息是否指示發(fā)送的用于建立開始會(huì)話的請(qǐng)求消息成功。如果該請(qǐng)求不成功,則關(guān)閉在步驟3002中創(chuàng)建的套接字(步驟3006)。如果該請(qǐng)求成功,則創(chuàng)建會(huì)話(步驟3007 ),并執(zhí)行進(jìn)一步的請(qǐng)求(步驟3008 )。圖31是用于提供根據(jù)示例性實(shí)施例的在發(fā)送器(例如,圖1的發(fā)送器101)建立加入會(huì)話的描述的流程圖。在步驟3101中,加入會(huì)話的建立開始。在步驟3102中,在發(fā)送器創(chuàng)建用于建立加入會(huì)話的套接字。在步驟3103中,發(fā)送器將用于建立加入會(huì)話的加入消息發(fā)送到接收器(例如,圖1的接收器102)。發(fā)送器然后讀取從接收器發(fā)送到發(fā)送器的響應(yīng)消息(步驟3104)。在步驟3105中,確定響應(yīng)消息是否指示發(fā)送的用于建立加入會(huì)話的加入消息成功。如果該加入消息不成功,則關(guān)閉在步驟3102中創(chuàng)建的套接字。如果該加入消息成功,則創(chuàng)建加入會(huì)話(步驟3107)。在步驟3108中,對(duì)會(huì)話狀態(tài)進(jìn)行檢查。如果會(huì)話完成,則關(guān)閉套接字(步驟3111)。如果進(jìn)一步的請(qǐng)求被保證,則所述處理前進(jìn)到步驟3109,結(jié)合圖35來詳細(xì)描述這種情況。如果進(jìn)一步的響應(yīng)被保證,則所述處理前進(jìn)到步驟3110,結(jié)合圖36來詳細(xì)描述這種情況。圖32是用于在服務(wù)器建立會(huì)話的順序圖。如圖32所示,在3201中,:Server對(duì)象從開發(fā)工具繼承addDispatcher (String,Dispatcher)。在3202中,:Server對(duì)象從開發(fā)工具繼承 start O ο 在 3203 中,〈〈static〉〉: Request 對(duì)象從:ServerConnection 對(duì)象繼承read(InputStream)。在 3204 中,:ServerConnection 對(duì)象將 createSession(Messages.Request):ServerSession與:Server對(duì)象相關(guān)聯(lián)。應(yīng)該注意的是,這里作為參數(shù)傳遞的Message.Request是Messages類(未示出)的內(nèi)部類,并且它定義PDP請(qǐng)求消息。在3205 中,<〈interface>>:Dispatcher 從:Server 對(duì)象繼7承 onSessionCreate (ServerSession) ο 在 3206 中,<<static>>:Response從:ServerConnection 對(duì)象繼承 write (OutputStream)。在 3207 中,〈〈static〉〉: Join 對(duì)象從:ServerConnection 對(duì)象繼承 read (InputStream)。在 3208 中,:ServerConnection 對(duì)象將 joinSessoin (Messafees.Join): ServerSession 與:Server 對(duì)象相關(guān)聯(lián)。在 3209 中,<<interface>>:Dispatcher 對(duì)象從:Server 對(duì)象繼承 onSessionJoin(ServerSession)。在 3210 中,〈〈static〉〉:Response 對(duì)象從:ServerConnection 對(duì)象繼承write (OutputStream)。在3211 中,:ServerConnection 對(duì)象從它自己繼承 doRequestO。在 3212中,:ServerConnection 將 setCompletionState (REQUEST)與:ServerSession 對(duì)象相關(guān)聯(lián)。在3213中,:ServerConnection從它自己繼承doRequestO。在3214中,:ServerConnection 對(duì) 象 將 setCompletionState(REQUEST)與:ServerSession對(duì)象相關(guān)聯(lián)。在 3215 中,<〈interface>>:Dispatcher 對(duì)象從:ServerSession對(duì)象繼承 doWork(ServerSession)。在 3216 中,:ServerConnection 對(duì)象從它自己繼承doResponseO。在3217中,:ServerConnection對(duì)象從它自己繼承doResponseO。在 3218 中,:ServerSession 對(duì)象從:ServerConnection 對(duì)象繼承setCompletionState (RESPONSE)。在 3219 中,:ServerSession 對(duì)象從:ServerConnection對(duì)象繼承 setCompletionState (RESPONSE)。在 3220 中,〈〈interface〉〉:Dispatcher 對(duì)象從:ServerSession 對(duì)象繼承 onSessionEnd (ServerSession)。在 3221 中,:Server對(duì)象從:ServerSession 對(duì)象繼承 removeSession (ServerSession)。在 3222 和 3223中,:ServerConnection對(duì)象從它們自己繼承close O。圖33是用于提供根據(jù)示例性實(shí)施例的在接收器建立會(huì)話的描述的流程圖。在圖33的步驟3301中,連接的接受開始。在步驟3302中,發(fā)送器發(fā)送的消息被接收器接收,并且接收器讀取消息。在步驟3303中,獲得所述消息的ID。如果所述消息的ID指示該消息是除了請(qǐng)求消息或加入消息之外的其它消息,則接收器將響應(yīng)與錯(cuò)誤消息一起發(fā)送到發(fā)送器(步驟3316),并關(guān)閉利用的套接字(步驟3317)。如果所述消息是請(qǐng)求消息,則確定被請(qǐng)求的連接路徑是否被注冊(3307)。如果所述路徑未被注冊,則接收器將響應(yīng)與錯(cuò)誤消息一起發(fā)送到發(fā)送器(步驟3318),并關(guān)閉利用的套接字(步驟3319)。如果所述路徑被注冊,則創(chuàng)建會(huì)話(步驟3308),并將響應(yīng)與會(huì)話ID消息一起從接收器發(fā)送給到發(fā)送器(步驟3309)。在步驟3303中,如果所述消息是加入消息,則接收器確定被請(qǐng)求的加入會(huì)話是否可用(步驟3304)。如果所述會(huì)話不可用,則接收器將響應(yīng)與錯(cuò)誤消息一起發(fā)送到發(fā)送器(步驟3305),并關(guān)閉利用的套接字(步驟3306)。如果所述會(huì)話可用,則加入所述會(huì)話(步驟3310),并將響應(yīng)與會(huì)話狀態(tài)消息一起從接收器發(fā)送到發(fā)送器(步驟3311)。在步驟3312中,對(duì)會(huì)話狀態(tài)進(jìn)行檢查。如果會(huì)話完成,則關(guān)閉套接字(步驟3315)。如果進(jìn)一步的請(qǐng)求被保證,則所述處理前進(jìn)到步驟3313,結(jié)合圖38來詳細(xì)描述這種情況。如果進(jìn)一步的響應(yīng)被保證,則所述處理前進(jìn)到步驟3314,結(jié)合圖39來詳細(xì)描述這種情況。圖34是針對(duì)客戶端處的數(shù)據(jù)交換的順序圖。如圖34所示,在3401中,transport::DataBlobSerializeQueue 對(duì)象從:ClientConnection 對(duì)象繼承 getNextDataBlob (DataB1bSerializer)=DataBlobSerializer0 在 3402 中,transport::DataBlobSerializeQueue對(duì)象從開發(fā)工具繼承 addDataBlob (DataBlobSerializer)。在 3403 中,:ClientConnection對(duì)象將 serialize (OutputStream)與=DataBlobSerializer 對(duì)象相關(guān)聯(lián)。在 3404 中,transport:: DataBlobSerializeQueue 對(duì)象從:ClientConnection 對(duì)象繼承 getNextDataBlob (DataBlobSerializer):DataBlobSerializerD 在 3405 中,:ClientSession對(duì)象從開發(fā)工具繼承 waitForCompletion O。在 3406 中,:ClientConnection 將 serialize (OutputStream)與=DataBlobSerializer 對(duì)象相關(guān)聯(lián)。在 3407 中,:ClientConnection 對(duì)象將 setCompletionState(REQUEST)與:ClientSession 對(duì)象相關(guān)聯(lián)。在 3408中,:ClientConnection 對(duì)象將 setCompletionState (REQUEST)與:ClientSession 對(duì)象相關(guān)聯(lián)。
在3409 中,transport:=DataBlobSerializerQueue 從:ClientSession 對(duì)象繼承 close O ο 在 3410 中,=DataBlobSerializer 對(duì)象從 transport::DataBlobSeriaIizerQueue 對(duì)象繼承 close O。在 3411 中,transport::DataBlobDeserializerQueue從:ClientConnecion 對(duì)象繼承 getDataBlob (Messages.Header):DataBlobDeserializer。在 3412 中,transport::DataBlobDeserializerQueue 對(duì)象從:ClientConnection對(duì)象繼承 getDataBlob(Messages.Header):DataBlobDeserializer。應(yīng)該注意的是,Message.Header是Messages類(未示出)的內(nèi)部類,并且它定義DATA-HEADER消息。在 3413 和 3415 中,=DataBlobDeserializer 對(duì)象從:ClientConnection 對(duì)象繼7承 deserializer (InputStream)和 deserializer (InputStream)0 在 3414 和 3416中,:ClientConnection 對(duì)象將 setCompletionState (RESPONSE)與:ClientSession 對(duì)象相關(guān)聯(lián)。在3417和3418中,:ClientConnection對(duì)象從它們自己繼承close O。在3419和 3421 中,transport::DataBlobDeserializerQueue 對(duì)象從開發(fā)工具繼承 getDataBlobsO:DataBlobDeserializer 和 dispose O。在 3420 和 3422 中,:DataBlobDeserializer 對(duì)象繼承 getDataO:1nputStream 和 dispose ()。圖35和圖36是用于提供針對(duì)發(fā)送器處的數(shù)據(jù)交換的大致描述的流程圖。在圖35的步驟3501中,發(fā)送數(shù)據(jù)的請(qǐng)求開始。在步驟3502中,發(fā)送器確定是否存在要得到的下一可得串行化數(shù)據(jù)blob。如果存在下一可得的數(shù)據(jù)blob,則發(fā)送器針對(duì)該數(shù)據(jù)blob寫數(shù)據(jù)頭(步驟3503),從數(shù)據(jù)的源讀取該數(shù)據(jù)blob的數(shù)據(jù)部分(步驟3504),并將讀取的數(shù)據(jù)部分寫到創(chuàng)建的套接字(步驟3505)。在步驟3506中,發(fā)送器確定該數(shù)據(jù)部分是否是數(shù)據(jù)blob的最后數(shù)據(jù)部分。如果該數(shù)據(jù)部分不是最后數(shù)據(jù)部分,則發(fā)送器將該數(shù)據(jù)blob的下一數(shù)據(jù)部分寫到創(chuàng)建的套接字(步驟3505)。如果在步驟3506中該數(shù)據(jù)部分是最后數(shù)據(jù)部分,則所述處理返回到步驟3502。如果在步驟3502中確定不存在下一可得的串行化數(shù)據(jù)blob,則所述請(qǐng)求完成(步驟3507 ),并執(zhí)行對(duì)接收數(shù)據(jù)的響應(yīng)(步驟3508 )。在圖36中,在步驟3601中,執(zhí)行對(duì)接收數(shù)據(jù)的響應(yīng)。在步驟3602中,讀取傳入數(shù)據(jù)的數(shù)據(jù)頭。在步驟3603中,發(fā)送器獲得與讀取的數(shù)據(jù)頭相關(guān)聯(lián)的解串的數(shù)據(jù)blob。在步驟3604中,發(fā)送器從創(chuàng)建的套接字讀取數(shù)據(jù)blob的數(shù)據(jù)部分。在步驟3605中,發(fā)送器將讀取的數(shù)據(jù)部分寫到數(shù)據(jù)存儲(chǔ)器。在步驟3606中,發(fā)送器確定該數(shù)據(jù)部分是否是該數(shù)據(jù)blob的最后數(shù)據(jù)部分。如果該數(shù)據(jù)部分被確定為不是最后數(shù)據(jù)部分,則所述處理返回到步驟3605,在步驟3605中,發(fā)送器將下一數(shù)據(jù)部分寫到數(shù)據(jù)存儲(chǔ)器。如果該數(shù)據(jù)部分被確定為最后數(shù)據(jù)部分,則所述處理前進(jìn)到步驟3607。在步驟3607中,發(fā)送器確定該數(shù)據(jù)頭是否是將被接收的數(shù)據(jù)的最后數(shù)據(jù)頭。如果該數(shù)據(jù)頭是最后數(shù)據(jù)頭,則所述響應(yīng)完成(步驟3608X圖37是針對(duì)服務(wù)器處的數(shù)據(jù)交換的順序圖。如圖37所示,在3701和 3702 中,=DataBlobDeserializerQueue 對(duì)象從 ServerConnection 對(duì)象繼承 getDataBlob (Messages.Header):DataB1bDeserializer 在 3703和 3704 中,=DataBlobDeserializer 對(duì)象從:ServerConnection 對(duì)象繼承 deserializer (InputStream) 在 3705 和 3706 中,:ServerSession 對(duì)象從:ServerConnection 對(duì)象繼承 setCompletionState(REQUEST)。在 3707 中,<<interface>>:Dispatcher 對(duì)象從:ServerSession 對(duì)象繼承 doWork(ServerSession)。在 3708 中,=DataBlobDeserializerQueue 從 <〈interface>>:Dispatcher 對(duì)象繼承g(shù)etDataBlobsO =DataBlobDeserializer0 在 3708 中,:DataBlobDeserializerQueue從 <<interface>>:Dispatcher 對(duì)象繼承 getDataBlobsO:DataBlobDeserializer。在 3709 中,:DataBlobDeserializer 對(duì)象從 <<interface>>:Dispatcher 對(duì)象繼承g(shù)etDataO:1nputStream0在3710和3711 中,=DataBlobDeserializerQueue對(duì)象和=DataBlobDeserializer對(duì)象繼承 dispose O。 在 3712 中,=DataBlobSerializerQueue 對(duì)象從<<interface>>:Dispatcher 對(duì)象繼承 addDataBlob(DataBlobSerializer)。在 3713 和3714 中,:DataBlobSerializerQueue 對(duì)象從:ServerConnection 對(duì)象繼承 getNextDataBlob (DataBlobSerializer): DataBlobSerializer0 在 3715 和 3716 中,:DataBlobSerializer對(duì)象從:ServerConnection 對(duì)象繼承 serialize (OutputStream) 0 在 3717 和 3718中,:ServerSession 從:ServerConnection 對(duì)象繼承 setCompletionState (RESPONSE)。在 3719 和 3720 中,:DataBlobSerializerQueue 對(duì)象和:DataBlobSerializer 對(duì)象繼承close () ο圖38和圖39是用于提供針對(duì)接收器處的數(shù)據(jù)交換的大致描述的流程圖。在圖38中,在步驟3801中,執(zhí)行對(duì)接收數(shù)據(jù)的響應(yīng)。在步驟3802中,讀取傳入數(shù)據(jù)的數(shù)據(jù)頭。在步驟3803中,接收器獲得與讀取的數(shù)據(jù)頭相關(guān)聯(lián)的解串的數(shù)據(jù)blob。在步驟3804中,接收器從創(chuàng)建的套接字讀取數(shù)據(jù)blob的數(shù)據(jù)部分。在步驟3805中,接收器將讀取的數(shù)據(jù)部分寫到數(shù)據(jù)存儲(chǔ)器。在步驟3806中,接收器確定該數(shù)據(jù)部分是否是該數(shù)據(jù)blob的最后數(shù)據(jù)部分。如果該數(shù)據(jù)部分被確定為不是最后數(shù)據(jù)部分,則所述處理返回到步驟3805,在步驟3805中,接收器將下一數(shù)據(jù)部分寫到數(shù)據(jù)存儲(chǔ)器。如果該數(shù)據(jù)部分被確定為最后數(shù)據(jù)部分,則所述處理前進(jìn)到步驟3807。在步驟3807中,接收器確定該數(shù)據(jù)頭是否是將被接收的數(shù)據(jù)的最后數(shù)據(jù)頭。如果該數(shù)據(jù)頭是最后數(shù)據(jù)頭,則所述響應(yīng)完成(步驟3808)。在圖39的步驟3901中,發(fā)送數(shù)據(jù)的請(qǐng)求開始。在步驟3902中,接收器確定是否存在要獲得的下一可得的串行化數(shù)據(jù)blob。如果存在下一可得的數(shù)據(jù)blob,則接收器針對(duì)該數(shù)據(jù)blob寫數(shù)據(jù)頭(步驟3903),從數(shù)據(jù)的源讀取該數(shù)據(jù)blob的數(shù)據(jù)部分(步驟3904),并將讀取的數(shù)據(jù)部分寫到創(chuàng)建的套接字(步驟3905)。在步驟3906中,接收器確定該數(shù)據(jù)部分是否是該數(shù)據(jù)blob的最后數(shù)據(jù)部分。如果該數(shù)據(jù)部分不是最后數(shù)據(jù)部分,則接收器將該數(shù)據(jù)blob的下一數(shù)據(jù)部分寫到創(chuàng)建的套接字(步驟3905)。如果在步驟3906中該數(shù)據(jù)部分是最后數(shù)據(jù)部分,則所述處理返回到步驟3902。如果在步驟3902中確定不存在下一可得的串行化數(shù)據(jù)blob,則所述請(qǐng)求完成(步驟3907),并執(zhí)行對(duì)接收數(shù)據(jù)的響應(yīng)(步驟3908)。自動(dòng)調(diào)節(jié)發(fā)送器與接收器之間的連接的數(shù)量圖40是用于提供另一示例性實(shí)施例的詳細(xì)解釋的流程圖。更具體地講,圖40描繪了用于提供關(guān)于如圖1所示的從發(fā)送器101到通過網(wǎng)絡(luò)120與發(fā)送器101連接的接收器102的大量數(shù)據(jù)傳送的示例性實(shí)施例的詳細(xì)解釋的流程圖。如圖40所示,在步驟4001和4002中,通過網(wǎng)絡(luò)120在發(fā)送器101與接收器102之間建立多個(gè)連接。這些連接可以是,例如,并行TCP連接;然而,所述多個(gè)連接不限于TCP連接,并且可利用使用并行連接的其他協(xié)議。在步驟4003中,通過在所述多個(gè)連接上劃分地發(fā)送數(shù)據(jù)來將數(shù)據(jù)從發(fā)送器101發(fā)送到接收器102,以便聚合網(wǎng)絡(luò)120的帶寬的利用。在步驟4004中,接收器102通過所述多個(gè)連接接收劃分的數(shù)據(jù),并且接收器102將劃分的數(shù)據(jù)重組為其原始形式。在步驟4005至4010中,至少基于發(fā)送器101處的1/0存儲(chǔ)系統(tǒng)的性能、接收器102處的I/o存儲(chǔ)系統(tǒng)的性能和網(wǎng)絡(luò)120的性能,基于發(fā)送器101與接收器102之間的連接的數(shù)量來執(zhí)行自動(dòng)調(diào)節(jié)。自動(dòng)調(diào)節(jié)被執(zhí)行以提供發(fā)送器與接收器之間的連接的最佳數(shù)量,從而提供理想且高效率的數(shù)據(jù)吞吐量。更特別地,在步驟4005中,通過圖2所示的自動(dòng)調(diào)節(jié)軟件236來確定發(fā)送器101的1/0存儲(chǔ)系統(tǒng)讀數(shù)據(jù)是否比通過網(wǎng)絡(luò)120送出數(shù)據(jù)快。例如通過下述方式進(jìn)行該確定:將發(fā)送器101的1/0存儲(chǔ)系統(tǒng)把數(shù)據(jù)輸入到發(fā)送器的內(nèi)存緩沖區(qū)中的速率的計(jì)算與從網(wǎng)絡(luò)120從發(fā)送器的內(nèi)存緩沖區(qū)獲取數(shù)據(jù)的速率的計(jì)算相比較。如果在步驟4005中確定發(fā)送器101的1/0存儲(chǔ)系統(tǒng)讀數(shù)據(jù)比通過網(wǎng)絡(luò)120送出數(shù)據(jù)快,則對(duì)發(fā)送器101與接收器102之間的連接的數(shù)量執(zhí)行自動(dòng)調(diào)節(jié),在所述自動(dòng)調(diào)節(jié)中,發(fā)送器101將用于打開新連接的請(qǐng)求發(fā)送到接收器102。如果接收器102返回用于打開新連接的請(qǐng)求成功的響應(yīng),則發(fā)送器101可通過該新連接發(fā)送數(shù)據(jù),以提供系統(tǒng)中的平穩(wěn)數(shù)據(jù)流動(dòng)。當(dāng)發(fā)送用于打開新連接的請(qǐng)求時(shí),發(fā)送器101可請(qǐng)求打開一個(gè)或多個(gè)新連接。然而,如果發(fā)送器101請(qǐng)求打開許多個(gè)新連接,則接收器102可由于若干個(gè)不同原因而拒絕用于打開所有這些新連接的請(qǐng)求,其將在下面被更詳細(xì)地描述。如果在步驟4005中確定發(fā)送器101的I/O存儲(chǔ)系統(tǒng)讀數(shù)據(jù)不比通過網(wǎng)絡(luò)120送出數(shù)據(jù)快,則所述處理前進(jìn)到步驟4006。在步驟4006中,確定發(fā)送器101的I/O系統(tǒng)讀數(shù)據(jù)是否比通過網(wǎng)絡(luò)120送出數(shù)據(jù)慢。如果確定發(fā)送器101的I/O系統(tǒng)讀數(shù)據(jù)比通過網(wǎng)絡(luò)120送出數(shù)據(jù)慢,并且多于一個(gè)的發(fā)送器(例如,圖1的發(fā)送器131和132之一)正將數(shù)據(jù)發(fā)送到接收器102,則發(fā)送器101關(guān)閉所述多個(gè)連接中的現(xiàn)存連接,以對(duì)發(fā)送器101與接收器102之間的連接的數(shù)量進(jìn)行自動(dòng)調(diào)節(jié)。就這一點(diǎn)而言,現(xiàn)存連接的關(guān)閉是次要連接而非主要連接的關(guān)閉。作為前面描述的結(jié)果,發(fā)送器101可基本上防止在接收器102處占用未被發(fā)送器101充分用于發(fā)送數(shù)據(jù)的套接字。通過檢查發(fā)送器的具有低利用率的內(nèi)存緩沖區(qū),例如,當(dāng)內(nèi)存緩沖區(qū)利用率在某一時(shí)間段(比如,30秒)內(nèi)保持低并保持低于總內(nèi)存緩沖區(qū)大小的預(yù)定義閾值(比如,30%)時(shí),則發(fā)送器可推斷發(fā)送器讀數(shù)據(jù)比發(fā)送數(shù)據(jù)慢。同樣地,如果內(nèi)存利用率在一時(shí)間段內(nèi)高并且閾值(諸如內(nèi)存緩沖區(qū)的80%正被使用)在該時(shí)間幀期間被達(dá)到,則發(fā)送器可推斷發(fā)送器101的I/O系統(tǒng)讀數(shù)據(jù)比通過網(wǎng)絡(luò)120送出數(shù)據(jù)快。在步驟4009中,通過自動(dòng)調(diào)節(jié)軟件336來檢測大量數(shù)據(jù)傳送的瓶頸是否存在于接收器102的I/O存儲(chǔ)系統(tǒng)中。如果肯定地檢測到大量數(shù)據(jù)傳送的瓶頸存在于接收器102的I/O存儲(chǔ)系統(tǒng)中,則對(duì)發(fā)送器101與接收器102之間的連接的數(shù)量執(zhí)行自動(dòng)調(diào)節(jié),在所述自動(dòng)調(diào)節(jié)中,接收器102關(guān)閉現(xiàn)存連接(S卩,次要連接)。接收器102可關(guān)閉一個(gè)或多個(gè)現(xiàn)存的次要連接。在發(fā)送器101檢測到發(fā)送器101處的緩沖區(qū)基本上滿的情況下,發(fā)送器101可將用于打開新連接的請(qǐng)求發(fā)送到接收器,或者利用已經(jīng)被創(chuàng)建但是當(dāng)前還未被用于發(fā)送數(shù)據(jù)的連接。當(dāng)發(fā)送器處的緩沖區(qū)基本上滿時(shí)打開新連接具有提供平穩(wěn)的總數(shù)據(jù)傳送的有益效果,這是因?yàn)榭蓽p小從發(fā)送器發(fā)送數(shù)據(jù)時(shí)的延遲或間隙。可替換地,在發(fā)送器檢測到大量數(shù)據(jù)傳送的瓶頸存在于發(fā)送器的I/o存儲(chǔ)系統(tǒng)中的情況下,發(fā)送器101可關(guān)閉現(xiàn)存的次要連接。當(dāng)發(fā)送器101處的緩沖區(qū)基本上空時(shí),肯定地檢測到大量數(shù)據(jù)傳送的瓶頸在發(fā)送器101的I/o存儲(chǔ)系統(tǒng)中。在一些情況下,接收器102的I/O存儲(chǔ)系統(tǒng)包括盤(例如,圖6的盤609)。在這些情況下,當(dāng)對(duì)接收器102的I/O存儲(chǔ)系統(tǒng)執(zhí)行盤的查找操作時(shí),肯定地檢測到大量數(shù)據(jù)傳送的瓶頸在接收器102的I/O存儲(chǔ)系統(tǒng)中。更具體地講,因?yàn)槎鄠€(gè)連接正被使用,所以數(shù)據(jù)可能不能按順序到達(dá)接收器102。如果接收器102在等待下一連續(xù)數(shù)據(jù)塊時(shí)超時(shí)或者填充其內(nèi)存緩沖區(qū),則接收器102的I/O存儲(chǔ)系統(tǒng)可能對(duì)亂序數(shù)據(jù)進(jìn)行盤寫入,對(duì)亂序數(shù)據(jù)進(jìn)行盤寫入稍后可能需要額外的查找操作。這可意味著,數(shù)據(jù)從發(fā)送器101被傳送到接收器102比接收器101的I/O存儲(chǔ)系統(tǒng)將數(shù)據(jù)寫到盤快。因此,瓶頸可能存在于接收器102的I/O存儲(chǔ)系統(tǒng)中。可替換地,在接收器102的I/O系統(tǒng)包括盤的那些情況下,當(dāng)接收器102的I/O存儲(chǔ)系統(tǒng)將數(shù)據(jù)寫到盤比先前的I/o寫速率慢時(shí),肯定地檢測到大量數(shù)據(jù)傳送的瓶頸在接收器102的I/O存儲(chǔ)系統(tǒng)中。先前的I/O寫速率可以基于先前對(duì)多于一個(gè)的寫操作測量的I/O寫速率,或者可以基于先前對(duì)一時(shí)間段的寫操作測量的I/O寫速率,或者可以基于先前測量的寫操作的I/o寫速率的加權(quán)平均值。例如,如果接收器的I/o存儲(chǔ)系統(tǒng)的先前的I/O寫速率為lOMb/s,并且接收器的I/O存儲(chǔ)系統(tǒng)當(dāng)前正以5Mb/s寫數(shù)據(jù),則瓶頸可能存在于接收器的I/O存儲(chǔ)系統(tǒng)中。當(dāng)例如I/O存儲(chǔ)系統(tǒng)正對(duì)其他非MDT應(yīng)用進(jìn)行處理時(shí),接收器的變慢的I/O存儲(chǔ)系統(tǒng)寫速率可能發(fā)生。在步驟4010中,確定接收器102的I/O存儲(chǔ)系統(tǒng)寫數(shù)據(jù)是否比從網(wǎng)絡(luò)120接收數(shù)據(jù)快。可例如通過下述方式進(jìn)行該確定:將接收器102的I/O存儲(chǔ)系統(tǒng)從接收器102的內(nèi)存緩沖區(qū)寫數(shù)據(jù)的速率的計(jì)算與通過網(wǎng)絡(luò)120將數(shù)據(jù)放入接收器102的內(nèi)存緩沖區(qū)中的速率的計(jì)算相比較。如果確定接收器102的I/O存儲(chǔ)系統(tǒng)寫數(shù)據(jù)比從網(wǎng)絡(luò)120接收數(shù)據(jù)快,則接收器102指示或建議發(fā)送器打開新連接(通過如圖5所示的ACK機(jī)制)。在圖40的步驟4010中,如果確定接收器102的I/O存儲(chǔ)系統(tǒng)寫數(shù)據(jù)不比從網(wǎng)絡(luò)102接收數(shù)據(jù)快,則所述處理前進(jìn)到步驟4013。在步驟4013中,接收器102確定將由發(fā)送器101發(fā)送的所有數(shù)據(jù)是否已被接收器102接收。如果所有數(shù)據(jù)已被接收器102接收,則所述處理結(jié)束(步驟4014)。如果并非所有數(shù)據(jù)已被接收器102接收,則所述處理前進(jìn)到步驟 4004。在步驟4007中,發(fā)送器101檢測大量數(shù)據(jù)傳送的瓶頸是否存在于網(wǎng)絡(luò)120中。如果在步驟4007中肯定地檢測到大量數(shù)據(jù)傳送的瓶頸存在于網(wǎng)絡(luò)120中,則發(fā)送器101關(guān)閉發(fā)送器101與接收器102之間的現(xiàn)存連接。在網(wǎng)絡(luò)中的大量數(shù)據(jù)傳送的瓶頸由擁塞引起的情況下,可通過關(guān)閉現(xiàn)存的次要連接來減少網(wǎng)絡(luò)的進(jìn)一步擁塞。在步驟4007中,在當(dāng)前的往返時(shí)間(RTT)比先前的RTT長時(shí),肯定地檢測到大量數(shù)據(jù)傳送的瓶頸在網(wǎng)絡(luò)中。當(dāng)前的RTT和先前的RTT可以基于多于一個(gè)消息包的RTT,或者可以基于RTT的加權(quán)平均值。如果當(dāng)前的RTT大大地長于先前的RTT (比如,+20%),則網(wǎng)絡(luò)可能忙并且具有來自其他發(fā)送器-接收器系統(tǒng)的更多流量。通過在網(wǎng)絡(luò)忙時(shí)關(guān)閉現(xiàn)存連接,可減少由通過繁忙網(wǎng)絡(luò)發(fā)送更多數(shù)據(jù)而引起的任何進(jìn)一步擁塞。在例子中,加權(quán)測量的樣本可能看起來如下:如果存在10個(gè)RTT順序樣本(諸如n0 至n9),則加權(quán)RTT測量如下:第 1:n0、第 2: (η0*0.8+η1*0.2)、第 3:(第 2*0.8+η2*0.2)、第 4 (第 3*0.8+η3*0.2)、...、第 10: (η9*0.8+η9*0.2)。如果在步驟4007中,大量數(shù)據(jù)傳送的瓶頸未被檢測在網(wǎng)絡(luò)120中,則所述處理前進(jìn)到步驟4008。在步驟4008中,確定當(dāng)前的往返時(shí)間(RTT)是否從先前的RTT大幅縮短。當(dāng)前的RTT和先前的RTT可以基于多于一個(gè)消息包的RTT,或者可以基于RTT的加權(quán)平均值。如果在步驟4008中確定當(dāng)前的RTT已從先前的RTT大幅縮短,則發(fā)送器101將用于打開新連接的請(qǐng)求發(fā)送到接收器102??s短RTT表明網(wǎng)絡(luò)的性能正在改進(jìn)。因此,發(fā)送器101將想要打開一個(gè)或多個(gè)新連接來提高數(shù)據(jù)的吞吐量。在一些情況下,發(fā)送器101和接收器102處的緩沖區(qū)大小可根據(jù)網(wǎng)絡(luò)中的瓶頸的檢測或者根據(jù)接收器的I/o存儲(chǔ)系統(tǒng)中的瓶頸的檢測被調(diào)整。具體地講,在這個(gè)示例性實(shí)施例中,發(fā)送器處的緩沖區(qū)的大小可增大以可防止緩沖區(qū)溢出數(shù)據(jù)。借助于前述示例性實(shí)施例,通??商峁┳孕?zhǔn),在所述自校準(zhǔn)中,發(fā)送器和接收器動(dòng)態(tài)地增加和減少連接的數(shù)量,以便通過提供理想的吞吐量來改進(jìn)大數(shù)據(jù)傳送的性能。另夕卜,在大量的發(fā)送器-接收器布置上保持公平性。例如,如果當(dāng)前瓶頸是接收器的系統(tǒng)1/0,使得當(dāng)前數(shù)量的并行連接聚合了多余的網(wǎng)絡(luò)帶寬,則可關(guān)閉這些連接中的一些,以便釋放帶寬來供其他發(fā)送器-接收器系統(tǒng)使用。
在其他示例性實(shí)施例中,存在多個(gè)發(fā)送器,每個(gè)發(fā)送器將多個(gè)大量數(shù)據(jù)傳送中的相應(yīng)一個(gè)大量數(shù)據(jù)傳送發(fā)送到接收器102。例如,如圖1所示,發(fā)送器131和132中的每一個(gè)也可基本上與發(fā)送器101將大量數(shù)據(jù)傳送發(fā)送到接收器102同時(shí)地將大量數(shù)據(jù)傳送發(fā)送到接收器102。在這些示例性實(shí)施例中,當(dāng)通過網(wǎng)絡(luò)120建立發(fā)送器101與接收器102之間的多個(gè)連接時(shí),接收器102基于其他發(fā)送器(例如,發(fā)送器131和132)請(qǐng)求的連接的數(shù)量來設(shè)置發(fā)送器101與接收器102之間可建立的連接的最多數(shù)量。例如,如果接收器102具有所有發(fā)送器可共享的最多20個(gè)連接,并且其他發(fā)送器當(dāng)前正利用這20個(gè)連接中的15個(gè)連接,則接收器102可基于正被所述其他發(fā)送器使用的15個(gè)連接來設(shè)置在其上發(fā)送器101可用于傳送數(shù)據(jù)的最多5個(gè)連接。在一些情況下,當(dāng)通過網(wǎng)絡(luò)120建立發(fā)送器101與接收器102之間的多個(gè)連接時(shí),接收器102基于其他發(fā)送器請(qǐng)求的連接的數(shù)量來設(shè)置在其內(nèi)可建立最多數(shù)量連接的時(shí)間段。另外,接收器102可基于其他發(fā)送器請(qǐng)求的連接的數(shù)量來設(shè)置用于建立可建立的最多數(shù)量連接中的每個(gè)連接的起始時(shí)間。例如,如果接收器102設(shè)置最多3個(gè)連接,則可在主要連接被建立之后的一分鐘建立第一次要連接,并且第一次要連接可持續(xù)4分鐘,以及可在主要連接被建立之后的兩分鐘建立第二次要連接,并且第二次要連接可持續(xù)2分鐘。在一些情況下,作業(yè)隊(duì)列由接收器102中所包括的調(diào)度管理器(即,圖3中的調(diào)度管理器338)維護(hù),與傳入的被請(qǐng)求連接的數(shù)量相比,所述調(diào)度管理器管理所有多個(gè)發(fā)送器之間現(xiàn)存的當(dāng)前連接的數(shù)量。另外,調(diào)度管理器將優(yōu)先級(jí)分配給所述多個(gè)發(fā)送器中的每一個(gè)。就這一點(diǎn)而言,與將較少數(shù)量的連接分配給較低優(yōu)先級(jí)的發(fā)送器相比,調(diào)度管理器將較多數(shù)量的連接分配給較高優(yōu)先級(jí)的發(fā)送器。例如,與具有較小數(shù)據(jù)集合的較低優(yōu)先級(jí)的發(fā)送器相比,較高優(yōu)先級(jí)的發(fā)送器可以是具有較大數(shù)據(jù)集合的發(fā)送器。在這個(gè)例子中,具有較大數(shù)據(jù)集合的較高優(yōu)先級(jí)的發(fā)送器將被分配比具有較小數(shù)據(jù)集合的較低優(yōu)先級(jí)的發(fā)送器多的連接。另外,當(dāng)發(fā)送器的I/O存儲(chǔ)系統(tǒng)讀數(shù)據(jù)比通過網(wǎng)絡(luò)送出數(shù)據(jù)快時(shí),發(fā)送器可將用于打開一個(gè)或多個(gè)連接的請(qǐng)求發(fā)送到接收器。當(dāng)自動(dòng)調(diào)節(jié)連接的數(shù)量時(shí),如果被請(qǐng)求的一個(gè)或多個(gè)連接被調(diào)度管理器確定為可用,則接收器打開所述一個(gè)或多個(gè)連接。而且,在當(dāng)前的往返時(shí)間(RTT)從先前的RTT大幅縮短時(shí),發(fā)送器可將用于打開一個(gè)或多個(gè)連接的請(qǐng)求發(fā)送到接收器。當(dāng)前的RTT和先前的RTT可以基于多于一個(gè)消息包的RTT,或者可以基于RTT的加權(quán)平均值。當(dāng)自動(dòng)調(diào)節(jié)連接的數(shù)量時(shí),如果被請(qǐng)求的一個(gè)或多個(gè)連接被調(diào)度管理器確定為可用,則接收器打開所述一個(gè)或多個(gè)連接。就這一點(diǎn)而言,在調(diào)度管理器設(shè)置的時(shí)間段內(nèi)打開和關(guān)閉連接。調(diào)度管理器設(shè)置的時(shí)間段可以是對(duì)于不同連接中的每一個(gè)不同的時(shí)間段。最后,連接中的每一個(gè)可在不同的起始時(shí)間被打開。當(dāng)多個(gè)請(qǐng)求被接收器102從不同發(fā)送器接收時(shí),每個(gè)發(fā)送器可以用受其處理能力約束的不同傳送速率來發(fā)送數(shù)據(jù)。調(diào)度管理器338可基于發(fā)送器的數(shù)量和它接收的數(shù)據(jù)速率連同文件數(shù)據(jù)大小(該值可提前獲得)來保持公平性和改進(jìn)總系統(tǒng)吞吐量。如果新請(qǐng)求在現(xiàn)存數(shù)據(jù)傳送請(qǐng)求的處理期間被接收,則接收器102可接受后來的請(qǐng)求,并返回對(duì)于第2請(qǐng)求建議的可加入會(huì)話的連接的數(shù)量(連同會(huì)話id —起)。如果接收器在對(duì)數(shù)據(jù)進(jìn)行處理和將數(shù)據(jù)寫到I/O存儲(chǔ)系統(tǒng)的當(dāng)中,則接收器可將建議的連接數(shù)量與等待時(shí)間值一起返回,當(dāng)所述等待時(shí)間值到期時(shí),加入會(huì)話請(qǐng)求將被兌現(xiàn)(honored)。同時(shí),如果接收器知道第一請(qǐng)求中剩下的數(shù)據(jù)量遠(yuǎn)小于第二請(qǐng)求中要傳送的數(shù)據(jù)量,則接收器可減少用于第一請(qǐng)求的連接數(shù)量并增加用于第二請(qǐng)求的允許的連接數(shù)量。并且,如果接收器知道第二請(qǐng)求中剩下的數(shù)據(jù)量遠(yuǎn)小于第一請(qǐng)求中要傳送的數(shù)據(jù)量,則接收器102可減少用于第二請(qǐng)求的連接數(shù)量并增加用于第一請(qǐng)求的允許的連接數(shù)量。調(diào)度管理器338還可對(duì)請(qǐng)求施加優(yōu)先級(jí)(B卩,具有較高優(yōu)先級(jí)的新請(qǐng)求在另一請(qǐng)求的處理期間到達(dá))。這可在消息級(jí)別上進(jìn)行并與應(yīng)用策略相聯(lián)系,或者在傳輸數(shù)據(jù)級(jí)別上進(jìn)行并與將被發(fā)送的數(shù)據(jù)相聯(lián)系。本公開內(nèi)容提供了關(guān)于具體的說明性實(shí)施例的詳細(xì)描述。要理解的是,所附權(quán)利要求的范圍不限于上述實(shí)施例,在不脫離權(quán)利要求的范圍的情況下,相關(guān)領(lǐng)域的技術(shù)人員可進(jìn)行各種改變和修改。本申請(qǐng)要求于2010年8月31日提交的美國申請(qǐng)N0.12/873,305的優(yōu)先權(quán),該申請(qǐng)?zhí)卮送ㄟ^引用并入本文。
權(quán)利要求
1.一種用于從發(fā)送器到通過網(wǎng)絡(luò)與所述發(fā)送器連接的接收器的大量數(shù)據(jù)傳送的方法,所述方法包括: 通過所述網(wǎng)絡(luò)建立所述發(fā)送器與所述接收器之間的多個(gè)連接; 通過在所述多個(gè)連接上劃分地發(fā)送數(shù)據(jù)來將數(shù)據(jù)從所述發(fā)送器發(fā)送到所述接收器,以便聚合所述網(wǎng)絡(luò)的帶寬的利用;和 通過下述方式來自動(dòng)調(diào)節(jié)所述發(fā)送器與所述接收器之間的連接的最佳數(shù)量:當(dāng)檢測到大量數(shù)據(jù)傳送的瓶頸存在于所述接收器的I/o存儲(chǔ)系統(tǒng)中時(shí),關(guān)閉現(xiàn)存連接,并且當(dāng)所述接收器的I/o存儲(chǔ)系統(tǒng)寫數(shù)據(jù)比從所述網(wǎng)絡(luò)接收數(shù)據(jù)快時(shí),打開新連接。
2.根據(jù)權(quán)利要求1所述的方法,其中,所述I/O存儲(chǔ)系統(tǒng)包括盤,并且其中,當(dāng)自動(dòng)調(diào)節(jié)連接的數(shù)量時(shí),當(dāng)在所述接收器的I/o存儲(chǔ)系統(tǒng)上執(zhí)行所述盤的查找操作時(shí),肯定地檢測到大量數(shù)據(jù)傳送的瓶頸在所述接收器的I/o存儲(chǔ)系統(tǒng)中。
3.根據(jù)權(quán)利要求1所述的方法,其中,所述I/O存儲(chǔ)系統(tǒng)包括盤,并且其中,當(dāng)自動(dòng)調(diào)節(jié)連接的數(shù)量時(shí),當(dāng)所述接收器的I/o存儲(chǔ)系統(tǒng)將數(shù)據(jù)寫到盤比先前的I/O寫速率慢時(shí),肯定地檢測到大量數(shù)據(jù)傳送的瓶頸在所述接收器的I/o存儲(chǔ)系統(tǒng)中。
4.根據(jù)權(quán)利要求1所述的方法,其中,自動(dòng)調(diào)節(jié)還包括:在所述發(fā)送器檢測到大量數(shù)據(jù)傳送的瓶頸存在于所述網(wǎng)絡(luò)中的情況下,所述發(fā)送器關(guān)閉所述發(fā)送器與所述接收器之間的現(xiàn)存連接,以便減少所述網(wǎng)絡(luò)的進(jìn)一步擁塞。
5.根據(jù)權(quán)利要求4所述的方法,其中,在當(dāng)前的往返時(shí)間(RTT)比先前的RTT長時(shí),肯定地檢測到大量數(shù)據(jù)傳送的瓶頸在所述網(wǎng)絡(luò)中。
6.根據(jù)權(quán)利要求4所述的方法,還包括根據(jù)瓶頸在所述網(wǎng)絡(luò)中的檢測或者根據(jù)瓶頸在所述接收器的I/O存儲(chǔ)系 統(tǒng)中的檢測來調(diào)整所述發(fā)送器和所述接收器處的緩沖區(qū)大小。
7.根據(jù)權(quán)利要求1所述的方法,其中,在所述發(fā)送器檢測到所述發(fā)送器處的緩沖區(qū)基本上滿的情況下,所述發(fā)送器將用于打開新連接的請(qǐng)求發(fā)送到所述接收器,或者利用已經(jīng)被創(chuàng)建但是當(dāng)前未被用于發(fā)送數(shù)據(jù)的連接。
8.根據(jù)權(quán)利要求1所述的方法,其中,存在多個(gè)發(fā)送器,每個(gè)發(fā)送器將多個(gè)大量數(shù)據(jù)傳送中的相應(yīng)一個(gè)大量數(shù)據(jù)傳送發(fā)送到所述接收器。
9.根據(jù)權(quán)利要求8所述的方法,其中,當(dāng)通過所述網(wǎng)絡(luò)建立所述發(fā)送器與所述接收器之間的多個(gè)連接時(shí),所述接收器基于其他發(fā)送器請(qǐng)求的連接的數(shù)量來設(shè)置能夠在所述發(fā)送器與所述接收器之間建立的連接的最多數(shù)量。
10.根據(jù)權(quán)利要求9所述的方法,其中,所述接收器基于其他發(fā)送器請(qǐng)求的連接的數(shù)量來設(shè)置在其內(nèi)能夠建立最多數(shù)量連接的時(shí)間段。
11.根據(jù)權(quán)利要求9所述的方法,其中,所述接收器基于其他發(fā)送器請(qǐng)求的連接的數(shù)量來設(shè)置用于建立能夠被建立的最多數(shù)量的連接中的每個(gè)連接的起始時(shí)間。
12.根據(jù)權(quán)利要求8所述的方法,還包括維護(hù)作業(yè)隊(duì)列,其中,所述作業(yè)隊(duì)列由調(diào)度管理器維護(hù),并且與傳入的被請(qǐng)求連接的數(shù)量相比,管理所有的所述多個(gè)發(fā)送器之間存在的當(dāng)前連接的數(shù)量。
13.根據(jù)權(quán)利要求12所述的方法,還包括將優(yōu)先級(jí)分配給所述多個(gè)發(fā)送器中的每一個(gè),其中,優(yōu)先級(jí)由所述調(diào)度管理器分配,以便與將較少數(shù)量的連接分配給較低優(yōu)先級(jí)的發(fā)送器相比,將較多數(shù)量的連接分配給較高優(yōu)先級(jí)的發(fā)送器。
14.根據(jù)權(quán)利要求12所述的方法,其中,當(dāng)所述發(fā)送器的I/O存儲(chǔ)系統(tǒng)讀數(shù)據(jù)比通過所述網(wǎng)絡(luò)送出數(shù)據(jù)快時(shí),所述發(fā)送器將用于打開一個(gè)或多個(gè)連接的請(qǐng)求發(fā)送到所述接收器,并且其中,當(dāng)自動(dòng)調(diào)節(jié)連接的數(shù)量時(shí),如果被請(qǐng)求的一個(gè)或多個(gè)連接被所述調(diào)度管理器確定為可用,則所述接收器打開所述一個(gè)或多個(gè)連接。
15.根據(jù)權(quán)利要求1所述的方法,其中,當(dāng)往返時(shí)間(RTT)已從先前的RTT縮短時(shí),所述發(fā)送器將用于打開一個(gè)或多個(gè)連接的請(qǐng)求發(fā)送到所述接收器,并且其中,當(dāng)自動(dòng)調(diào)節(jié)連接的數(shù)量時(shí),如果一個(gè)或多個(gè)連接被調(diào)度管理器確定為可用,則所述接收器打開被請(qǐng)求的一個(gè)或多個(gè)連接。
16.根據(jù)權(quán)利要求12所述的方法,其中,當(dāng)自動(dòng)調(diào)節(jié)連接的數(shù)量時(shí),在所述調(diào)度管理器設(shè)置的時(shí)間段內(nèi)打開和關(guān)閉所述連接。
17.根據(jù)權(quán)利要求16所述的方法,其中,所述調(diào)度管理器設(shè)置的時(shí)間段對(duì)于不同連接中的每一個(gè)是不同的時(shí)間段。
18.根據(jù)權(quán)利要求16所述的方法,其中,所述連接中的每一個(gè)在不同的起始時(shí)間被打 開。
19.一種用于從發(fā)送器到通過網(wǎng)絡(luò)與所述發(fā)送器連接的接收器的大量數(shù)據(jù)傳送的方法,所述方法包括: 通過所述網(wǎng)絡(luò)建立所述發(fā)送器與所述接收器之間的多個(gè)連接; 通過在所述多個(gè)連接上劃分地發(fā)送數(shù)據(jù)來將數(shù)據(jù)從所述發(fā)送器發(fā)送到所述接收器,以便聚合所述網(wǎng)絡(luò)的帶寬的利用;和 通過下述方式來自動(dòng)調(diào)節(jié)所述發(fā)送器與所述接收器之間的連接的數(shù)量:當(dāng)所述發(fā)送器的I/o存儲(chǔ)系統(tǒng)讀數(shù)據(jù)比通過所述網(wǎng)絡(luò)送出數(shù)據(jù)快時(shí),打開新連接,并且當(dāng)所述發(fā)送器的I/o存儲(chǔ)系統(tǒng)讀數(shù)據(jù)比通過所述網(wǎng)絡(luò)送出數(shù)據(jù)慢并且多于一個(gè)的發(fā)送器正將數(shù)據(jù)發(fā)送到所述接收器時(shí),關(guān)閉現(xiàn)存連接。
20.根據(jù)權(quán)利要求19所述的方法,其中,自動(dòng)調(diào)節(jié)還包括:在所述發(fā)送器檢測到大量數(shù)據(jù)傳送的瓶頸存在于所述網(wǎng)絡(luò)中的情況下,關(guān)閉所述發(fā)送器與所述接收器之間的現(xiàn)存連接,以便減少所述網(wǎng)絡(luò)中的進(jìn)一步擁塞。
21.根據(jù)權(quán)利要求20所述的方法,其中,在當(dāng)前的往返時(shí)間(RTT)比先前的RTT長時(shí),肯定地檢測到大量數(shù)據(jù)傳送的瓶頸在所述網(wǎng)絡(luò)中。
22.根據(jù)權(quán)利要求19所述的方法,其中,自動(dòng)調(diào)節(jié)還包括:在所述發(fā)送器檢測到大量數(shù)據(jù)傳送的瓶頸存在于所述發(fā)送器的I/O存儲(chǔ)系統(tǒng)中的情況下,關(guān)閉所述發(fā)送器與所述接收器之間的現(xiàn)存連接,并且其中,當(dāng)所述發(fā)送器處的緩沖區(qū)基本上空時(shí),肯定地檢測到大量數(shù)據(jù)傳送的瓶頸在所述發(fā)送器的I/O存儲(chǔ)系統(tǒng)中。
23.根據(jù)權(quán)利要求19所述的方法,其中,自動(dòng)調(diào)節(jié)還包括:當(dāng)確定往返時(shí)間(RTT)已從先前的RTT縮短時(shí),將用于打開新連接的請(qǐng)求發(fā)送到所述接收器。
24.一種接收器,包括: 計(jì)算機(jī)可讀存儲(chǔ)器,其被構(gòu)造為存儲(chǔ)計(jì)算機(jī)可執(zhí)行處理步驟;和 處理器,其被構(gòu)造為執(zhí)行存儲(chǔ)在所述存儲(chǔ)器中的計(jì)算機(jī)可執(zhí)行處理步驟, 其中,所述存儲(chǔ)器中的處理步驟使所述處理器執(zhí)行從發(fā)送器到通過網(wǎng)絡(luò)與所述發(fā)送器連接的接收器的大量數(shù)據(jù)傳送,并且其中,存儲(chǔ)在所述存儲(chǔ)器中的處理步驟包括執(zhí)行如下的計(jì)算機(jī)可執(zhí)行步驟: 通過所述網(wǎng)絡(luò)建立所述發(fā)送器與所述接收器之間的多個(gè)連接; 通過在所述多個(gè)連接上劃分地發(fā)送數(shù)據(jù)來將數(shù)據(jù)從所述發(fā)送器發(fā)送到所述接收器,以便聚合所述網(wǎng)絡(luò)的帶寬的利用;和 通過下述方式來自動(dòng)調(diào)節(jié)所述發(fā)送器與所述接收器之間的連接的最佳數(shù)量:當(dāng)檢測到大量數(shù)據(jù)傳送的瓶頸存在于所述接收器的I/o存儲(chǔ)系統(tǒng)中時(shí),關(guān)閉現(xiàn)存連接,并且當(dāng)所述接收器的I/o存儲(chǔ)系統(tǒng)寫數(shù)據(jù)比從所述網(wǎng)絡(luò)接收數(shù)據(jù)快時(shí),打開新連接。
25.根據(jù)權(quán)利要求24所述的接收器,其中,所述I/O存儲(chǔ)系統(tǒng)包括盤,并且其中,當(dāng)自動(dòng)調(diào)節(jié)連接的數(shù)量時(shí),當(dāng)在所述接收器的I/o存儲(chǔ)系統(tǒng)上執(zhí)行所述盤的查找操作時(shí),肯定地檢測到大量數(shù)據(jù)傳送的瓶頸在所述接收器的I/o存儲(chǔ)系統(tǒng)中。
26.根據(jù)權(quán)利要求24所述的接收器,其中,所述I/O存儲(chǔ)系統(tǒng)包括盤,并且其中,當(dāng)自動(dòng)調(diào)節(jié)連接的數(shù)量時(shí),當(dāng)所述接收器的I/O存儲(chǔ)系統(tǒng)將數(shù)據(jù)寫到所述盤比先前的I/O寫速率慢時(shí),肯定地檢測到大量數(shù)據(jù)傳送的瓶頸在所述接收器的I/O存儲(chǔ)系統(tǒng)中。
27.根據(jù)權(quán)利要求24所述的接收器,其中,自動(dòng)調(diào)節(jié)還包括:在所述發(fā)送器檢測到大量數(shù)據(jù)傳送的瓶頸存在于所述網(wǎng)絡(luò)中的情況下,所述發(fā)送器關(guān)閉所述發(fā)送器與所述接收器之間的現(xiàn)存連接,以便減少所述網(wǎng)絡(luò)的進(jìn)一步擁塞。
28.根據(jù)權(quán)利要求27所述的接收器,其中,在當(dāng)前的往返時(shí)間(RTT)比先前的RTT長時(shí),肯定地檢測到大量數(shù)據(jù)傳送的瓶頸在所述網(wǎng)絡(luò)中。
29.根據(jù)權(quán)利要求27所述的接收器,其中,存儲(chǔ)在所述存儲(chǔ)器中的所述處理步驟還包括執(zhí)行如下的計(jì)算機(jī)可執(zhí)行步驟: 根據(jù)瓶頸在所述網(wǎng) 絡(luò)中的檢測或者根據(jù)瓶頸在所述接收器的I/O存儲(chǔ)系統(tǒng)中的檢測來調(diào)整所述發(fā)送器和所述接收器處的緩沖區(qū)大小。
30.根據(jù)權(quán)利要求24所述的接收器,其中,在所述發(fā)送器檢測到所述發(fā)送器處的緩沖區(qū)基本上滿的情況下,所述發(fā)送器將用于打開新連接的請(qǐng)求發(fā)送到所述接收器,或者利用已經(jīng)被創(chuàng)建的但是當(dāng)前未被用于發(fā)送數(shù)據(jù)的連接。
31.根據(jù)權(quán)利要求24所述的接收器,其中,存在多個(gè)發(fā)送器,每個(gè)發(fā)送器將多個(gè)大量數(shù)據(jù)傳送中的相應(yīng)一個(gè)大量數(shù)據(jù)傳送發(fā)送到所述接收器。
32.根據(jù)權(quán)利要求31所述的接收器,其中,當(dāng)通過所述網(wǎng)絡(luò)建立所述發(fā)送器與所述接收器之間的多個(gè)連接時(shí),所述接收器基于其他發(fā)送器請(qǐng)求的連接的數(shù)量來設(shè)置能夠在所述發(fā)送器與所述接收器之間建立的連接的最多數(shù)量。
33.根據(jù)權(quán)利要求32所述的接收器,其中,所述接收器基于其他發(fā)送器請(qǐng)求的連接的數(shù)量來設(shè)置在其內(nèi)能夠建立最多數(shù)量連接的時(shí)間段。
34.根據(jù)權(quán)利要求32所述的接收器,其中,所述接收器基于其他發(fā)送器請(qǐng)求的連接的數(shù)量來設(shè)置用于建立能夠被建立的最多數(shù)量的連接中的每個(gè)連接的起始時(shí)間。
35.根據(jù)權(quán)利要求31所述的接收器,其中,存儲(chǔ)在所述存儲(chǔ)器中的處理步驟還包括執(zhí)行如下的計(jì)算機(jī)可執(zhí)行步驟: 維護(hù)作業(yè)隊(duì)列,其中,所述作業(yè)隊(duì)列由調(diào)度管理器維護(hù),并且與傳入的被請(qǐng)求連接的數(shù)量相比,管理所有的所述多個(gè)發(fā)送器之間存在的當(dāng)前連接的數(shù)量。
36.根據(jù)權(quán)利要求35所述的接收器,其中,存儲(chǔ)在所述存儲(chǔ)器中的處理步驟還包括執(zhí)行如下的計(jì)算機(jī)可執(zhí)行步驟: 將優(yōu)先級(jí)分配給所述多個(gè)發(fā)送器中的每一個(gè),其中,優(yōu)先級(jí)由所述調(diào)度管理器分配,以便與將較少數(shù)量的連接分配給較低優(yōu)先級(jí)的發(fā)送器相比,將較多數(shù)量的連接分配給較高優(yōu)先級(jí)的發(fā)送器。
37.根據(jù)權(quán)利要求35所述的接收器,其中,當(dāng)所述發(fā)送器的I/O存儲(chǔ)系統(tǒng)讀數(shù)據(jù)比通過所述網(wǎng)絡(luò)送出數(shù)據(jù)快時(shí),所述發(fā)送器將用于打開一個(gè)或多個(gè)連接的請(qǐng)求發(fā)送到所述接收器,并且其中,當(dāng)自動(dòng)調(diào)節(jié)連接的數(shù)量時(shí),如果被請(qǐng)求的一個(gè)或多個(gè)連接被所述調(diào)度管理器確定為可用,則所述接收器打開所述一個(gè)或多個(gè)連接。
38.根據(jù)權(quán)利要求35所述的接收器,其中,當(dāng)往返時(shí)間(RTT)已從先前的RTT縮短時(shí),所述發(fā)送器將用于打開一個(gè)或多個(gè)連接的請(qǐng)求發(fā)送到所述接收器,并且其中,當(dāng)自動(dòng)調(diào)節(jié)連接的數(shù)量時(shí),如果被請(qǐng)求的一個(gè)或多個(gè)連接被所述調(diào)度管理器確定為可用,則所述接收器打開所述一個(gè)或多個(gè)連接。
39.根據(jù)權(quán)利要求35所述的接收器,其中,當(dāng)自動(dòng)調(diào)節(jié)連接的數(shù)量時(shí),在所述調(diào)度管理器設(shè)置的時(shí)間段內(nèi)打開和關(guān)閉所述連接。
40.根據(jù)權(quán)利要求39所述的接收器,其中,所述調(diào)度管理器設(shè)置的時(shí)間段對(duì)于不同連接中的每一個(gè)是不同的時(shí)間段。
41.根據(jù)權(quán)利要求39所述的接收器,其中,所述連接中的每一個(gè)在不同的起始時(shí)間被打開。
42.一種發(fā)送器,包括: 計(jì)算機(jī)可讀存儲(chǔ)器,其被構(gòu)造為存儲(chǔ)計(jì)算機(jī)可執(zhí)行處理步驟;和 處理器,其被構(gòu)造為執(zhí)行存儲(chǔ)在所述存儲(chǔ)器中的計(jì)算機(jī)可執(zhí)行處理步驟, 其中,所述存儲(chǔ)器中的處理步驟使所述處理器執(zhí)行從發(fā)送器到通過網(wǎng)絡(luò)與所述發(fā)送器連接的接收器的大量數(shù)據(jù)傳送,并且其中,存儲(chǔ)在所述存儲(chǔ)器中的處理步驟包括執(zhí)行如下的計(jì)算機(jī)可執(zhí)行步驟: 通過所述網(wǎng)絡(luò)建立所述發(fā)送器與所述接收器之間的多個(gè)連接; 通過在所述多個(gè)連接上劃分地發(fā)送數(shù)據(jù)來將數(shù)據(jù)從所述發(fā)送器發(fā)送到所述接收器,以便聚合所述網(wǎng)絡(luò)的帶寬的利用;和 通過下述方式來自動(dòng)調(diào)節(jié)所述發(fā)送器與所述接收器之間的連接的最佳數(shù)量:當(dāng)所述發(fā)送器的I/O存儲(chǔ)系統(tǒng)讀數(shù)據(jù)比通過所述網(wǎng)絡(luò)送出數(shù)據(jù)快時(shí),打開新連接,并且當(dāng)所述發(fā)送器的I/O存儲(chǔ)系統(tǒng)讀數(shù)據(jù)比通過所述網(wǎng)絡(luò)送出數(shù)據(jù)慢并且多于一個(gè)的發(fā)送器正將數(shù)據(jù)發(fā)送到所述接收器時(shí),關(guān)閉現(xiàn)存連接。
43.根據(jù)權(quán)利要求42所述的發(fā)送器,其中,自動(dòng)調(diào)節(jié)還包括:在所述發(fā)送器檢測到大量數(shù)據(jù)傳送的瓶頸存在于所述網(wǎng)絡(luò)中的情況下,關(guān)閉所述發(fā)送器與所述接收器之間的現(xiàn)存連接,以便減少所述網(wǎng)絡(luò)中的進(jìn)一步擁塞。
44.根據(jù)權(quán)利要求43所述的發(fā)送器,其中,在當(dāng)前的往返時(shí)間(RTT)比先前的RTT長時(shí),肯定地檢測到大量數(shù)據(jù)傳送的瓶頸在所述網(wǎng)絡(luò)中。
45.根據(jù)權(quán)利要求42所述的發(fā)送器,其中,自動(dòng)調(diào)節(jié)還包括:在所述發(fā)送器檢測到大量數(shù)據(jù)傳送的瓶頸存在于所述發(fā)送器的I/O存儲(chǔ)系統(tǒng)中的情況下,關(guān)閉所述發(fā)送器與所述接收器之間的現(xiàn)存連接,并且其中,當(dāng)所述發(fā)送器處的緩沖區(qū)基本上空時(shí),肯定地檢測到大量數(shù)據(jù)傳送的瓶頸在所述發(fā)送器的I/o存儲(chǔ)系統(tǒng)中。
46.根據(jù)權(quán)利要求42所述的發(fā)送器,其中,自動(dòng)調(diào)節(jié)還包括:當(dāng)確定往返時(shí)間(RTT)已從先前的RTT縮短時(shí),將用于打開新連接的請(qǐng)求發(fā)送到所述接收器。
47.一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),在所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)上,存儲(chǔ)有用于使處理器執(zhí)行從發(fā)送器到通過網(wǎng)絡(luò)與所述發(fā)送器連接的接收器的大量數(shù)據(jù)傳送的計(jì)算機(jī)可執(zhí)行處理步驟,所述處理步驟包括: 通過所述網(wǎng)絡(luò)建立所述發(fā)送器與所述接收器之間的多個(gè)連接; 通過在所述多個(gè)連接上劃分地發(fā)送數(shù)據(jù)來將數(shù)據(jù)從所述發(fā)送器發(fā)送到所述接收器,以便聚合所述網(wǎng)絡(luò)的帶寬的利用;和 通過下述方式來自動(dòng)調(diào)節(jié)所述發(fā)送器與所述接收器之間的連接的最佳數(shù)量:當(dāng)檢測到大量數(shù)據(jù)傳送的瓶頸存在于所述接收器的I/O存儲(chǔ)系統(tǒng)中時(shí),關(guān)閉現(xiàn)存連接,并且當(dāng)所述接收器的I/O存儲(chǔ)系統(tǒng)寫數(shù)據(jù)比從所述網(wǎng)絡(luò)接收數(shù)據(jù)快時(shí),打開新連接。
48.一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),在所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)上,存儲(chǔ)有用于使處理器執(zhí)行從發(fā)送器到通過網(wǎng)絡(luò)與所述發(fā)送器連接的接收器的大量數(shù)據(jù)傳送的計(jì)算機(jī)可執(zhí)行處理步驟,所述處理步驟包括: 通過所述網(wǎng)絡(luò)建立所述發(fā)送器與所述接收器之間的多個(gè)連接; 通過在所述多個(gè)連接上劃分地發(fā)送數(shù)據(jù)來將數(shù)據(jù)從所述發(fā)送器發(fā)送到所述接收器,以便聚合所述網(wǎng)絡(luò)的帶寬的利用;和 通過下述方式來自動(dòng)調(diào)節(jié)所述發(fā)送器與所述接收器之間的連接的最佳數(shù)量:當(dāng)所述發(fā)送器的I/O存儲(chǔ)系統(tǒng)讀數(shù)據(jù)比通過所述網(wǎng)絡(luò)送出數(shù)據(jù)快時(shí),打開新連接,并且當(dāng)所述發(fā)送器的I/O存儲(chǔ)系統(tǒng)讀數(shù)據(jù)比通過所述`網(wǎng)絡(luò)送出數(shù)據(jù)慢并且多于一個(gè)的發(fā)送器正將數(shù)據(jù)發(fā)送到所述接收器時(shí),關(guān)閉現(xiàn)存連接。
全文摘要
本發(fā)明涉及在發(fā)送器和通過網(wǎng)絡(luò)與發(fā)送器連接的接收器之間建立的多個(gè)連接上執(zhí)行大量數(shù)據(jù)傳送。通過在所述多個(gè)連接上劃分地發(fā)送數(shù)據(jù)來將數(shù)據(jù)從發(fā)送器發(fā)送到接收器。通過下述方式來自動(dòng)調(diào)節(jié)發(fā)送器與接收器之間的連接的最佳數(shù)量當(dāng)大量數(shù)據(jù)傳送的瓶頸存在于接收器的存儲(chǔ)系統(tǒng)中時(shí),關(guān)閉現(xiàn)存連接,并且當(dāng)接收器寫數(shù)據(jù)比從網(wǎng)絡(luò)接收數(shù)據(jù)快時(shí),打開新連接。通過下述方式來進(jìn)一步自動(dòng)調(diào)節(jié)連接的數(shù)量取決于發(fā)送器讀數(shù)據(jù)比通過網(wǎng)絡(luò)送出數(shù)據(jù)快還是慢,打開或關(guān)閉連接。
文檔編號(hào)G06F15/16GK103109285SQ201180040917
公開日2013年5月15日 申請(qǐng)日期2011年8月17日 優(yōu)先權(quán)日2010年8月31日
發(fā)明者Y·L·曹, C·M·瑪查伽特, P·杰恩 申請(qǐng)人:佳能株式會(huì)社