亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

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

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

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

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