零數(shù)據(jù)丟失傳輸協(xié)議的制作方法
【專利說明】零數(shù)據(jù)丟失傳輸協(xié)議
[0001]優(yōu)先權(quán)聲明
[0002]本專利申請要求2014年6月26日遞交的第14290186.7號歐洲申請(ΕΡ0)的遞交日期的優(yōu)先權(quán),其整個(gè)內(nèi)容通過引用被包含于此。
技術(shù)領(lǐng)域
[0003]所公開的示例實(shí)施例一般地涉及網(wǎng)絡(luò)數(shù)據(jù)存儲領(lǐng)域,并具體涉及網(wǎng)絡(luò)內(nèi)可靠的數(shù)據(jù)同步的領(lǐng)域。
【背景技術(shù)】
[0004]計(jì)算機(jī)時(shí)代的崛起已經(jīng)使得增加了對在線個(gè)性化服務(wù)的訪問。隨著電子設(shè)備和網(wǎng)絡(luò)的成本下降,很多先前被面對面提供的服務(wù)現(xiàn)在被通過互聯(lián)網(wǎng)遠(yuǎn)程提供。例如,銀行服務(wù)現(xiàn)在可以完全通過聯(lián)網(wǎng)系統(tǒng)來提供,因?yàn)橛脩艨梢灾噶钕到y(tǒng)完成存取款以及其它交易,并接收到這些交易已被完成的通知。
[0005]隨著越來越多的服務(wù)被在線提供,大量數(shù)據(jù)被持續(xù)地生成。這種數(shù)據(jù)中的很多需要被保存供以后使用。例如,銀行交易、消息、搜索歷史、瀏覽歷史、數(shù)據(jù)的統(tǒng)計(jì)分析一般全都需要被保存以備將來有用。隨著如此多數(shù)據(jù)需要被保存,存儲系統(tǒng)需要能夠可靠地容納大量數(shù)據(jù)。但是,這樣的系統(tǒng)一般不能保證所有的存儲組件都將會(huì)完全無錯(cuò)誤并且無故障地操作。這樣,大的存儲系統(tǒng)經(jīng)常通過網(wǎng)絡(luò)操作,以在多個(gè)位置處存儲重要數(shù)據(jù)的多個(gè)拷貝。這提高了存儲系統(tǒng)的可靠性和有用性。這種數(shù)據(jù)必須被無數(shù)據(jù)丟失或數(shù)據(jù)損壞地傳輸?shù)絺浞菸恢谩?br>[0006]大的數(shù)據(jù)存儲裝置也通過存儲給定數(shù)據(jù)庫的事務(wù)日志(transact1n log)來在出現(xiàn)崩潰時(shí)便利數(shù)據(jù)恢復(fù)。因此,每當(dāng)數(shù)據(jù)庫中的數(shù)據(jù)被改變時(shí),所述改變被記錄在事務(wù)日志中。這允許所有改變被以相對緊湊的形式存儲。然后,如果數(shù)據(jù)庫崩潰,則事務(wù)日志可被用來重建正確的且最近版本的數(shù)據(jù)庫。這可以通過按正確的順序?qū)⑺懈淖冎匦率┘佑谠紨?shù)據(jù)集來實(shí)現(xiàn)。
[0007]其它的主要考慮是數(shù)據(jù)可以被可靠地存儲的速度。為了提高存儲系統(tǒng)工作的速度,識別過程中的瓶頸很重要。一旦瓶頸(例如,系統(tǒng)的使整個(gè)過程延遲的特定部分)被識另IJ,就可將其去除或者改善。在傳統(tǒng)的聯(lián)網(wǎng)存儲系統(tǒng)中,一個(gè)這樣的瓶頸是在開始分發(fā)所述數(shù)據(jù)之前在產(chǎn)生數(shù)據(jù)的系統(tǒng)處記錄和存儲所述數(shù)據(jù)所需的時(shí)間。
【發(fā)明內(nèi)容】
[0008]根據(jù)本發(fā)明的一個(gè)方面,提供一種方法,其包含:在生產(chǎn)者系統(tǒng)的持久數(shù)據(jù)存儲裝置中存儲數(shù)據(jù);在所述生產(chǎn)者系統(tǒng)處使用一個(gè)或多個(gè)處理器產(chǎn)生一個(gè)或多個(gè)數(shù)據(jù)更新;將所述數(shù)據(jù)更新傳送到消費(fèi)者系統(tǒng)并同時(shí)在所述生產(chǎn)者系統(tǒng)處啟動(dòng)對所述數(shù)據(jù)更新的存儲,其中,所述數(shù)據(jù)更新起初被以臨時(shí)狀態(tài)存儲;當(dāng)在所述生產(chǎn)者系統(tǒng)處對所述數(shù)據(jù)更新的存儲完成時(shí),把第一確認(rèn)傳送到所述消費(fèi)者系統(tǒng),所述第一確認(rèn)指示所述數(shù)據(jù)更新已經(jīng)被成功地存儲在與所述生產(chǎn)者系統(tǒng)相關(guān)聯(lián)的所述持久數(shù)據(jù)存儲裝置中;確定是否已經(jīng)從所述消費(fèi)者系統(tǒng)接收到第二確認(rèn),其中,所述第二確認(rèn)指示所述消費(fèi)者系統(tǒng)已經(jīng)在所述消費(fèi)者系統(tǒng)處成功地存儲所述數(shù)據(jù)更新;以及根據(jù)對已經(jīng)從所述消費(fèi)者系統(tǒng)接收到所述第二確認(rèn)的確定,把存儲在所述生產(chǎn)者系統(tǒng)處的所述數(shù)據(jù)更新的臨時(shí)狀態(tài)改變?yōu)橛谰脿顟B(tài)。
[0009]根據(jù)本發(fā)明的另一個(gè)方面,提供一種系統(tǒng),其包含:一個(gè)或多個(gè)處理器;存儲器;和存儲在所述存儲器中的一個(gè)或多個(gè)程序,所述一個(gè)或多個(gè)程序包含指令,用于:在生產(chǎn)者系統(tǒng)的持久數(shù)據(jù)存儲裝置中存儲數(shù)據(jù);在所述生產(chǎn)者系統(tǒng)處的一個(gè)或多個(gè)處理器處產(chǎn)生一個(gè)或多個(gè)數(shù)據(jù)更新;將所述數(shù)據(jù)更新傳送到消費(fèi)者系統(tǒng)并同時(shí)在與所述生產(chǎn)者系統(tǒng)相關(guān)聯(lián)的改變?nèi)罩局袉?dòng)對所述數(shù)據(jù)更新的存儲;當(dāng)與所述生產(chǎn)者系統(tǒng)相關(guān)聯(lián)的所述改變?nèi)罩局械膶λ鰯?shù)據(jù)更新的存儲完成時(shí),把第一確認(rèn)傳送到消費(fèi)者系統(tǒng);確定是否已經(jīng)從所述消費(fèi)者系統(tǒng)接收到第二確認(rèn),其中,所述第二確認(rèn)指示所述消費(fèi)者系統(tǒng)已經(jīng)在與所述消費(fèi)者系統(tǒng)相關(guān)聯(lián)的改變?nèi)罩局谐晒Φ卮鎯λ鰯?shù)據(jù)更新;根據(jù)對已經(jīng)從所述消費(fèi)者系統(tǒng)接收到所述第二確認(rèn)的確定,把所述數(shù)據(jù)更新永久地存儲在所述持久數(shù)據(jù)存儲裝置中。
[0010]根據(jù)本發(fā)明的另一個(gè)方面,提供一種非瞬態(tài)計(jì)算機(jī)可讀存儲介質(zhì),其存儲由一個(gè)或多個(gè)處理器執(zhí)行的一個(gè)或多個(gè)程序,所述一個(gè)或多個(gè)程序包含指令,用于:把一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)存儲在生產(chǎn)者系統(tǒng)的持久數(shù)據(jù)存儲裝置中;在所述生產(chǎn)者系統(tǒng)處的一個(gè)或多個(gè)處理器處產(chǎn)生一個(gè)或多個(gè)數(shù)據(jù)更新;將所述數(shù)據(jù)更新的日志傳送到消費(fèi)者系統(tǒng)并同時(shí)在與所述生產(chǎn)者系統(tǒng)相關(guān)聯(lián)的所述持久數(shù)據(jù)存儲裝置中啟動(dòng)對所述數(shù)據(jù)更新的存儲;當(dāng)與所述生產(chǎn)者系統(tǒng)相關(guān)聯(lián)的所述持久數(shù)據(jù)存儲裝置中的對所述數(shù)據(jù)更新的存儲完成時(shí),把第一確認(rèn)傳送到所述消費(fèi)者系統(tǒng);確定是否已經(jīng)從所述消費(fèi)者系統(tǒng)接收到第二確認(rèn),其中,所述第二確認(rèn)指示所述消費(fèi)者系統(tǒng)已經(jīng)在與所述消費(fèi)者系統(tǒng)相關(guān)聯(lián)的改變?nèi)罩局谐晒Φ卮鎯λ鰯?shù)據(jù)更新的日志;以及根據(jù)對已經(jīng)從所述消費(fèi)者系統(tǒng)接收到所述第二確認(rèn)的確定,把所述數(shù)據(jù)更新永久地存儲在所述持久數(shù)據(jù)存儲裝置中。
【附圖說明】
[0011]在附圖的圖中通過示例而非限制圖示了某些示例實(shí)施例,在附圖中:
[0012]圖1是根據(jù)示例實(shí)施例的繪出了生產(chǎn)者-消費(fèi)者系統(tǒng)的網(wǎng)絡(luò)圖,其包括數(shù)據(jù)存儲系統(tǒng)的各種功能組件。
[0013]圖2是圖示根據(jù)某些示例實(shí)施例的消費(fèi)者系統(tǒng)的框圖。
[0014]圖3是圖示根據(jù)某些示例實(shí)施例的生產(chǎn)者系統(tǒng)的框圖。
[0015]圖4繪出了根據(jù)示例實(shí)施例圖示根據(jù)某些示例實(shí)施例的無數(shù)據(jù)丟失風(fēng)險(xiǎn)地傳輸存儲數(shù)據(jù)的方法的流程圖。
[0016]圖5A和圖5B是根據(jù)示例實(shí)施例圖示根據(jù)某些示例實(shí)施例的零數(shù)據(jù)丟失地傳輸和存儲數(shù)據(jù)的方法的流程圖。
[0017]圖6是根據(jù)某些示例實(shí)施例圖示機(jī)器的組件的框圖。
[0018]同樣的參考標(biāo)記貫穿附圖指代相同或者類似的部分。
【具體實(shí)施方式】
[0019]本公開描述了用于在聯(lián)網(wǎng)的數(shù)據(jù)存儲系統(tǒng)內(nèi)零數(shù)據(jù)丟失地傳輸數(shù)據(jù)的方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品。在下面的描述中,為了說明的目的,闡述了許多具體細(xì)節(jié),以提供對不同示例實(shí)施例的各個(gè)方面的透徹理解。但是本領(lǐng)域技術(shù)人員將會(huì)清楚,無需全部具體細(xì)節(jié)和/或利用這里描述的各種特征和元件的變化、排列和組合,可以實(shí)踐任何具體示例實(shí)施例。
[0020]當(dāng)計(jì)算機(jī)系統(tǒng)生成數(shù)據(jù)更新時(shí),那些數(shù)據(jù)更新應(yīng)該被存儲。在某些示例實(shí)施例中,存儲裝置被利用數(shù)據(jù)存儲裝置的生產(chǎn)者/消費(fèi)者模型實(shí)現(xiàn)。在這種情況下,當(dāng)生產(chǎn)者系統(tǒng)已經(jīng)生成數(shù)據(jù)更新時(shí),其開始在與生產(chǎn)者系統(tǒng)相關(guān)聯(lián)的持久數(shù)據(jù)存儲裝置處存儲新產(chǎn)生的數(shù)據(jù)更新,并且同時(shí)傳送數(shù)據(jù),供在一個(gè)或多個(gè)消費(fèi)者系統(tǒng)處存儲。存儲數(shù)據(jù)更新包括更新數(shù)據(jù)存儲裝置以包括新的數(shù)據(jù)更新,并把數(shù)據(jù)改變存儲在生產(chǎn)者系統(tǒng)上的事務(wù)日志中。事務(wù)日志可以保存對存儲在與生產(chǎn)者系統(tǒng)相關(guān)聯(lián)的數(shù)據(jù)存儲裝置中的數(shù)據(jù)所做的改變的序時(shí)記錄。事務(wù)日志也可以被稱為改變?nèi)罩?、日志文件、或者?shù)據(jù)改變?nèi)罩?。在本文檔中,這些術(shù)語可被互換使用。
[0021]常規(guī)存儲系統(tǒng)在將數(shù)據(jù)改變記錄到數(shù)據(jù)日志時(shí)遭遇性能瓶頸。例如,單個(gè)事務(wù)可以包括多個(gè)個(gè)體改變,每一個(gè)改變應(yīng)該被寫到改變?nèi)罩?有時(shí)候是順次地)。結(jié)果,甚至在數(shù)據(jù)改變被發(fā)送到遠(yuǎn)程存儲系統(tǒng)(例如,消費(fèi)者系統(tǒng))之前,就可能存在大的延遲。
[0022]通過同時(shí)記錄(和存儲)數(shù)據(jù)更新并傳送數(shù)據(jù)更新供在消費(fèi)者系統(tǒng)處記錄,生產(chǎn)者系統(tǒng)避免了否則將在等待數(shù)據(jù)更新完成被存儲在與生產(chǎn)者系統(tǒng)相關(guān)聯(lián)的持久數(shù)據(jù)存儲裝置處時(shí)出現(xiàn)的瓶頸。例如,如果許多數(shù)據(jù)項(xiàng)要被記錄或者存儲在持久數(shù)據(jù)存儲裝置中,則在新數(shù)據(jù)A被完全存儲之前有可能花費(fèi)相當(dāng)大量的時(shí)間。如果生產(chǎn)者系統(tǒng)在把新數(shù)據(jù)A發(fā)送到消費(fèi)者系統(tǒng)之前必須等到存儲完成,則總時(shí)間將大約是:
[0023]在生產(chǎn)者系統(tǒng)處存儲(和/或記錄改變)的時(shí)間+傳送到消費(fèi)者系統(tǒng)的時(shí)間+在消費(fèi)者系統(tǒng)處存儲(和/或記錄)的時(shí)間+通知生產(chǎn)者數(shù)據(jù)被成功存儲的時(shí)間
[0024]相反,如果數(shù)據(jù)在其被發(fā)送到生產(chǎn)者系統(tǒng)的持久數(shù)據(jù)存儲裝置的同時(shí)被傳送到消費(fèi)者系統(tǒng),則等到生產(chǎn)者系統(tǒng)完成存儲新數(shù)據(jù)A之時(shí),傳送、存儲和通知可能已被完成,從而導(dǎo)致與將新數(shù)據(jù)A存儲在生產(chǎn)者持久數(shù)據(jù)存儲裝置中相等的運(yùn)行時(shí)間。在大型系統(tǒng)中特別重要的是在事務(wù)日志中對數(shù)據(jù)改變的存儲。在大型數(shù)據(jù)系統(tǒng)中,系統(tǒng)同時(shí)接收(或產(chǎn)生)并存儲各種數(shù)據(jù)改變。但是,因?yàn)槭聞?wù)日志應(yīng)該保持特定順序以便確保它將可靠地把數(shù)據(jù)返回到其原始狀態(tài),所以這些改變不能被同時(shí)記錄。相反,每一改變被單個(gè)地添加到事務(wù)日志。因此,把改變存儲到事務(wù)日志可能比把實(shí)際數(shù)據(jù)更新存儲在持久數(shù)據(jù)存儲裝置中花費(fèi)更多時(shí)間。通過允許消費(fèi)者系統(tǒng)在數(shù)據(jù)記錄發(fā)生的同時(shí)開始存儲數(shù)據(jù)更新,能夠緩解數(shù)據(jù)記錄的瓶頸效應(yīng)。
[0025]在某些示例實(shí)施例中,消費(fèi)者系統(tǒng)通過把數(shù)據(jù)被接收確認(rèn)發(fā)送回生產(chǎn)者系統(tǒng)來對接收到供記錄和/或存儲的數(shù)據(jù)改變做出響應(yīng),從而使生產(chǎn)者系統(tǒng)知道數(shù)據(jù)改變已被接收,并且消費(fèi)者將開始記錄數(shù)據(jù)更新。
[0026]應(yīng)該注意,術(shù)語“生產(chǎn)者系統(tǒng)”包括生成需要被存儲的數(shù)據(jù)的任何系統(tǒng)。在某些示例實(shí)施例中,生產(chǎn)者系統(tǒng)的角色由服務(wù)器系統(tǒng)執(zhí)行,并且消費(fèi)者系統(tǒng)的角色由客戶端系統(tǒng)執(zhí)行。而且,數(shù)據(jù)更新包括需要被存儲的任何新數(shù)據(jù),包括但不限于由生產(chǎn)者系統(tǒng)生成的新數(shù)據(jù)、對生產(chǎn)者系統(tǒng)上現(xiàn)有數(shù)據(jù)的改變、數(shù)據(jù)改變的列表、或者從外部來源接收到的需要被存儲的數(shù)據(jù)。
[0027]在某些示例實(shí)施例中,與數(shù)據(jù)存儲和保持相關(guān)聯(lián)的策略確定數(shù)據(jù)是否應(yīng)該被存儲和其將如何/在何處存儲。例如,代表特定銀行交易的數(shù)據(jù)在一個(gè)或多個(gè)位置處具有一個(gè)或多個(gè)副本,以確保該數(shù)據(jù)可廣泛地獲取并且不被損壞和丟失。在其它示例中,所述策略確定消費(fèi)者系統(tǒng)是存儲完整的數(shù)據(jù)集還是僅存儲改變的日志。
[0028]在某些示例實(shí)施例中,在數(shù)據(jù)更新被提交到最終版本之前,數(shù)據(jù)更新起初被以臨時(shí)形式存儲在持久數(shù)據(jù)存儲裝置中。此外,數(shù)據(jù)更新可被存儲為日志文件(或事務(wù)日志)中的一系列改變,從而如果出現(xiàn)故障,則可以根據(jù)日志文件重建所述數(shù)據(jù)。因此,對于保持?jǐn)?shù)據(jù)完整性來說,在每一消費(fèi)者系統(tǒng)處具有完整和準(zhǔn)確的日志文件很關(guān)鍵。
[0029]在某些示例實(shí)施例中,生產(chǎn)者系統(tǒng)以其無法被恢復(fù)的方式出現(xiàn)故障。在這種情況下,數(shù)據(jù)集不能在生產(chǎn)者系統(tǒng)上被重建。相反,消費(fèi)者系統(tǒng)之一被提升,以起到新的生產(chǎn)者系統(tǒng)的作用。如果必要,則在新的生產(chǎn)者系統(tǒng)處,使用日志數(shù)據(jù)重建完整的數(shù)據(jù)集。
[0030]一旦數(shù)據(jù)更新被存儲并且事務(wù)日志被更新,生產(chǎn)者系統(tǒng)就把生產(chǎn)者確認(rèn)消息發(fā)送到消費(fèi)者系統(tǒng)。生產(chǎn)者確認(rèn)消息指示新的數(shù)據(jù)更新已經(jīng)被成功地存儲在與生產(chǎn)者系統(tǒng)相關(guān)聯(lián)的持久數(shù)據(jù)存儲裝置中,并且改變已經(jīng)被記錄在事務(wù)日志中。注意到這個(gè)確認(rèn)被與發(fā)生在消費(fèi)者系統(tǒng)處的任何事獨(dú)立地發(fā)送很重要。因此,生產(chǎn)者系統(tǒng)將確認(rèn)消息發(fā)送到消費(fèi)者,而不等待任何額外的信息或者通知。在某些示例實(shí)施例中,確認(rèn)消息被與下一可用數(shù)據(jù)存儲消息一起發(fā)送給消費(fèi)者。如果沒有額外的數(shù)據(jù)記錄消息被計(jì)劃發(fā)送,則生產(chǎn)者確認(rèn)消息可以被獨(dú)立發(fā)送。在其它實(shí)施例中,改變一被記錄,確認(rèn)消息就被獨(dú)立地發(fā)送。在某些示例實(shí)施例中,在記錄改變時(shí)發(fā)送的確認(rèn)被完成,與數(shù)據(jù)更新是否已被存儲無關(guān)。
[0031]在某些示例實(shí)施例中,提交改變意味著將改變或者新