欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

在分布式基礎(chǔ)設(shè)施中執(zhí)行計算的制作方法

文檔序號:7935561閱讀:138來源:國知局
專利名稱:在分布式基礎(chǔ)設(shè)施中執(zhí)行計算的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及分布式基礎(chǔ)設(shè)施,尤其涉及在分布式基礎(chǔ)設(shè)施中執(zhí)行計算。
背景技術(shù)
計算機系統(tǒng)和相關(guān)技術(shù)影響社會的許多方面。的確,計算機系統(tǒng)處理信息的能力已轉(zhuǎn)變了人們生活和工作的方式。計算機系統(tǒng)現(xiàn)在通常執(zhí)行在計算機系統(tǒng)出現(xiàn)以前手動執(zhí)行的許多任務(wù)(例如,文字處理、日程安排和會計等)。最近,計算機系統(tǒng)彼此耦合并耦合到其他電子設(shè)備以形成有線和無線計算機網(wǎng)絡(luò),計算機系統(tǒng)和其他電子設(shè)備可以在該計算機網(wǎng)絡(luò)上傳輸電子數(shù)據(jù)。因此,許多計算任務(wù)的執(zhí)行分布在多個不同的計算機系統(tǒng)和/或多個不同的計算環(huán)境上。在一些計算環(huán)境中,客戶端將對服務(wù)的請求路由到被稱為服務(wù)會合點的邏輯目的地。更具體地說,這些被路由的服務(wù)請求被擔任會合點所有者的聯(lián)盟節(jié)點處理??稍跁宵c處提供的一種典型服務(wù)是存儲,諸如例如SQL服務(wù)器數(shù)據(jù)服務(wù)。與傳統(tǒng)的客戶端-服務(wù)器模型相比,這種系統(tǒng)的一個復(fù)雜之處在于在節(jié)點加入和離開聯(lián)盟或者系統(tǒng)中出現(xiàn)故障時,會合點所有權(quán)可能改變。然而,使客戶端避免這個復(fù)雜之處并且向它們提供它們正在從單一的、邏輯上一致的會合點獲得服務(wù)的假象是合乎需要的。如此,為了在會合點提供單一的、邏輯上一致的服務(wù),在會合點維持的狀態(tài)必須被復(fù)制以確保當目前正在擔任會合點所有者的節(jié)點出現(xiàn)故障時該狀態(tài)不會丟失。這種復(fù)制使得任何節(jié)點能夠取代故障節(jié)點作為所有者來以與故障節(jié)點在其故障前所采取的動作相一致的方式行動。即,可將此問題視為復(fù)制狀態(tài)機問題,這又意味著數(shù)據(jù)一致性保證。然而,現(xiàn)有分布式系統(tǒng)通常缺少對提供分布式計算作為重復(fù)的高可用服務(wù)這一問題的解決方案。大多數(shù)現(xiàn)有分布式計算模型具有不同的關(guān)注點。例如,中間結(jié)果(輸入和輸出)必須使用文件或?qū)S么鎯韺崿F(xiàn)一定的高可用性保證。此外,這些分布式計算模型是面向數(shù)據(jù)流的,其中運算符接收輸入、產(chǎn)生輸出而且它們主要是函數(shù)性的、無狀態(tài)的。除非這些運算符的所有輸入均可用,否則它們不能開始。典型分布式計算模型的另一限制在于不能為在存在故障或負載平衡時執(zhí)行的計算提供很強的一致性保證,從而將所有的工作留給了計算的開發(fā)者/操作者(重啟、終止、 故障切換等)。

發(fā)明內(nèi)容
本發(fā)明涉及用于在分布式基礎(chǔ)設(shè)施中執(zhí)行計算的方法、系統(tǒng)和計算機程序產(chǎn)品。 在一些實施例中,執(zhí)行本地有狀態(tài)計算。基于基本構(gòu)造(fabric based)的分布式計算基礎(chǔ)設(shè)施內(nèi)的副本集合包括主要計算節(jié)點和一個或多個次要計算節(jié)點。主要計算節(jié)點和一個或多個次要計算節(jié)點中的每一個具有相同的當前狀態(tài),并被配置成具有用于執(zhí)行本地計算的相同的可執(zhí)行操作組。該操作組包括至少一個與輸入或輸出隊列有關(guān)的操作和至少一個修改計算狀態(tài)的操作。該主要計算節(jié)點執(zhí)行該本地計算。為此,該主要計算節(jié)點為該本地計算創(chuàng)建事務(wù)。 該主要計算節(jié)點邏輯上執(zhí)行該操作組中的一個或多個附加操作。該附加操作包括處理該當前計算狀態(tài),處理該當前計算狀態(tài)包括以下中的一個或多個邏輯上產(chǎn)生附加計算狀態(tài)以及邏輯上修改現(xiàn)存計算狀態(tài)。該附加操作包括邏輯上執(zhí)行該至少一個與輸入或輸出隊列有關(guān)的操作。該附加操作包括依照事務(wù)提交操作和事務(wù)中止操作之一來終止該事務(wù)。該主要計算節(jié)點對該本地計算的執(zhí)行被復(fù)制至系統(tǒng)存儲器中以復(fù)制至該一個或多個次要計算節(jié)點。復(fù)制包括對為該本地計算創(chuàng)建事務(wù)、邏輯上執(zhí)行該操作組中的該一個或多個附加操作以及終止該事務(wù)進行復(fù)制。對終止該事務(wù)的復(fù)制用信號通知該一個或多個次要計算節(jié)點依照該事務(wù)提交操作或該事務(wù)中止操作而應(yīng)用改變。響應(yīng)于終止該事務(wù),該主要計算節(jié)點依照該事務(wù)提交操作或該事務(wù)中止操作而應(yīng)用改變。當該事務(wù)提交操作終止該事務(wù)時,應(yīng)用物理改變被應(yīng)用以實現(xiàn)該操作組中每個操作的邏輯應(yīng)用。物理改變包括將該當前計算狀態(tài)與任何附加計算狀態(tài)和任何經(jīng)修改的現(xiàn)存計算狀態(tài)協(xié)調(diào)成為新的提交的計算狀態(tài)。物理改變還包括更改至少一個隊列的狀態(tài)以物理實現(xiàn)該至少一個與輸入或輸出隊列有關(guān)的操作。當該事務(wù)中止操作終止該事務(wù)時,該至少一個與輸入或輸出隊列有關(guān)的操作被邏輯翻轉(zhuǎn)。在其他實施例中,執(zhí)行本地?zé)o狀態(tài)計算。計算節(jié)點被配置成具有用于執(zhí)行無狀態(tài)本地計算的多個操作的可執(zhí)行操作組,該操作組包括至少一個與輸入或輸出隊列有關(guān)的操作。該計算節(jié)點執(zhí)行該本地?zé)o狀態(tài)計算。該計算節(jié)點為該本地?zé)o狀態(tài)計算創(chuàng)建事務(wù)。該計算節(jié)點邏輯上執(zhí)行該操作組中的一個或多個操作。該本地計算的失敗在完成該操作組中的該一個或多個操作之后的指定操作之前被可靠地檢測。該本地計算在該指定操作被可靠地重啟。該計算節(jié)點邏輯上執(zhí)行該指定操作和該指定操作之后的任何剩余操作,直到該多個操作被執(zhí)行。該事務(wù)依照事務(wù)提交操作和事務(wù)中止操作之一終止。響應(yīng)于終止該事務(wù),該計算節(jié)點依照該事務(wù)提交操作或該事務(wù)中止操作而應(yīng)用改變。當該事務(wù)提交操作終止該事務(wù)時,應(yīng)用物理改變以實現(xiàn)該操作組中的該多個操作中的每個操作的邏輯應(yīng)用。應(yīng)用物理改變包括更改至少一個隊列的狀態(tài)以物理實現(xiàn)該至少一個與輸入或輸出隊列有關(guān)的操作。當該事務(wù)中止操作終止該事務(wù)時,邏輯上翻轉(zhuǎn)該至少一個與輸入或輸出隊列有關(guān)的操作。提供本發(fā)明內(nèi)容以便以簡化的形式介紹將在以下的具體實施方式
中進一步描述的一些發(fā)明內(nèi)容。本發(fā)明內(nèi)容并不旨在標識所要求保護的主題的關(guān)鍵特征或必要特征,也不旨在用于幫助確定所要求保護的主題的范圍。本發(fā)明的附加特征和優(yōu)點將在以下描述中敘述,且其一部分根據(jù)本描述將是顯而易見的,或可通過對本發(fā)明的實踐來獲知。本發(fā)明的特征和優(yōu)點可通過在所附權(quán)利要求書中特別指出的工具和組合來實現(xiàn)和獲得。本發(fā)明的這些和其他特征將通過以下描述和所附權(quán)利要求書變得更加顯而易見,或可通過對下文中所述的本發(fā)明的實踐來領(lǐng)會。附圖簡述為了描述可獲得本發(fā)明的上述和其他優(yōu)點和特征的方式,將通過參考附圖中示出的本發(fā)明的具體實施例來呈現(xiàn)以上簡要描述的本發(fā)明的更具體描述??梢岳斫?,這些附圖只描繪了本發(fā)明的各典型實施例,并且因此不被認為是對其范圍的限制,將通過使用附圖并利用附加特征和細節(jié)來描述和解釋本發(fā)明,在附圖中

圖1示出便于執(zhí)行分布式計算的一示例分布式計算體系結(jié)構(gòu)。圖2A示出用于本地有狀態(tài)計算的復(fù)制的附加視圖。圖2B示出在圖2A中示出的用于本地有狀態(tài)計算的主要計算實例的進一步視圖。圖3示出用于本地?zé)o狀態(tài)計算的計算實例的視圖。圖4A示出便于執(zhí)行分布式計算的一示例分布式計算體系結(jié)構(gòu)。圖4B示出便于作為有狀態(tài)分布式計算的一部分來確認接收到的消息的圖4A的示例分布式計算體系結(jié)構(gòu)。圖5A示出便于確認本地?zé)o狀態(tài)計算之間的消息的示例分布式計算體系結(jié)構(gòu)。圖5B示出便于確認無狀態(tài)和有狀態(tài)本地計算之間的消息的示例分布式計算體系結(jié)構(gòu)。圖6示出用于在副本集合處執(zhí)行有狀態(tài)本地計算的示例方法的流程圖。圖7示出用于執(zhí)行無狀態(tài)本地計算的一示例方法的流程圖。圖8示出用于執(zhí)行分布式計算的一示例方法的流程圖。圖9示出用于作為有狀態(tài)分布式計算的一部分來確認接收到的消息的一示例方法的流程圖。圖10示出用于作為無狀態(tài)分布式計算的一部分來確認接收到的消息的一示例方法的流程圖。
具體實施例方式本發(fā)明涉及用于在分布式基礎(chǔ)設(shè)施中執(zhí)行計算的方法、系統(tǒng)和計算機程序產(chǎn)品。 在一些實施例中,執(zhí)行本地有狀態(tài)計算?;诨緲?gòu)造的分布式計算基礎(chǔ)設(shè)施內(nèi)的副本集合包括主要計算節(jié)點和一個或多個次要計算節(jié)點。該主要計算節(jié)點和該一個或多個次要計算節(jié)點中的每一個具有相同的當前狀態(tài)并被配置成具有用于執(zhí)行本地計算的相同的可執(zhí)行操作組。該操作組包括至少一個與輸入或輸出隊列有關(guān)的操作和至少一個修改計算狀態(tài)的操作。該主要計算節(jié)點執(zhí)行該本地計算。為此,該主要計算節(jié)點為該本地計算創(chuàng)建事務(wù)。 該主要計算節(jié)點邏輯上執(zhí)行該操作組中的一個或多個附加操作。該附加操作包括處理該當前計算狀態(tài),包括以下中的一個或多個邏輯上產(chǎn)生附加計算狀態(tài)以及邏輯上修改現(xiàn)存計算狀態(tài)。該附加操作包括邏輯上執(zhí)行該至少一個與輸入或輸出隊列有關(guān)的操作。該附加操作包括依照事務(wù)提交操作和事務(wù)中止操作之一來終止該事務(wù)。該主要計算節(jié)點對該本地計算的執(zhí)行本被復(fù)制至系統(tǒng)存儲器中以復(fù)制至該一個或多個次要計算節(jié)點。復(fù)制包括對為該本地計算創(chuàng)建事務(wù)、邏輯上執(zhí)行該操作組中的該一個或多個附加操作以及終止該事務(wù)進行復(fù)制。對終止該事務(wù)的復(fù)制用信號通知該一個或多個次要計算節(jié)點依照該事務(wù)提交操作或該事務(wù)中止操作而應(yīng)用改變。響應(yīng)于終止該事務(wù),該主要計算節(jié)點依照該事務(wù)提交操作或該事務(wù)中止操作而應(yīng)用改變。當該事務(wù)提交操作終止該事務(wù)時,應(yīng)用物理改變被應(yīng)用以實現(xiàn)該操作組中每個操作的邏輯應(yīng)用。物理改變包括將該當前計算狀態(tài)與任何附加計算狀態(tài)和任何經(jīng)修改的現(xiàn)存計算狀態(tài)協(xié)調(diào)成為新的提交的計算狀態(tài)。物理改變還包括更改至少一個隊列的狀態(tài)以物理實現(xiàn)該至少一個與輸入或輸出隊列有關(guān)的操作。當該事務(wù)中止操作終止該事務(wù)時,該至少一個與輸入或輸出隊列有關(guān)的操作被邏輯翻轉(zhuǎn)。在其他實施例中,執(zhí)行本地?zé)o狀態(tài)計算。計算節(jié)點被配置成具有用于執(zhí)行無狀態(tài)本地計算的多個操作的可執(zhí)行操作組,該操作組包括至少一個與輸入或輸出隊列有關(guān)的操作。該計算節(jié)點執(zhí)行該本地?zé)o狀態(tài)計算。該計算節(jié)點為該本地?zé)o狀態(tài)計算創(chuàng)建事務(wù)。該計算節(jié)點邏輯上執(zhí)行該操作組中的一個或多個操作。該本地計算的失敗在完成該操作組中的該一個或多個操作之后的指定操作之前被可靠地檢測。該本地計算在該指定操作被可靠地重啟。該計算節(jié)點邏輯上執(zhí)行該指定操作和該指定操作之后的任何剩余操作,直到該多個操作被執(zhí)行。該事務(wù)依照事務(wù)提交操作和事務(wù)中止操作之一來終止。響應(yīng)于終止該事務(wù),該計算節(jié)點依照該事務(wù)提交操作或該事務(wù)中止操作而應(yīng)用改變。當該事務(wù)提交操作終止該事務(wù)時,應(yīng)用物理改變以實現(xiàn)該操作組中的該多個操作中的每個操作的邏輯應(yīng)用。應(yīng)用物理改變包括更改至少一個隊列的狀態(tài)以物理實現(xiàn)該至少一個與輸入或輸出隊列有關(guān)的操作。當該事務(wù)中止操作終止該事務(wù)時,邏輯上翻轉(zhuǎn)該至少一個與輸入或輸出隊列有關(guān)的操作。本發(fā)明的各實施例可包括或利用專用或通用計算機,該專用或通用計算機包括諸如例如一個或多個處理器和系統(tǒng)存儲器等計算機硬件,如以下更詳細討論的。本發(fā)明范圍內(nèi)的各實施例還包括用于攜帶或存儲計算機可執(zhí)行指令和/或數(shù)據(jù)結(jié)構(gòu)的物理和其他計算機可讀介質(zhì)。這些計算機可讀介質(zhì)可以是可由通用或?qū)S糜嬎銠C系統(tǒng)訪問的任何可用介質(zhì)。存儲計算機可執(zhí)行指令的計算機可讀介質(zhì)是計算機存儲介質(zhì)(設(shè)備)。攜帶計算機可執(zhí)行指令的計算機可讀介質(zhì)是傳輸介質(zhì)。由此,作為示例而非限制,本發(fā)明的各實施例可包括至少兩種完全不同的計算機可讀介質(zhì)計算機存儲介質(zhì)(設(shè)備)和傳輸介質(zhì)。計算機存儲介質(zhì)(設(shè)備)包括RAM、ROM、EEPROM、CD-ROM或其他光盤存儲、磁盤存儲或其他磁存儲設(shè)備、或可用于存儲計算機可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的所需程序代碼裝置的且可由通用或?qū)S糜嬎銠C訪問的任何其他介質(zhì)?!熬W(wǎng)絡(luò)”被定義為允許在計算機系統(tǒng)和/或模塊和/或其他電子設(shè)備之間傳輸電子數(shù)據(jù)的一個或多個數(shù)據(jù)鏈路。當信息通過網(wǎng)絡(luò)或另一個通信連接(硬連線、無線、或者硬連線或無線的組合)傳輸或提供給計算機時,該計算機將該連接適當?shù)匾暈閭鬏斀橘|(zhì)。傳輸介質(zhì)可包括可用于承載計算機可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的所需程序代碼裝置且可由通用或?qū)S糜嬎銠C訪問的網(wǎng)絡(luò)和/或數(shù)據(jù)鏈路。上述的組合也應(yīng)被包括在計算機可讀介質(zhì)的范圍內(nèi)。此外,在到達各種計算機系統(tǒng)組件之后,計算機可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的程序代碼手段可從傳輸介質(zhì)自動傳輸?shù)接嬎銠C存儲介質(zhì)(設(shè)備)(或反之亦然)。例如,通過網(wǎng)絡(luò)或數(shù)據(jù)鏈路接收到的計算機可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)可被緩存在網(wǎng)絡(luò)接口模塊(例如, “NIC”)內(nèi)的RAM中,然后最終被傳輸?shù)接嬎銠C系統(tǒng)RAM和/或計算機系統(tǒng)處的較不易失性的計算機存儲介質(zhì)(設(shè)備)。因而,應(yīng)當理解,計算機存儲介質(zhì)(設(shè)備)可被包括在還利用 (甚至主要利用)傳輸介質(zhì)的計算機系統(tǒng)組件中。計算機可執(zhí)行指令例如包括,當在處理器處執(zhí)行時使通用計算機、專用計算機、或?qū)S锰幚碓O(shè)備執(zhí)行某一功能或某組功能的指令和數(shù)據(jù)。計算機可執(zhí)行指令可以是例如二進制代碼、諸如匯編語言之類的中間格式指令、或甚至源代碼。盡管用結(jié)構(gòu)特征和/或方法動作專用的語言描述了本主題,但可以理解,所附權(quán)利要求書中定義的主題不必限于上述特征或動作。相反,上述特征和動作是作為實現(xiàn)權(quán)利要求的示例形式而公開的。本領(lǐng)域的技術(shù)人員將理解,本發(fā)明可以在具有許多類型的計算機系統(tǒng)配置的網(wǎng)絡(luò)計算環(huán)境中實踐,這些計算機系統(tǒng)配置包括個人計算機、臺式計算機、膝上型計算機、消息處理器、手持式設(shè)備、多處理器系統(tǒng)、基于微處理器的或可編程消費電子設(shè)備、網(wǎng)絡(luò)PC、小型計算機、大型計算機、移動電話、PDA、尋呼機、路由器、交換機等等。本發(fā)明也可在其中通過網(wǎng)絡(luò)鏈路(或者通過硬連線數(shù)據(jù)鏈路、無線數(shù)據(jù)鏈路,或者通過硬連線和無線數(shù)據(jù)鏈路的組合)的本地和遠程計算機系統(tǒng)兩者都執(zhí)行任務(wù)的分布式系統(tǒng)環(huán)境中實施。在分布式系統(tǒng)環(huán)境中,程序模塊可位于本地和遠程存儲器存儲設(shè)備中。本發(fā)明的實施例包括可用于執(zhí)行高效(存儲器內(nèi))的、可伸縮的、能從故障恢復(fù)的、原子的、流控制的、長期運行的無狀態(tài)的和有狀態(tài)的分布式計算的通用分布式計算基礎(chǔ)設(shè)施。由分布式計算基礎(chǔ)設(shè)施提供的保證可以建立在底層分布式基本構(gòu)造(諸如例如覆蓋網(wǎng)絡(luò))的現(xiàn)存保證的基礎(chǔ)上,以隱藏容錯的復(fù)雜性、允許大規(guī)模高可用處理、允許高效資源利用以及便于有狀態(tài)和無狀態(tài)計算的通用開發(fā)。保證可包括鄰居和路由一致性、完美的故障檢測、以及數(shù)據(jù)一致的復(fù)制和故障切換重新配置。分布式計算基礎(chǔ)設(shè)施還可提供一基底, 在該基底上可增強現(xiàn)存分布式計算模型以使之變得能從故障恢復(fù)。在一些實施例中,服務(wù)狀態(tài)/數(shù)據(jù)/配置被復(fù)制來為分布式服務(wù)器提供高可用性。計算節(jié)點(復(fù)制關(guān)系中涉及的實體)形成副本集合或分區(qū)。在副本集合或分區(qū)內(nèi),一個計算節(jié)點可以是主要計算節(jié)點而一個或多個其他計算節(jié)點可以是次要計算節(jié)點。讀取操作可以由主要計算節(jié)點完成。寫入操作可以首先由主要計算節(jié)點看到,然后使用法定數(shù)量 (quorum)提交協(xié)議轉(zhuǎn)發(fā)到次要計算節(jié)點。副本集合中的每個次要計算節(jié)點可以按與主要計算節(jié)點看到并應(yīng)用改變相同的順序看到并應(yīng)用改變??墒褂靡唤M故障切換和重配置算法來向客戶端提供從單一的一致實體接收服務(wù)的假象。該算法可提供有關(guān)維持副本集合(分區(qū))處于可運轉(zhuǎn)狀態(tài)的保證。維持可運轉(zhuǎn)狀態(tài)可包括從主要計算節(jié)點到次要計算節(jié)點的故障切換、在有太少的次要計算節(jié)點可用時構(gòu)建新的次要節(jié)點、以及將主要計算節(jié)點與現(xiàn)有次要計算節(jié)點進行切換。為了在分布式計算基礎(chǔ)設(shè)施中提供一致性保證,可使用故障檢測器。故障檢測器具有提供有關(guān)分布式計算基礎(chǔ)設(shè)施內(nèi)的哪些實體(例如,進程)停機的可靠信息的責(zé)任??墒褂貌煌愋偷墓收蠙z測器。在一些實施例中,使用極為精確(不將未停機的進程報告為停機的)且極為完整(報告所有停機的進程)的完美的故障檢測器。本發(fā)明的實施例還包括消息收發(fā)子系統(tǒng)。消息收發(fā)子系統(tǒng)可利用消息收發(fā)原語來實現(xiàn)將消息發(fā)送至節(jié)點/進程或發(fā)送至分布式計算體系結(jié)構(gòu)內(nèi)的副本集合。所利用的消息收發(fā)范例可包括點到點、多播、和廣播,具有最大努力和可靠版本中的一個或多個。本地計算被限定為是副本集合(分區(qū))。本地計算的輸入可被建模為先進先出 (“FIFO”)隊列(源)的集合。本地計算的輸出可被建模為FIFO隊列(宿)的集合。本地計算的每個實例是實現(xiàn)用于暴露其狀態(tài)(如果有的話)并用于執(zhí)行實際處理的接口的類。 對于有狀態(tài)計算,通過基本構(gòu)造(例如,覆蓋網(wǎng)絡(luò))復(fù)制層,可使狀態(tài)和/或狀態(tài)改變高度可用??墒褂猛瑯臃绞绞瓜妮斎氩a(chǎn)生輸出的本地計算高度可用。這樣,分布式計算可以由本地計算的有向無環(huán)圖(“DAG”)表示。來自上游本地計算的輸出可作為輸入傳遞至下游本地計算。圖1示出便于執(zhí)行分布式計算108的一示例分布式計算體系結(jié)構(gòu)100。參照圖1, 分布式計算體系結(jié)構(gòu)100包括副本191、192、193和194。所描繪的副本中的每一個(其可包括一個或多個計算機系統(tǒng))通過諸如例如局域網(wǎng)(“LAN”)、廣域網(wǎng)(“WAN”)或甚至因特網(wǎng)等網(wǎng)絡(luò)(或作為網(wǎng)絡(luò)的一部分)彼此連接。相應(yīng)地,所描繪的副本中的每一個以及任何其他連接的計算機系統(tǒng)及其組件都可以創(chuàng)建與消息相關(guān)的數(shù)據(jù)并通過網(wǎng)絡(luò)交換與消息相關(guān)的數(shù)據(jù)(例如,網(wǎng)際協(xié)議(“IP”)數(shù)據(jù)報和利用IP數(shù)據(jù)報的其他更高層協(xié)議,諸如傳輸控制協(xié)議(“TCP”)、超文本傳輸協(xié)議(“HTTP”)、簡單郵件傳輸協(xié)議(“SMTP”)等)。分布式計算108由從副本(本地計算)191、192、193和194形成的DAG表示。如所描繪的,每個副本(本地計算)包括多個計算實例。例如,副本191包括計算實例101A、 IOlB和101C。計算實例IOlA包括計算狀態(tài)111、計算處理121和宿隊列131。類似地,副本192包括計算實例102A、102B和102C。計算實例102A包括計算狀態(tài)112、計算處理122 和宿隊列132。同樣地,副本193包括計算實例103A、103B和103C。計算實例103A包括計算狀態(tài) 113、計算處理123、源隊列133和143和宿隊列153。依次地,副本194包括計算實例104A、 104B和104C。計算實例104包括計算狀態(tài)114、計算處理IM和源隊列134。一般而言,計算處理121和計算處理122執(zhí)行一個或多個操作以分別更改計算狀態(tài)111和112并輸出消息191和192。計算實例IOlA可將消息191排在宿隊列131中。計算實例IOlB可將消息192排在宿隊列132中。對計算狀態(tài)111的改變和消息191到宿隊列131的入隊可被復(fù)制到計算實例IOlB 和101C。類似地,對計算狀態(tài)112的改變和消息192到宿隊列132的入隊可被復(fù)制到計算實例102B和102C。隊列到隊列協(xié)議可用于分別使消息191和192從宿隊列131和132出隊并分別使消息191和192入隊到源隊列133和134中。消息191從宿隊列131的出隊可被復(fù)制到計算實例IOlB和IOlC0類似地,消息192從宿隊列132的出隊可被復(fù)制到計算實例102B和 102C。同樣地,消息191和192到源隊列133和143的入隊可被復(fù)制到計算實例103B和 103C。計算處理123可使用消息191和192來執(zhí)行一個或多個操作以更改計算狀態(tài)113 并輸出消息193。計算實例103A可將消息193排在宿隊列153中。對計算狀態(tài)113的改變和消息193到宿隊列153的入隊可被復(fù)制到計算實例10 和103C。隊列到隊列協(xié)議可用于使消息193從宿隊列153出隊并可使消息193入隊到源隊列134中。消息193從宿隊列153的出隊可被復(fù)制到計算實例匪和103C。同樣地,消息 193到源隊列134的入隊可被復(fù)制到計算實例104B和104C。計算處理IM可使用消息193來執(zhí)行一個或多個操作以更改計算狀態(tài)114。對計算狀態(tài)113的改變可被復(fù)制到計算實例104B和104C。圖2A示出用于本地有狀態(tài)計算212(諸如例如編輯計算、排序計算等)的復(fù)制的附加視圖。一般而言,本地計算212接收輸入216并產(chǎn)生輸出217。
如所描繪的,主要計算實例201A包括源隊列206和207、本地計算212和宿隊列 208。本地計算212進一步包括計算狀態(tài)204和計算處理203。當計算處理203執(zhí)行時,源隊列206和207 (例如,使消息出隊)、計算狀態(tài)204 (例如,改變值)和輸出隊列208 (例如, 使消息入隊)可被改變。這些改變被復(fù)制到次要計算實例201B和201C處的相應(yīng)的源隊列 206和207、計算狀態(tài)204和輸出隊列208。因此,在主要計算實例201A失敗的情況下,次要計算實例201B、201C等之一可承擔主要計算節(jié)點的角色。一旦承擔主要計算節(jié)點的角色后,承擔的節(jié)點可接管計算處理203。作為位置計算的一部分的操作包括輸入數(shù)據(jù)的消耗、輸出數(shù)據(jù)的產(chǎn)生以及對其內(nèi)部狀態(tài)的修改,與事務(wù)相關(guān)聯(lián)。事務(wù)概念提供了跨越作為本地計算的一部分的操作集合的原子性保證。本地計算可增量式創(chuàng)建(順序或并行的)事務(wù)的集合,在其中它記錄需要被變得高度可用的信息。事務(wù)創(chuàng)建可包括自源隊列的出隊操作、到宿隊列中的入隊操作以及內(nèi)部狀態(tài)改變。當事務(wù)完成時,所述操作所產(chǎn)生的所有改變都作為原子單元被提交(或中止)。因此,事務(wù)幫助確保在發(fā)生故障的情況下從相同的一致視圖來繼續(xù)該處理。當事務(wù)未能提交(或就此中止)時,可以采用快速故障(fail-fast)方案。源隊列提供出隊操作而宿隊列提供入隊操作。事務(wù)提供提交或中止由本地計算做出的當前改變的能力。每個本地計算實現(xiàn)在必須為本地計算構(gòu)建新副本的情況下使用的狀態(tài)獲得/設(shè)定接口。而且,每個本地計算實現(xiàn)允許作為計算初始化的一部分(初始狀態(tài)、配置選項等)將初始處理參數(shù)傳入的接口。這樣,在本地計算過程中,消息被從源隊列出隊/消耗并在活動事務(wù)(例如,具有給定id)中被處理。作為事務(wù)的一部分,新狀態(tài)可被創(chuàng)建,且新輸出消息可被產(chǎn)生。當事務(wù)提交時,從源隊列出隊的消息被物理移除。所產(chǎn)生的新輸出消息也被入隊到宿隊列中。新提交狀態(tài)是在舊提交狀態(tài)和在處理時產(chǎn)生的未提交狀態(tài)改變之間的提交的協(xié)調(diào)。因為計算是以這種方式設(shè)計的,所以當在系統(tǒng)中發(fā)生故障切換時,計算的狀態(tài)和其輸入和輸出彼此一致。這為新型高可用本地計算的開發(fā)帶來了更簡單的體驗。作為本地計算的一部分執(zhí)行的操作在提交時刻生效。即,此時處理中發(fā)生的所有改變原子地發(fā)生。邏輯光標可維持在源隊列上,而宿隊列可直到提交后才被有效觸及。事務(wù)操作可以用不同模式來復(fù)制。在一些實施例中,使用饑渴復(fù)制模式。使用饑渴復(fù)制事務(wù),各操作在它們發(fā)生時被復(fù)制且副本集合中的每個副本對操作進行緩沖。在其他實施例中,使用懶惰復(fù)制模式。使用懶惰復(fù)制模式事務(wù),主要計算實例上的操作在稍后時刻在次要計算實例上被看到。當事務(wù)操作的開銷比復(fù)制它的開銷要小時,使用懶惰復(fù)制模式。因此,通過批量復(fù)制事務(wù)操作來分攤開銷是有益的。在懶惰模式復(fù)制事務(wù)的一種具體實現(xiàn)中,各操作只在提交時刻被復(fù)制。當事務(wù)中止時,事務(wù)可從源隊列恢復(fù)各元素并使得它們對于后續(xù)的出隊操作可用。新狀態(tài)改變可被忘記而不必然需要被撤消。因為宿隊列不可能已被觸及,所以輸出可被丟棄。在故障切換時,當前存在于新主要計算節(jié)點(舊次要計算節(jié)點)上的運行中事務(wù)可被丟棄(因為它們沒有工作要做)。如果故障切換不涉及主要計算節(jié)點的崩潰(例如,故障切換是由負載平衡對換角色動作引起的)時,舊的主要計算節(jié)點(新的次要計算節(jié)點) 上在進行的事務(wù)接收中止異常且舊的主要計算節(jié)點上的處理停止。
單一計算內(nèi)的各事務(wù)的并行執(zhí)行能夠發(fā)生。圖2B示出用于本地有狀態(tài)計算212的主要計算實例201A的進一步視圖。如所描繪的,計算處理203可包括多個操作,所述多個操作被執(zhí)行以實現(xiàn)本地有狀態(tài)計算212。用于使消息從源隊列出隊(例如,第3、4、6、7行)和使消息入隊到宿隊列中(例如,第11和 12行)的操作被包括于所述操作中。用于執(zhí)行基于消息內(nèi)容的計算的操作(例如,第5和 8行)也被包括在所述操作中。用于使消息入隊的操作(例如,第11和12行)也被包括在所述操作中。用于實現(xiàn)狀態(tài)改變的操作(例如,第9和10行)也被包括在所述操作中。這些操作可在指示事務(wù)的開頭和結(jié)尾的其他操作內(nèi)關(guān)閉(例如,第1、2、13、14行)。在主要計算實例201A的操作的執(zhí)行可被復(fù)制至系統(tǒng)存儲器214中以復(fù)制至次要計算節(jié)點201B、201C等。復(fù)制可以在每個操作的基礎(chǔ)上或者在一批操作的基礎(chǔ)上進行。圖6示出用于在副本集合處執(zhí)行有狀態(tài)本地計算的示例方法600的流程圖。將針對圖2B的組件和數(shù)據(jù)來描述方法600。方法600包括主要計算節(jié)點執(zhí)行本地計算的動作(動作601)。例如,主要計算實例 201A可執(zhí)行本地計算212。執(zhí)行本地計算包括為該本地計算創(chuàng)建事務(wù)的動作(動作602)。 例如,可執(zhí)行計算處理203的第1和2行來為位置計算212創(chuàng)建事務(wù)。執(zhí)行本地計算包括邏輯上執(zhí)行操作組中的一個或多個附加操作的動作(動作 603)。例如,可執(zhí)行計算處理203的第3-12行以邏輯上執(zhí)行本地計算212的一個或多個附加操作。邏輯上執(zhí)行一個或多個附加操作包括處理當前計算狀態(tài)的動作,處理當前計算狀態(tài)包括以下各動作中的一個或多個邏輯上產(chǎn)生附加計算狀態(tài)以及邏輯上修改現(xiàn)存計算狀態(tài)(動作604)。例如,可執(zhí)行第5和8行以處理計算狀態(tài)204以及分別來自相應(yīng)消息211 和212的內(nèi)容。處理計算狀態(tài)204可在邏輯上產(chǎn)生新的狀態(tài)或修改計算狀態(tài)204。可執(zhí)行第10行以寫出新的和/或經(jīng)改變的狀態(tài)214。邏輯上執(zhí)行一個或多個附加操作包括邏輯上執(zhí)行至少一個與輸入或輸出隊列有關(guān)的操作的動作(動作605)。例如,可執(zhí)行第3和4行或第6和7行以執(zhí)行分別與源隊列 206和207有關(guān)的輸入隊列操作??蓤?zhí)行第11和12行以執(zhí)行與宿隊列208有關(guān)的輸出隊列操作。執(zhí)行本地計算包括依照事務(wù)提交操作和事務(wù)中止操作之一終止事務(wù)的動作(動作606)。例如,可執(zhí)行計算處理203的第13和14行以提交在第1和2行創(chuàng)建的事務(wù)?;蛘撸蓤?zhí)行用于中止在第1和2行創(chuàng)建的事務(wù)的指令行。方法600包括將主要計算節(jié)點對本地計算的執(zhí)行復(fù)制到系統(tǒng)存儲器中以復(fù)制至一個或多個次要計算節(jié)點的動作(動作607),包括對為本地計算創(chuàng)建事務(wù)、邏輯上執(zhí)行操作組中的一個或多個附加操作、以及終止事務(wù)進行復(fù)制,對終止事務(wù)的復(fù)制以信號通知該一個或多個次要計算節(jié)點依照該事務(wù)提交操作或事務(wù)中止操作來應(yīng)用改變。例如,主要計算實例201A對本地計算212的執(zhí)行可被復(fù)制至系統(tǒng)存儲器214中以復(fù)制至次要計算實例 201B、201C等。本地計算212的執(zhí)行的復(fù)制可包括對在第1和2行的創(chuàng)建事務(wù)、在第3_12 行的執(zhí)行一個或多個附加操作、以及在第13和14行的提交事務(wù)進行復(fù)制。或者,當事務(wù)被中止時,復(fù)制可包括對中止該事務(wù)進行復(fù)制。復(fù)制可以在每個操作的基礎(chǔ)上(例如,一次一行)或在一批操作的基礎(chǔ)上(例如,成組的操作)進行。
對終止(提交或者中止)事務(wù)進行的復(fù)制用信號通知次要計算實例201B、201C等在適當時依照事務(wù)提交操作或事務(wù)中止操作應(yīng)用改變。方法600包括響應(yīng)于終止該事務(wù),主要計算節(jié)點依照該事務(wù)提交操作或該事務(wù)中止操作而應(yīng)用改變的動作(動作608)。例如,主要計算實例210A可依照事務(wù)提交操作(在第13和14行)應(yīng)用改變?;蛘撸饕嬎銓嵗?01A可依照事務(wù)中止操作應(yīng)用改變。方法600包括當事務(wù)提交操作終止該事務(wù)時,應(yīng)用物理改變以實現(xiàn)操作組中的每個操作的邏輯應(yīng)用的動作(動作609)。例如,當事務(wù)提交終止該事務(wù)時,主要計算實例201A 可應(yīng)用物理改變以實現(xiàn)計算處理203的第3-12行的邏輯應(yīng)用。應(yīng)用物理改變包括將該當前計算狀態(tài)與任何附加計算狀態(tài)和任何修改的現(xiàn)存計算狀態(tài)協(xié)調(diào)成為新的提交的計算狀態(tài)的動作(動作610)。例如,主要計算實例201A可將計算狀態(tài)204與經(jīng)改變的狀態(tài)214(其可包括經(jīng)改變的和/或新的狀態(tài))協(xié)調(diào)成為新的提交的狀態(tài)204。應(yīng)用物理改變包括方法600,方法600包括更改至少一個隊列的狀態(tài)以物理實現(xiàn)該至少一個與輸入或輸出隊列有關(guān)的操作的動作(動作611)。例如,主要計算實例201A可使消息211和212分別從源隊列206和207物理出隊并使消息213物理入隊到宿隊列208中。方法600包括當該事務(wù)中止操作終止該事務(wù)時,邏輯上翻轉(zhuǎn)該至少一個與輸入或輸出隊列有關(guān)的操作的動作(動作612)。例如,當事務(wù)中止終止該事務(wù)時,主要計算實例 201A可邏輯上翻轉(zhuǎn)計算處理203的第3-12行的執(zhí)行。這可包括翻轉(zhuǎn)使消息邏輯入隊和出隊的操作。圖3示出用于本地?zé)o狀態(tài)計算312(諸如例如,讀取計算、過濾計算等)的計算實例301的視圖。如圖3中描繪的,包括計算實例301、故障檢測器331和重啟模塊332。計算實例301包括源隊列306、本地計算312、以及宿隊列307。當計算處理303執(zhí)行時,源隊列 306(例如,使消息出隊)和輸出隊列208(例如,使消息入隊)可被改變。故障檢測器331 被配置成檢測計算處理303中的操作在何時何地失敗。重啟模塊332被配置成從故障點重啟計算處理303。圖7示出用于執(zhí)行無狀態(tài)本地計算的一示例方法700的流程圖。將參考圖3的組件和數(shù)據(jù)來描述方法700。方法700包括計算節(jié)點執(zhí)行本地?zé)o狀態(tài)計算的動作(動作701)。例如,計算實例 201可執(zhí)行本地計算312。方法700包括為本地?zé)o狀態(tài)計算創(chuàng)建事務(wù)的動作(動作702)。 例如,可執(zhí)行計算處理303的第0和1行來為位置計算312創(chuàng)建事務(wù)。方法700包括邏輯上執(zhí)行操作組中的一個或多個操作的動作(動作703)。例如,計算實例301可邏輯上執(zhí)行計算處理303的第2和3行。方法700包括可靠地檢測在完成操作組中的一個或多個操作之后的指定操作之前的本地計算的失敗的動作(動作704)。例如,故障檢測器331可檢測完成計算處理303的第4行之前的失敗341。方法700包括在該指定操作處可靠地重啟本地計算的動作(動作 705)。例如,重啟模塊332可在計算處理303的第4行發(fā)起重啟342以重啟本地計算312。方法700包括邏輯上執(zhí)行該指定操作和該指定操作之后的任何剩余操作,直到該多個操作被執(zhí)行的動作(動作706)。例如,計算實例301可邏輯上執(zhí)行計算處理303的第4行,然后執(zhí)行第5-9行。方法700包括依照事務(wù)提交操作和事務(wù)中止操作之一終止事務(wù)的動作(動作707)。例如,可執(zhí)行計算處理303的第8和9行以提交在第0和1行創(chuàng)建的事務(wù)?;蛘?,可執(zhí)行用于中止在第0和1行創(chuàng)建的事務(wù)的指令行。方法700包括響應(yīng)于終止該事務(wù),主要計算節(jié)點依照該事務(wù)提交操作或該事務(wù)中止操作而應(yīng)用改變的動作(動作708)。例如,計算實例301可依照事務(wù)提交操作(在第8 和9行)應(yīng)用改變。或者,計算實例301可依照事務(wù)中止操作應(yīng)用改變。方法700包括當事務(wù)提交操作終止該事務(wù)時,應(yīng)用物理改變以實現(xiàn)操作組中的多個操作中的每個操作的邏輯應(yīng)用的動作(動作709)。例如,當事務(wù)提交終止該事務(wù)時,計算實例301可應(yīng)用物理改變以實現(xiàn)計算處理303的第2-7行的邏輯應(yīng)用。方法700包括更改至少一個隊列的狀態(tài)以物理實現(xiàn)該至少一個與輸入或輸出隊列有關(guān)的操作的動作(動作710)。例如,計算實例301可使消息211從源隊列206物理出隊并使消息312物理入隊到宿隊列307中。方法700包括當該事務(wù)中止操作終止該事務(wù)時,邏輯上翻轉(zhuǎn)該至少一個與輸入或輸出隊列有關(guān)的操作的動作(動作711)。例如,當事務(wù)中止終止該事務(wù)時,計算實例301可邏輯上翻轉(zhuǎn)計算處理303的第2-8行的執(zhí)行。這可包括翻轉(zhuǎn)使消息邏輯入隊和出隊的操作。圖4A示出便于執(zhí)行分布式計算499的分布式計算體系結(jié)構(gòu)400。如所描繪的,分布式計算體系結(jié)構(gòu)包括副本491和492。副本491包括主要計算實例401A和次要計算實例 401B和401C。同樣地,副本492包括主要計算實例402A和次要計算實例402B和402C?!愣?,可依照隊列到隊列協(xié)議將消息(例如,消息496)從副本491傳輸?shù)礁北?92。隊列到隊列協(xié)議負責(zé)實現(xiàn)用于將消息從宿隊列只一次按順序傳遞到一個或多個下游源隊列的狀態(tài)機。隊列協(xié)議可將消息傳遞限制于宿隊列中提交的消息。限制于提交的消息可以通過保持帶有與每個提交一起更新的提交標記的每個宿隊列中的狀態(tài)而實現(xiàn)。隊列到隊列協(xié)議還可實現(xiàn)在任一或全部端點應(yīng)用的流控制策略以防止系統(tǒng)的過度利用或利用不足。隊列到隊列協(xié)議可依賴現(xiàn)存基本構(gòu)造(例如,覆蓋網(wǎng)絡(luò))組件,諸如例如一致路由以及(例如,完美的)故障檢測。故障檢測可用于確定在故障切換的情況下下游計算的新的主要副本,而路由層可用于實現(xiàn)可靠的消息傳遞。接收者計算節(jié)點的協(xié)議端點可實現(xiàn)重復(fù)檢測、消息重排序和基于隊列定額的扼流。發(fā)送者計算節(jié)點的端點可實現(xiàn)具有重試和指數(shù)避讓的發(fā)送窗口算法。使用窗口機制,隊列到隊列協(xié)議可在表示分布式計算的DAG中實現(xiàn)流控制。下游分區(qū)的本地計算的臨時性能瓶頸轉(zhuǎn)化為隊列到隊列協(xié)議對饋送到受影響的本地計算的源隊列的宿隊列施加反向壓力。該反向壓力進而又影響?zhàn)佀偷绞苡绊懙乃揸犃械纳嫌畏謪^(qū)的本地計算的入隊操作的及時完成。及時完成的減少進一步又轉(zhuǎn)化為上游分區(qū)的本地計算的源隊列變滿。這有可能向上游傳播到分布式計算的各源。窗口機制還能在下游分區(qū)的本地計算中的臨時性能瓶頸被除去后將表示分布式計算的DAG自動恢復(fù)到其健康狀態(tài)?;氐綀D4A,主要計算實例401A包括便于執(zhí)行本地計算441的計算狀態(tài)411和計算處理421。本地計算441可以將消息入隊到宿隊列431。宿隊列431可包括指示宿隊列 431內(nèi)的一位置的提交標記441。在該位置后的消息是提交的消息,而在該位置前的消息還沒有提交(并因此在中止時仍可被除去)。主要計算實例401A被配置成作為分布式計算的一部分將宿隊列431中的提交的消息發(fā)送至主要計算實例402。主要計算實例402A包括便于執(zhí)行本地計算442的計算狀態(tài)412和計算處理422。 本地計算442可以將消息從源隊列432出隊。主要計算實例402A被配置成作為分布式計算的一部分在源隊列432中接收來自主要計算實例401A的消息。本發(fā)明的實施例包括在表示分布式計算的DAG中彼此互聯(lián)的一個或多個有狀態(tài)本地計算和/或一個或多個無狀態(tài)本地計算的組合。圖8示出用于執(zhí)行分布式計算的一示例方法800的流程圖。將參考圖4A中的分布式計算體系結(jié)構(gòu)400的組件和數(shù)據(jù)來描述方法800。方法800包括第一副本集合執(zhí)行表示分布式計算的一部分的第一本地計算的動作(動作801)。例如,作為分布式計算499的一部分,副本491可執(zhí)行本地計算441。執(zhí)行第一本地計算包括為第一本地計算創(chuàng)建事務(wù)的動作(動作80幻。例如,計算處理421中的操作可為本地計算441創(chuàng)建事務(wù)。執(zhí)行第一本地計算包括邏輯上執(zhí)行第一本地計算的操作組的動作,包括執(zhí)行至少一個與輸出隊列有關(guān)的操作(動作803)。例如,主要計算實例401A可邏輯上執(zhí)行計算處理 421中的操作組。該操作組可包括使消息496入隊到宿隊列431中。執(zhí)行第一本地計算包括提交該事務(wù)的動作(動作804)。例如,為本地計算441創(chuàng)建的事務(wù)可被提交。響應(yīng)于提交該事務(wù),方法800包括應(yīng)用物理改變以實現(xiàn)操作組中的每個操作的邏輯應(yīng)用的動作,包括將消息插入到至少一個輸出隊列中以物理實現(xiàn)該至少一個與輸出隊列有關(guān)的操作(動作805)。例如,主要計算實例401A可應(yīng)用物理改變以實現(xiàn)計算處理421中的各操作的邏輯應(yīng)用。物理操作可包括將經(jīng)改變的和/或新的狀態(tài)與計算狀態(tài)411進行協(xié)調(diào)并物理地使消息496入隊到宿隊列431中。方法800包括更新該至少一個輸出隊列內(nèi)的提交標記以指示插入的消息是提交的消息的動作(動作806)。例如,主要計算節(jié)點401A可更新提交標記441以指示消息496 是提交的消息。方法800包括依照檢測插入的消息已被提交的隊列到隊列協(xié)議將消息從第一副本集合的至少一個輸出隊列傳送至至少一個第二副本集合的至少一個輸入隊列的動作 (動作807)。例如,消息496可依照檢測到消息496已被提交的隊列到隊列協(xié)議(具有在副本491處的發(fā)送端點和在副本492處的接收端點)而被從宿隊列431傳送到源隊列432。方法800包括第二副本集合執(zhí)行表示分布式計算的下一部分的第二本地計算的動作(動作808)。例如,作為分布式計算499的一部分,副本492可執(zhí)行本地計算442。方法800包括為第二本地計算創(chuàng)建第二事務(wù)的動作(動作809)。例如,計算處理421中的操作可為本地計算441創(chuàng)建事務(wù)。方法800包括邏輯上執(zhí)行第二本地計算的操作組的動作,包括執(zhí)行至少一個與輸入隊列有關(guān)的操作(動作810)。例如,主要計算實例402A可邏輯上執(zhí)行計算處理422中的操作組。該操作組可包括使消息496從源隊列432出隊。方法800包括依照事務(wù)提交操作和事務(wù)中止操作之一終止第二事務(wù)的動作(動作 811)。例如,為本地計算441創(chuàng)建的事務(wù)可依照事務(wù)提交操作或事務(wù)中止操作而被終止。方法800包括當事務(wù)提交操作終止事務(wù)時,應(yīng)用物理改變以實現(xiàn)該操作組中的每個操作的邏輯應(yīng)用的動作(動作812),包括訪問來自該至少一個輸入隊列的消息以物理實現(xiàn)該至少一個與輸入隊列有關(guān)的操作。例如,主要計算實例402A可應(yīng)用物理改變以實現(xiàn)計算處理422中的操作的邏輯應(yīng)用。物理操作可包括將經(jīng)改變的和/或新的狀態(tài)與計算狀態(tài) 412進行協(xié)調(diào)并物理地使消息496從源隊列431出隊。方法800包括當該事務(wù)中止操作終止該事務(wù)時,邏輯上翻轉(zhuǎn)該至少一個與輸入隊列有關(guān)的操作的動作(動作813)。例如,當事務(wù)中止操作終止來自本地計算442的操作時, 主要計算實例402A可以邏輯上翻轉(zhuǎn)在計算處理422中的操作執(zhí)行。這可包括翻轉(zhuǎn)消息491 的邏輯出隊。圖4B示出便于作為有狀態(tài)分布式計算499的一部分確認接收的消息的分布式計算體系結(jié)構(gòu)400。圖9示出用于作為有狀態(tài)分布式計算的一部分來確認接收到的消息的一示例方法900的流程圖。將參考圖4B中的分布式計算體系結(jié)構(gòu)400的組件和數(shù)據(jù)來描述方法900。方法900包括依照隊列到隊列協(xié)議在第一副本集合的輸入隊列處接收消息的動作(動作901),其中該消息是響應(yīng)于該消息在第二副本集合處被提交而從第二副本集合處的輸出隊列發(fā)送的。例如,副本492依照隊列到隊列協(xié)議在宿隊列432處接收消息496。消息496是響應(yīng)于該消息在副本491處被提交而從在副本491的源隊列431發(fā)送的。方法900包括將該消息復(fù)制至第二副本集合中包括的一個或多個次要計算節(jié)點的動作(動作902)。例如,副本492可將消息496復(fù)制至次要計算節(jié)點402B、402C等。方法900包括從一個或多個次要計算節(jié)點中的寫入法定數(shù)量個次要計算節(jié)點接收該消息已被成功復(fù)制的確認的動作(動作903),來自該寫入法定數(shù)量個次要計算節(jié)點的確認表示該消息在該第一副本集合內(nèi)被提交了法定次數(shù)。例如,次要計算實例402B、402C 等中的寫入法定數(shù)量個次要計算實例(例如,簡單多數(shù)或其他指定閾值)可發(fā)送確認至主要計算實例402A,從而確認消息496的接收。例如,次要計算實例402B可發(fā)送確認497,次要計算實例402C可發(fā)送確認498等。主要計算實例402A可從次要計算節(jié)點接收確認,包括確認497、498等。在某些實施例中,寫入法定數(shù)量被限定為[(N+l)/2]的向上取整,其中N等于該副本集合中的副本計數(shù)。因此,如果一副本具有五個次要計算實例,則所述次要計算實例中的至少三個必須確認消息以達到寫入法定數(shù)量。方法900包括第一副本集合響應(yīng)于該消息在第一副本集合內(nèi)被提交了法定次數(shù)而發(fā)送確認至第二副本集合的動作(動作904),該確認對第一副本集合成功接收該消息且第二副本集合被允許去除該消息進行確認。例如,副本492可響應(yīng)于足夠數(shù)量的次要計算節(jié)點確認消息496的接收而將確認(ACK) 494發(fā)送回副本491。確認494指示副本492成功接收了消息496且副本491被允許去除消息496。圖5A示出便于確認無狀態(tài)本地計算之間的消息的一示例分布式計算體系結(jié)構(gòu)。 如所描繪的,分布式計算體系結(jié)構(gòu)500包括計算實例501、502及503和用于執(zhí)行分布式計算M9的其他計算實例504及506。計算實例501、502和503分別包括無狀態(tài)計算處理 521,522和523。計算實例501、502和503中的每一個包括源隊列和宿隊列以便于例如依照隊列到隊列協(xié)議進行消息交換。計算實例501包括源隊列531和宿隊列M1,計算實例 502包括源隊列532和宿隊列M2,計算實例503包括源隊列533和宿隊列M3。其他計算實例504可在計算實例501之前(或在計算實例501的上游)。其他計算實例505可在計算實例503之后(或在計算實例503的下游)。確認在無狀態(tài)本地計算之間發(fā)送的消息可以不同于確認在有狀態(tài)本地計算之間發(fā)送的消息。例如,無狀態(tài)本地計算可在單一計算實例上(而不是副本上)操作。如此,所接收的消息不被復(fù)制到次要計算實例。進而,因為無狀態(tài)本地計算可能失敗并重啟(在無復(fù)制的情況下),所以失敗可能導(dǎo)致接收到的消息在一計算實例處被刪除。然而,為了重啟, 該無狀態(tài)本地計算可能再次需要訪問該消息。因此,該無狀態(tài)本地計算可以從上游計算實例重新請求該消息。即,如果下游計算實例過早向上游發(fā)送確認通知然后死機并被重啟,則再下游的計算實例可能遭受輸入損失。相應(yīng)地,在某些實施例中,無狀態(tài)計算在它基于輸入創(chuàng)建的輸出本身已被確認之后才確認這些輸入。用這種方式進行的確認可以遞歸,比如例如當多個無狀態(tài)本地計算在 DAG中彼此跟隨時。圖10示出用于作為無狀態(tài)分布式計算的一部分確認接收到的消息的一示例方法 1000的流程圖。將參考分布式計算體系結(jié)構(gòu)500的組件和數(shù)據(jù)來描述方法1000。消息581可在源隊列531從其他計算實例504接收。一旦接收消息581之后,計算實例501可執(zhí)行計算處理521。執(zhí)行計算處理521可使得消息582被入隊到宿隊列541 中。一旦消息582被提交之后,消息582可被發(fā)送至計算實例502。方法1000包括依照隊列到隊列協(xié)議在第一計算節(jié)點的輸入隊列處接收消息的動作(動作1001),其中該消息是響應(yīng)于該消息在第二計算節(jié)點處被提交而從第二計算節(jié)點處的輸出隊列發(fā)送的。例如,源隊列532可依照隊列到隊列協(xié)議并響應(yīng)于消息582在計算實例501被提交而從宿隊列541接收消息582。方法1000包括為本地?zé)o狀態(tài)計算創(chuàng)建事務(wù)的動作(動作1002)。例如,計算實例 502可為計算處理522創(chuàng)建事務(wù)。方法1000包括邏輯上執(zhí)行該操作組的動作,包括基于該消息產(chǎn)生附加消息(動作1003)。例如,計算實例502可邏輯上執(zhí)行計算處理522中的操作組。邏輯上執(zhí)行計算處理522中的該操作組可包括基于消息582產(chǎn)生消息583。方法1000 包括提交事務(wù)的動作(動作1004)。例如,為計算處理522創(chuàng)建的事務(wù)可被提交。響應(yīng)于提交該事務(wù),方法1000包括應(yīng)用物理改變以實現(xiàn)操作組中的每個操作的邏輯應(yīng)用的動作(動作1005),包括將該附加消息插入到至少輸出隊列中以物理實現(xiàn)該至少一個與輸出隊列有關(guān)的操作。例如,響應(yīng)于提交計算處理522的事務(wù),計算實例502可應(yīng)用物理操作以實現(xiàn)邏輯上執(zhí)行的操作。應(yīng)用物理操作可包括使消息583入隊到宿隊列542 中。方法1000包括響應(yīng)于該消息在第二計算節(jié)點處被提交而依照隊列到隊列協(xié)議將所述附加消息從第一計算節(jié)點的該至少一個輸出隊列傳輸?shù)降谌嬎愎?jié)點的至少一個輸入隊列的動作(動作1006)。例如,消息583可響應(yīng)于消息583在宿隊列542被提交而依照隊列到隊列協(xié)議被從宿隊列542傳送到源隊列533。 一旦接收到消息583之后,計算實例503可執(zhí)行計算處理523并將消息584傳送到其他計算實例506上。最終,由于達到末尾計算實例(或有狀態(tài)本地計算),計算實例502 可接收對消息584的確認。進而,計算實例503可發(fā)送確認592至計算實例502。確認592 指示計算實例503成功接收了消息583且計算實例502被允許去除消息583。
方法1000包括,在將該附加消息傳送到第三計算節(jié)點之后,從第三計算節(jié)點接收確認的動作(動作1007),該確認對第三計算節(jié)點成功接收了該附加消息進行確認。例如, 計算實例502可在將消息583發(fā)送到計算實例503之后接收確認592。方法1000包括響應(yīng)于從第三計算節(jié)點接收到確認,第一計算節(jié)點向第二計算節(jié)點發(fā)送進一步確認的動作(動作1008),該進一步確認對第一計算節(jié)點成功接收了該消息進行確認。例如,計算實例502可發(fā)送確認591至計算實例501。確認591指示計算實例 502成功接收了消息582且計算實例501被允許去除消息582。計算實例501然后可在適當時向上游發(fā)送確認消息594至其他計算實例504。圖5B示出便于確認無狀態(tài)和有狀態(tài)本地計算之間的消息的一示例分布式計算體系結(jié)構(gòu)550。如所描繪的,分布式計算體系結(jié)構(gòu)550包括副本511、計算實例502和副本503 和用于執(zhí)行分布式計算599的其他計算實例514和516。副本511包括主要計算實例511A 和次要計算實例51IB和511C。副本512包括主要計算實例512A和次要計算實例512B和 512C。主要計算實例511A包括有狀態(tài)計算處理Ml。計算實例512包括無狀態(tài)計算處理 5420主要計算實例513A包括有狀態(tài)計算處理M3。主要計算實例511A、計算實例502和主要計算實例513A中的每一個包括源隊列和宿隊列以便于例如依照隊列到隊列協(xié)議進行消息交換。主要計算實例511A包括源隊列551 和宿隊列561,計算實例502包括源隊列552和宿隊列562。主要計算實例513A包括源隊列553和宿隊列563。其他計算實例514可在副本511之前(或在副本511的上游)。其他計算實例505可在副本513之后(或在副本513的下游)。消息5M可在源隊列551從其他計算實例5M接收。一旦接收到消息554,主要計算實例55IA將消息5M復(fù)制到次要計算實例51IB和511C。次要計算實例51IB和51IC (寫入法定數(shù)量)可通過分別向計算實例511A發(fā)送確認564和566來對消息554的接收進行確認。主要計算實例551A可響應(yīng)于消息5M被提交了法定次數(shù)而將確認574發(fā)送回其他計算實例514。確認575指示副本511成功接收了消息5M且其他計算實例514被允許去除消息554.計算處理541可執(zhí)行,從而產(chǎn)生消息556并使消息556入隊到宿隊列553中。宿隊列561包括指示宿隊列561內(nèi)的一位置的提交標記567。在該位置后的消息是提交的消息,而在該位置前的消息還沒有被提交(并因此在中止時仍可被移除)。主要計算實例511A 被配置成作為分布式計算599的一部分將宿隊列553中的提交的消息發(fā)送至計算實例512。源隊列552可依照隊列到隊列協(xié)議并響應(yīng)于消息561在主要計算實例511A處被提交而從宿隊列561接收消息556??蓤?zhí)行計算處理M2以使得消息557被入隊到宿隊列 562中。一旦消息557被提交,消息557可被發(fā)送至主要計算實例513A。消息557可響應(yīng)于消息557在宿隊列562處被提交而依照隊列到隊列協(xié)議被從宿隊列562傳送到源隊列533。 計算實例511被配置成作為分布式計算599的一部分將宿隊列562中的提交的消息發(fā)送至主要計算實例513A。如同之前描述的,計算實例512(無狀態(tài)本地操作)可以不立即對消息556的接收進行確認。消息557可在源隊列553從計算實例512接收。一旦接收到消息557,主要計算實例513A將消息557復(fù)制到次要計算實例51 和513C。次要計算實例51 和513C (寫入法定數(shù)量)可通過分別向主要計算實例511A發(fā)送確認568和569來對消息557的接收進行確認。主要計算實例513A可響應(yīng)于消息557被提交了法定次數(shù)而將確認572發(fā)送回其他計算實例512。確認572指示副本513成功接收了消息557且計算實例512被允許去除消息557。 響應(yīng)于確認572,計算實例512然后可將確認573向上游發(fā)送至主要計算實例511A。確認 573指示計算實例512成功接收了消息556且主要計算實例511A被允許去除消息556。計算處理543也可執(zhí)行,從而產(chǎn)生消息558并使消息558入隊到宿隊列533中。宿隊列563包括指示宿隊列563內(nèi)的一位置的提交標記571。在該位置后的消息是提交的消息,而在該位置前的消息還沒有被提交(并因此在中止時仍可被移除)。主要計算實例513A 被配置成作為分布式計算599的一部分將宿隊列563中的提交的消息發(fā)送至其他計算實例 516。主要計算實例513A可最終從其他計算實例516接收回針對消息558的確認。如同描述過的,本發(fā)明的實施例包括可用于執(zhí)行高效(存儲器內(nèi))的、可伸縮的、 能從故障恢復(fù)的、原子的、流控制的、長時間運行的無狀態(tài)的和有狀態(tài)的分布式計算的通用分布式計算基礎(chǔ)設(shè)施。由分布式計算基礎(chǔ)設(shè)施提供的保證可以建立在底層分布式基本構(gòu)造 (例如,鄰居和路由一致性、完美的故障檢測和數(shù)據(jù)一致的復(fù)制以及故障切換重新配置)的現(xiàn)存保證的基礎(chǔ)上,以隱藏容錯的復(fù)雜性、允許大規(guī)模高可用處理、允許高效資源利用以及便于有狀態(tài)和無狀態(tài)計算的通用開發(fā)。分布式計算基礎(chǔ)設(shè)施還可提供一基底,在該基底上可增強現(xiàn)存分布式計算模型以使之變得能從故障恢復(fù)。本發(fā)明可被具體化為其他具體形式而不背離其精神或本質(zhì)特征。所描述的實施例在所有方面都應(yīng)被認為僅是說明性而非限制性的。因此,本發(fā)明的范圍由所附權(quán)利要求書而非前述描述指示。落入權(quán)利要求書的等效方案的含義和范圍內(nèi)的所有改變被權(quán)利要求書的范圍所涵蓋。
權(quán)利要求
1.一種用于在基于基本構(gòu)造的分布式計算體系結(jié)構(gòu)O00)內(nèi)的副本集合處執(zhí)行有狀態(tài)本地計算的方法,所述副本集合包括一個或多個處理器和系統(tǒng)存儲器,所述副本集合包括主要計算節(jié)點O01A)和一個或多個次要計算節(jié)點O01B,201C),所述主要計算節(jié)點 (201A)和所述一個或多個次要計算節(jié)點(201B,201C)具有相同的當前計算狀態(tài)Q04),所述主要計算節(jié)點O01A)和所述一個或多個次要計算節(jié)點(201B,201C)中的每一個被配置成具有用于執(zhí)行所述有狀態(tài)本地計算012)的相同的可執(zhí)行操作組003),所述操作組 (203)包括至少一個與輸入或輸出隊列有關(guān)的操作和至少一個修改所述計算狀態(tài)的操作, 所述方法包括所述主要計算節(jié)點O01A)通過如下動作執(zhí)行所述本地有狀態(tài)計算012)的動作 為所述本地計算創(chuàng)建事務(wù)的動作;邏輯上執(zhí)行所述操作組O03)中的一個或多個附加操作的動作,包括 處理所述當前計算狀態(tài)(204)的動作,處理所述當前計算狀態(tài)(204)包括以下動作中的一個或多個邏輯上產(chǎn)生附加計算狀態(tài)(214)和邏輯上修改現(xiàn)存計算狀態(tài)O04); 邏輯上執(zhí)行所述至少一個與輸入或輸出隊列有關(guān)的操作的動作;以及依照事務(wù)提交操作和事務(wù)中止操作之一終止所述事務(wù)的動作; 將所述主要計算節(jié)點對所述本地計算(21 的執(zhí)行復(fù)制至系統(tǒng)存儲器(214)中以復(fù)制至所述一個或多個次要計算節(jié)點(201B,201C)的動作,包括對為所述本地計算創(chuàng)建事務(wù)、 邏輯上執(zhí)行所述操作組O03)中的所述一個或多個附加操作、以及終止所述事務(wù)進行復(fù)制,對終止所述事務(wù)的復(fù)制以信號通知所述一個或多個次要計算節(jié)點(201B,201C)依照所述事務(wù)提交操作或所述事務(wù)中止操作而應(yīng)用改變;響應(yīng)于終止所述事務(wù),所述主要計算節(jié)點(201)依照所述事務(wù)提交操作或所述事務(wù)中止操作而應(yīng)用改變的動作,包括當所述事務(wù)提交操作終止所述事務(wù)時,應(yīng)用物理改變以實現(xiàn)所述操作組O03)中的每個操作的邏輯應(yīng)用的動作,包括將所述當前計算狀態(tài)(204)與任何附加計算狀態(tài)(214)和任何經(jīng)修改的現(xiàn)存計算狀態(tài)協(xié)調(diào)成為新的提交的計算狀態(tài)的動作;以及更改至少一個隊列(208)的狀態(tài)以物理實現(xiàn)所述至少一個與輸入或輸出隊列有關(guān)的操作的動作;以及當所述事務(wù)中止操作終止所述事務(wù)時,邏輯上翻轉(zhuǎn)所述至少一個與輸入或輸出隊列有關(guān)的操作的動作。
2.如權(quán)利要求1所述的方法,其特征在于,所述主要計算節(jié)點執(zhí)行所述本地計算的動作包括所述主要計算節(jié)點執(zhí)行表示分布式計算的一部分的本地計算的動作。
3.如權(quán)利要求1所述的方法,其特征在于,將所述主要計算節(jié)點對所述本地計算的執(zhí)行復(fù)制至所述系統(tǒng)存儲器中以復(fù)制至所述一個或多個次要計算節(jié)點的動作包括復(fù)制所述至少一個與輸入或輸出隊列有關(guān)的操作的動作。
4.如權(quán)利要求1所述的方法,其特征在于,還包括主要計算節(jié)點從所述一個或多個次要計算節(jié)點中的寫入法定數(shù)量個次要計算節(jié)點接收所述消息已被成功復(fù)制的指示的動作;向上游主要計算實例確認所述消息的接收的動作。
5.如權(quán)利要求1所述的方法,其特征在于,更改至少一個隊列的狀態(tài)以物理實現(xiàn)所述至少一個與輸入或輸出隊列有關(guān)的操作的動作包括使消息入隊到宿隊列中的動作。
6.如權(quán)利要求5所述的方法,其特征在于,還包括 在所述宿隊列中將所述消息標記為已提交的動作;以及依照隊列到隊列協(xié)議將所述消息發(fā)送至下游主要計算節(jié)點的動作。
7.如權(quán)利要求1所述的方法,其特征在于,更改至少一個隊列的狀態(tài)以物理實現(xiàn)所述至少一個與輸入或輸出隊列有關(guān)的操作的動作包括依照基于所述計算節(jié)點間的負載狀態(tài)而放松或收緊所述主要計算節(jié)點和被配置成執(zhí)行不同的本地計算的計算節(jié)點之間的數(shù)據(jù)流的策略來更改至少一個隊列的狀態(tài)。
8.一種用于在基于基本構(gòu)造的分布式計算體系結(jié)構(gòu)(300)內(nèi)的計算節(jié)點處執(zhí)行無狀態(tài)本地計算的方法,所述計算節(jié)點包括一個或多個處理器和系統(tǒng)存儲器,所述計算節(jié)點被配置成具有用于執(zhí)行所述無狀態(tài)本地計算的多個操作的可執(zhí)行組(303),所述操作組 (303)包括至少一個與輸入或輸出隊列有關(guān)的操作,所述方法包括所述計算節(jié)點(301)通過如下動作執(zhí)行所述本地?zé)o狀態(tài)計算(312)的動作 為所述本地?zé)o狀態(tài)計算創(chuàng)建事務(wù)的動作; 邏輯上執(zhí)行所述操作組(303)中的一個或多個操作的動作;可靠地檢測在完成所述操作組(303)中的所述一個或多個操作之后的指定操作前所述本地計算(312)的失敗(341)的動作;在所述指定操作處可靠地重啟(34 所述本地計算的動作;邏輯上執(zhí)行所述指定操作和所述指定操作之后的任何剩余操作,直到所述多個操作 (303)被執(zhí)行的動作;以及依照事務(wù)提交操作和事務(wù)中止操作之一終止所述事務(wù)的動作; 響應(yīng)于終止所述事務(wù),所述計算節(jié)點(30 依照所述事務(wù)提交操作或所述事務(wù)中止操作而應(yīng)用改變的動作,包括當所述事務(wù)提交操作終止所述事務(wù)時,應(yīng)用物理改變以實現(xiàn)所述操作組(303)中的所述多個操作中的每個操作的邏輯應(yīng)用的動作,包括更改至少一個隊列(307)的狀態(tài)以物理實現(xiàn)所述至少一個與輸入或輸出隊列有關(guān)的操作的動作;以及當所述事務(wù)中止操作終止所述事務(wù)時,邏輯上翻轉(zhuǎn)所述至少一個與輸入或輸出隊列有關(guān)的操作的動作。
9.如權(quán)利要求8所述的方法,其特征在于,所述計算節(jié)點執(zhí)行所述本地?zé)o狀態(tài)計算的動作包括所述計算節(jié)點執(zhí)行表示分布式計算的一部分的本地?zé)o狀態(tài)計算的動作。
10.如權(quán)利要求8所述的方法,其特征在于,可靠地檢測完成所述操作組中的所述一個或多個操作之后的指定操作之前所述本地計算的失敗的動作包括完美故障檢測器檢測所述本地計算的失敗的動作。
11.如權(quán)利要求8所述的方法,其特征在于,更改至少一個隊列的狀態(tài)以物理實現(xiàn)所述至少一個與輸入或輸出隊列有關(guān)的操作的動作包括使第一消息從源隊列出隊的動作; 使第二消息入隊到宿隊列中的動作;從下游計算實例接收對所述第二消息的確認的動作;以及響應(yīng)于從所述下游計算實例接收到對所述第二消息的所述確認而發(fā)送所述第一消息的確認至上游計算實例的動作。
12.如權(quán)利要求8所述的方法,其特征在于,更改至少一個隊列的狀態(tài)以物理實現(xiàn)所述至少一個與輸入或輸出隊列有關(guān)的操作的動作包括依照基于所述計算節(jié)點間的負載狀態(tài)而放松或收緊所述主要計算節(jié)點和被配置成執(zhí)行不同的本地計算的計算節(jié)點之間的數(shù)據(jù)流的策略來更改至少一個隊列的狀態(tài)。
13.如權(quán)利要求12所述的方法,其特征在于,依照基于計算節(jié)點間的負載狀態(tài)而放松或收緊數(shù)據(jù)流的策略來更改至少一個隊列的狀態(tài)包括基于如下各項來更改至少一個隊列的狀態(tài)的動作網(wǎng)絡(luò)利用率和所述計算節(jié)點間的可用網(wǎng)絡(luò)帶寬中的一項或更多項。
14.如權(quán)利要求12所述的方法,其特征在于,依照基于計算節(jié)點間的負載狀態(tài)而放松或收緊數(shù)據(jù)流的策略來更改至少一個隊列的狀態(tài)的動作包括依照基于所述主要計算節(jié)點處的負載狀態(tài)而放松或收緊所述主要計算節(jié)點和被配置成執(zhí)行不同的本地計算的計算節(jié)點之間的數(shù)據(jù)流的策略來更改至少一個隊列的狀態(tài)的動作。
15.一種在基于基本構(gòu)造的分布式計算體系結(jié)構(gòu)O00)內(nèi)的副本集合處使用的計算機程序產(chǎn)品,所述副本集合包括主要計算節(jié)點O01A)和一個或多個次要計算節(jié)點O01B, 201C),所述主要計算節(jié)點Q01A)和所述一個或多個次要計算節(jié)點(201B,201C)具有相同的當前計算狀態(tài)004),所述主要計算節(jié)點Q01A)和所述一個或多個次要計算節(jié)點O01B, 201C)中的每一個被配置成具有用于執(zhí)行有狀態(tài)本地計算012)的相同的可執(zhí)行操作組 003),所述操作組(203)包括至少一個與輸入或輸出隊列有關(guān)的操作和至少一個修改所述計算狀態(tài)的操作,所述計算機程序產(chǎn)品用于實現(xiàn)一種用于在所述副本集合處執(zhí)行所述有狀態(tài)本地計算的方法,所述計算機程序產(chǎn)品包括一個或多個存儲有計算機可執(zhí)行指令的計算機存儲設(shè)備,所述計算機可執(zhí)行指令當在處理器處執(zhí)行時使得主要計算實例執(zhí)行一種方法,所述方法包括通過如下動作執(zhí)行所述本地有狀態(tài)計算012) 為所述本地計算創(chuàng)建事務(wù);邏輯上執(zhí)行所述操作組O03)中的一個或多個附加操作,包括 處理所述當前計算狀態(tài)004),處理所述當前計算狀態(tài)(204)包括以下動作中的一個或多個邏輯上產(chǎn)生附加計算狀態(tài)(214)和邏輯上修改現(xiàn)存計算狀態(tài); 邏輯上執(zhí)行所述至少一個與輸入或輸出隊列有關(guān)的操作;以及依照事務(wù)提交操作終止所述事務(wù);在每個操作的基礎(chǔ)上將所述主要計算節(jié)點對所述操作組O03)中的每個操作的執(zhí)行復(fù)制至系統(tǒng)存儲器中以復(fù)制至所述一個或多個次要計算節(jié)點,包括 對為所述本地計算創(chuàng)建事務(wù)進行復(fù)制;對邏輯上執(zhí)行所述操作組O03)中的所述一個或多個附加操作進行復(fù)制,以及對提交所述事務(wù)進行復(fù)制,其中對提交所述事務(wù)的復(fù)制以信號通知所述一個或多個次要計算節(jié)點依照所述事務(wù)提交操作應(yīng)用改變;響應(yīng)于提交所述事務(wù),應(yīng)用物理改變以實現(xiàn)所述操作組O03)中的每個操作的邏輯應(yīng)用,包括將所述當前計算狀態(tài)(204)與任何附加計算狀態(tài)(214)和任何經(jīng)修改的現(xiàn)存計算狀態(tài)協(xié)調(diào)成為新的提交的計算狀態(tài);以及更改至少一個隊列(208)的狀態(tài)以物理實現(xiàn)所述至少一個與輸入或輸出隊列有關(guān)的操作。
全文摘要
本發(fā)明涉及在分布式基礎(chǔ)設(shè)施中執(zhí)行計算。本發(fā)明涉及用于在分布式基礎(chǔ)設(shè)施中執(zhí)行計算的方法、系統(tǒng)和計算機程序產(chǎn)品。本發(fā)明的實施例包括可用于執(zhí)行高效(存儲器內(nèi))的、可伸縮的、能從故障恢復(fù)的、原子的、流控制的、長時間運行的無狀態(tài)的和有狀態(tài)的分布式計算的通用分布式計算基礎(chǔ)設(shè)施。由分布式計算基礎(chǔ)設(shè)施提供的保證可以建立在底層分布式基本構(gòu)造的現(xiàn)存保證的基礎(chǔ)上,以隱藏容錯的復(fù)雜性、允許大規(guī)模高可用處理、允許高效資源利用以及便于有狀態(tài)和無狀態(tài)計算的通用開發(fā)。分布式計算基礎(chǔ)設(shè)施還可提供一基底,在該基底上可增強現(xiàn)存分布式計算模型以使之變得能從故障恢復(fù)。
文檔編號H04L29/08GK102404383SQ20111030668
公開日2012年4月4日 申請日期2011年9月27日 優(yōu)先權(quán)日2010年9月28日
發(fā)明者G·K·R·卡基法亞, M·G·塔爾塔 申請人:微軟公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
丰原市| 苏州市| 威宁| 麻栗坡县| 陈巴尔虎旗| 渑池县| 彰武县| 兰州市| 来凤县| 塔城市| 云霄县| 恭城| 高邑县| 舒城县| 渝北区| 衡阳县| 双鸭山市| 锦屏县| 沙湾县| 观塘区| 曲水县| 增城市| 泽州县| 凤城市| 鹰潭市| 陇川县| 应用必备| 江北区| 水城县| 互助| 黄平县| 慈利县| 湘潭县| 赣州市| 铁岭县| 雷州市| 大港区| 鹤壁市| 西畴县| 卢湾区| 厦门市|