背景技術(shù):
在事務(wù)處理、數(shù)據(jù)庫和計(jì)算機(jī)聯(lián)網(wǎng)中,兩階段提交協(xié)議是原子提交協(xié)議的類型。原子提交可以被描述為將不同改變的集合應(yīng)用為單個操作的操作。原子提交可以被表示為在改變被應(yīng)用的情況下已經(jīng)成功,并且如果在原子提交可能完成之前存在故障,則原子提交中完成的所有改變被反轉(zhuǎn)。在原子提交中完成的所有改變的該反轉(zhuǎn)方面可以確保系統(tǒng)在故障的情況下保持處于一致狀態(tài)。原子提交進(jìn)一步包括其中在任何給定時間處理一個原子提交的隔離的屬性。例如,原子提交可以在數(shù)據(jù)庫系統(tǒng)、修訂控制系統(tǒng)和其他這樣的領(lǐng)域中使用。
附圖說明
本公開的特征通過示例的方式圖示,并且不限于(一個或多個)以下各圖,其中相同的附圖標(biāo)記指示相同的元件,在附圖中:
圖1圖示了根據(jù)本公開的示例的用于分布式事務(wù)的兩階段提交協(xié)議混合的裝置的布局;
圖2圖示了根據(jù)本公開的示例的用于圖1的用于分布式事務(wù)的兩階段提交協(xié)議混合的裝置的環(huán)境;
圖3圖示了根據(jù)本公開的示例的用于實(shí)現(xiàn)圖1的用于分布式事務(wù)的兩階段提交協(xié)議混合的裝置的方法的流程圖;
圖4圖示了根據(jù)本公開的示例的用于實(shí)現(xiàn)圖1的用于分布式事務(wù)的兩階段提交協(xié)議混合的裝置的方法的另一流程圖;
圖5圖示了根據(jù)本公開的示例的用于實(shí)現(xiàn)圖1的用于分布式事務(wù)的兩階段提交協(xié)議混合的裝置的方法的另一流程圖;以及
圖6圖示了根據(jù)本公開的示例的計(jì)算機(jī)系統(tǒng)。
具體實(shí)施方式
為了簡化和說明的目的,通過主要參考示例來描述本公開。在下面的描述中,闡述了許多特定細(xì)節(jié),以便于提供對本公開的全面理解。然而,將容易地顯而易見的是,可以在不限于這些特定細(xì)節(jié)的情況下實(shí)踐本公開。在其他情況下,一些方法和結(jié)構(gòu)尚未被詳細(xì)描述,以免不必要地模糊本公開。
貫穿本公開,術(shù)語“一”和“一個”旨在表示特定元件中的至少一個。如本文中使用的,術(shù)語“包含”意為包括但不限于,術(shù)語“包括”意為包括但不限于。術(shù)語“基于”意為至少部分地基于。
在事務(wù)處理、數(shù)據(jù)庫、計(jì)算機(jī)聯(lián)網(wǎng)以及其他這樣的領(lǐng)域中,兩階段提交協(xié)議是可以被描述為機(jī)器可讀指令的分布式集合的原子提交協(xié)議的類型,其中,兩階段提交協(xié)議協(xié)調(diào)參與關(guān)于提交還是中止(即,回滾)事務(wù)的分布式原子事務(wù)的所有過程。兩階段提交協(xié)議實(shí)現(xiàn)其提交事務(wù)的目標(biāo),甚至在臨時系統(tǒng)故障的許多情況下,例如涉及關(guān)聯(lián)的過程、網(wǎng)絡(luò)節(jié)點(diǎn)、通信等的故障。為了適應(yīng)從故障恢復(fù),兩階段提交協(xié)議的參與方可以使用兩階段提交協(xié)議的狀態(tài)的登記(logging)。在這方面,可以通過兩階段提交協(xié)議的恢復(fù)過程來使用日志記錄。
使用兩階段提交協(xié)議的解決方案可以包括數(shù)據(jù)操縱語言階段(例如,階段0),其中執(zhí)行所有的事務(wù)插入、更新和刪除操作。在使用鎖定管理(例如,通過鎖定管理模塊實(shí)現(xiàn))的實(shí)現(xiàn)方式中,鎖定可以在階段0期間被獲得和積累。進(jìn)一步關(guān)于階段0,兩階段提交協(xié)議的操作可以包括提交請求階段(本文也作為投票階段、準(zhǔn)備階段或階段1)和提交階段(本文也稱為階段2)。對于實(shí)現(xiàn)如本文中公開的推定準(zhǔn)備好協(xié)議的參與方,每個數(shù)據(jù)操縱語言操作可以被評估為包括暗示的提交請求階段(即,階段1),使得事務(wù)可在任何時刻提交,只要沒有數(shù)據(jù)操縱語言請求返回錯誤。關(guān)于數(shù)據(jù)操縱語言請求的任何錯誤(在合適的重試之后,在適用的情況下)可能導(dǎo)致中止。
鎖定可被描述為防止其他并發(fā)事務(wù)在當(dāng)前事務(wù)正在進(jìn)行的同時修改底層數(shù)據(jù)的機(jī)制。作為鎖定的替代或附加,數(shù)據(jù)庫可以使用樂觀并發(fā)控制,并且如果檢測到?jīng)_突則中止。鎖定可以繼續(xù)被保持,直至如本文公開的階段2的結(jié)束,在所有數(shù)據(jù)操縱語言操作被執(zhí)行并安全存儲在審計(jì)尾跡(audittrail)中之后。
描述數(shù)據(jù)修改的審計(jì)記錄可以被置于審計(jì)服務(wù)高速緩存中的審計(jì)緩沖器中,但是這些審計(jì)緩沖器可能沒有被刷新(flush),或?qū)徲?jì)記錄可以在階段0期間被安全存儲在例如盤上。審計(jì)尾跡可以提供在數(shù)據(jù)庫中的數(shù)據(jù)持久性的實(shí)現(xiàn)。在事務(wù)完成如本文公開的階段2之前,可以例如通過盤、固態(tài)驅(qū)動(ssd)、非易失性隨機(jī)存取存儲器(ram)、n副本等來使審計(jì)記錄持久,使得在未計(jì)劃的中斷的情況下,審計(jì)記錄本身可以用于重建未應(yīng)用的事務(wù)并且使數(shù)據(jù)庫一致。在某些兩階段提交協(xié)議中,審計(jì)記錄沒有被刷新到磁盤并且被保持在存儲器中,直到準(zhǔn)備階段(即階段1)之后為止。在如本文所公開的推定準(zhǔn)備好的情況下,在每個數(shù)據(jù)操縱語言操作之后,可以使得審計(jì)記錄持久,從而使得準(zhǔn)備消息對于實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議(presumedpreparedprotocol)的那些參與方是過時的。
在提交請求階段(如本文公開的階段1)中,協(xié)調(diào)器過程可以嘗試準(zhǔn)備事務(wù)的所有參與過程(表示為參與方、同伴或工作方)以采取用于提交或中止事務(wù)的所需要的步驟,以及進(jìn)行投票,“是”(即,提交(如果事務(wù)參與方的本地部分執(zhí)行已經(jīng)適當(dāng)?shù)亟Y(jié)束))或“否”(即,中止(如果已經(jīng)檢測到事務(wù)參與方的本地部分執(zhí)行的問題)。在這方面,當(dāng)事務(wù)要被提交時,事務(wù)可以進(jìn)入階段1,由此事務(wù)管理模塊(例如,包括如本文所公開的協(xié)調(diào)器過程)首先將準(zhǔn)備消息發(fā)送到事務(wù)的(事務(wù)參與方的)所有參與資源管理模塊。替代地,當(dāng)要提交事務(wù)時,事務(wù)可以進(jìn)入階段1,由此事務(wù)管理模塊(例如,包括如本文所公開的協(xié)調(diào)器過程)首先將準(zhǔn)備消息發(fā)送到?jīng)]有實(shí)現(xiàn)如本文公開的假定準(zhǔn)備好協(xié)議的事務(wù)的(事務(wù)參與方的)那些參與資源管理模塊。對于階段1,每個資源管理模塊對事務(wù)的結(jié)果進(jìn)行投票。資源管理模塊中的每一個可以嘗試使其自己準(zhǔn)備好進(jìn)行提交,使得事務(wù)在故障的情況下將是耐久的。沒有鎖定管理模塊的實(shí)現(xiàn)方式可以將當(dāng)前事務(wù)的修改與用于其他事務(wù)的修改作比較,以確定事務(wù)之間的沖突是否存在。如果沖突存在,則資源管理模塊可以用中止事務(wù)的投票來回復(fù)回到事務(wù)管理模塊。如果不存在沖突,則資源管理模塊可以通過創(chuàng)建的準(zhǔn)備好的審計(jì)記錄,將審計(jì)記錄置于審計(jì)緩沖器中來確保審計(jì)對磁盤是安全的,并且強(qiáng)制刷新審計(jì)緩沖器高速緩存。鎖定管理模塊實(shí)現(xiàn)方式不包括沖突檢測組件,并且刷新審計(jì)記錄以用于對持久存儲器進(jìn)行的修改。在該階段,資源管理模塊可以被指定為“準(zhǔn)備好”,并且資源管理模塊可以向事務(wù)管理模塊回復(fù)回其準(zhǔn)備好提交。
在提交階段(如本文所公開的階段2)中,基于參與方的投票,協(xié)調(diào)器過程決定提交(如果所有參與方已經(jīng)投票“是”)還是中止事務(wù)(其他情況),并且將結(jié)果通知給所有參與方。然后,參與方可以用其本地事務(wù)資源(也表示為可恢復(fù)資源;例如數(shù)據(jù)庫數(shù)據(jù))遵循所需要的動作(即,提交或中止)。在這方面,在所有資源管理模塊已經(jīng)從準(zhǔn)備消息對事務(wù)管理模塊進(jìn)行了回復(fù)之后,事務(wù)管理模塊可以觸發(fā)階段2。如果任何資源管理模塊已經(jīng)出于任何原因而投票要中止事務(wù),則該事務(wù)將被事務(wù)管理模塊中止,并且事務(wù)管理模塊將中止消息發(fā)送到所有資源管理模塊。如果所有資源管理模塊已經(jīng)投票要提交,則將向資源管理模塊驅(qū)動提交。在階段2期間,資源管理模塊將釋放鎖定(如果任何被保持),并且清理事務(wù)所保持的資源。
根據(jù)示例,“假定中止”協(xié)議可以被實(shí)現(xiàn),由此在如本文公開的故障的情況下在恢復(fù)期間,發(fā)現(xiàn)用于事務(wù)的審計(jì)記錄但是沒有“準(zhǔn)備好的”審計(jì)記錄的資源管理模塊將假設(shè)事務(wù)將被中止。在某些實(shí)現(xiàn)方式中,資源管理模塊可以回滾這樣的事務(wù),并且在其他實(shí)現(xiàn)方式中,資源管理模塊可以等待事務(wù)管理模塊告知資源管理模塊中止事務(wù)。具有處于準(zhǔn)備好的狀態(tài)的事務(wù)的資源管理模塊要等待事務(wù)管理模塊重新驅(qū)動提交或中止以完成階段2。
如果資源管理模塊在事務(wù)完成階段1之前故障,則整個事務(wù)將被中止。這是由于在資源管理模塊故障之前由資源管理模塊生成的所有需要的審計(jì)在插入、更新和刪除操作期間是否被刷新到盤的不確定性而導(dǎo)致的。
關(guān)于假定準(zhǔn)備好協(xié)議,可以假設(shè)所有參與方執(zhí)行假定準(zhǔn)備好協(xié)議。假定準(zhǔn)備好協(xié)議可以提供在事務(wù)從階段0過渡到階段1時對階段1處理的消除,如本文所公開,并且消除了對從事務(wù)管理模塊發(fā)送到所有資源管理模塊的階段1消息的需要。在這方面,每個資源管理模塊可以維持永久準(zhǔn)備好狀態(tài)。當(dāng)插入、更新和刪除請求被資源管理模塊接收時,資源管理模塊可以針對每個操作執(zhí)行階段0和階段1任務(wù)二者,即,如果實(shí)現(xiàn)了鎖定管理模塊,則獲得鎖定,或者如果沒有,則資源管理模塊執(zhí)行沖突檢測,并且可以使得審計(jì)記錄對于審計(jì)存儲區(qū)是持久的。對于該實(shí)現(xiàn)方式,鎖定管理模塊可以被實(shí)現(xiàn)以使得鎖定被獲得并在事務(wù)的持續(xù)時間內(nèi)被保持以防止沖突,并且如果鎖定沒有被保持,則沖突將在數(shù)據(jù)修改時被檢測,使得資源管理模塊可以通知事務(wù)管理模塊中止事務(wù)。在每個插入、更新和刪除操作之后,資源管理模塊可以回復(fù)回指示操作完成的客戶端,并且所有資源管理模塊除了插入、更新和刪除操作在進(jìn)行時之外常年處于假定準(zhǔn)備好狀態(tài)。當(dāng)客戶端完成對于事務(wù)所需要的所有插入、更新和刪除操作時,并且如果沒有資源管理模塊回復(fù)以錯誤,則事務(wù)管理模塊可以立即進(jìn)行階段2處理,從而避免先前需要的所有階段1消息業(yè)務(wù)。
在這方面,根據(jù)示例,本文公開了用于分布式事務(wù)的兩階段提交協(xié)議混合的裝置和用于分布式事務(wù)的兩階段提交協(xié)議混合的方法。根據(jù)示例,本文公開的裝置和方法可以提供假定準(zhǔn)備好協(xié)議與其他兩階段協(xié)議的混合以實(shí)現(xiàn)兩階段提交過程。例如,事務(wù)可以橫跨兩個單獨(dú)的數(shù)據(jù)庫,由此一個數(shù)據(jù)庫(或在一個數(shù)據(jù)庫中的一些參與方)實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議,并且另一個數(shù)據(jù)庫不實(shí)現(xiàn)。根據(jù)示例,本文公開的裝置和方法可以允許協(xié)調(diào)器過程在可用時利用假定準(zhǔn)備好協(xié)議,并且仍然確保事務(wù)的所有分支是一致和耐久的。即使在相同數(shù)據(jù)庫內(nèi),一些部分可以具有不同的復(fù)制方案或駐留在地理上遠(yuǎn)程的位置,其中一些附加消息的成本可能是昂貴的。根據(jù)示例,本文公開的裝置和方法可以允許用戶指示哪個協(xié)議是優(yōu)選的及用于哪些數(shù)據(jù)。
根據(jù)示例,本文公開的裝置和方法可以提供用于在不需要在階段1中發(fā)送準(zhǔn)備消息的情況下(例如當(dāng)所有的參與方實(shí)現(xiàn)如本文公開的假定準(zhǔn)備好協(xié)議時)向多個參與方提交分布式事務(wù)的機(jī)制。本文公開的裝置和方法可以在各種環(huán)境中使用,諸如例如包括多個參與方的環(huán)境以及其中消息業(yè)務(wù)已經(jīng)高得使得附加遠(yuǎn)程過程調(diào)用的邊際成本高的環(huán)境。
根據(jù)示例,本文公開的裝置和方法可以提供一些參與方使用假定準(zhǔn)備好協(xié)議,而其他參與方不使用。該方面可能是有益的,例如,在事務(wù)橫跨多個域的情況下,其中一個域使假定準(zhǔn)備好協(xié)議實(shí)現(xiàn),而其他域不會。
根據(jù)示例,本文公開的裝置和方法可以提供一種用于混合用于分布式事務(wù)的不同兩階段提交協(xié)議的機(jī)制。例如,關(guān)于協(xié)議的混合,本文公開的裝置和方法可以例如通過避免提交請求(準(zhǔn)備)消息和/或基于參與方中的一些(與沒有相對)實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議來提供有效性的增加。根據(jù)示例,事務(wù)可以橫跨不同的集群以及不同的表。關(guān)于橫跨不同集群和表的事務(wù),隨著針對全球客戶的數(shù)據(jù)量變得越來越大,客戶可能不會將其所有數(shù)據(jù)存儲在一個數(shù)據(jù)庫、一個數(shù)據(jù)中心或一個國家中。通常,客戶可能需要更新或查詢來自多個遙遠(yuǎn)區(qū)域的數(shù)據(jù)。對于遙遠(yuǎn)的參與方,消息業(yè)務(wù)的成本可能超過附加本地操作的成本,以使假定準(zhǔn)備好協(xié)議操作。例如,基于如本文中公開的假定準(zhǔn)備好協(xié)議的使用,本文公開的裝置和方法可以提供提交和更具彈性的分布式事務(wù)的實(shí)現(xiàn),并且允許事務(wù)的不同分支使用不同的協(xié)議。根據(jù)示例,對于本文所公開的裝置和方法,事務(wù)中的所有參與分支可以受益于由假定準(zhǔn)備好協(xié)議提供的附加的彈性,即使特定分支本身沒有使用假定準(zhǔn)備好協(xié)議。
根據(jù)示例,本文公開的裝置和方法可以提供在全異數(shù)據(jù)庫之間的互操作性,其中例如一個數(shù)據(jù)庫已經(jīng)實(shí)現(xiàn)了假定準(zhǔn)備好協(xié)議,而另一數(shù)據(jù)庫尚未實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議。在全異數(shù)據(jù)庫之間的互操作性的該方面可以促進(jìn)在用戶從一個數(shù)據(jù)庫供應(yīng)商轉(zhuǎn)移到另一個時的遷移策略的實(shí)現(xiàn),并且用于提供用于橫跨多個系統(tǒng)的事務(wù)的優(yōu)化的兩階段提交策略。
根據(jù)示例,對于本文公開的裝置和方法,當(dāng)事務(wù)在更多參與方實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議時變得對資源管理模塊故障更有彈性時,即使一些參與方參與假定準(zhǔn)備好協(xié)議,整個事務(wù)也可以包括增加的彈性,因?yàn)檩^少的事務(wù)分支在代表事務(wù)完成其工作之后容易受到崩潰的影響。
根據(jù)示例,對于本文所公開的裝置和方法,關(guān)于假定準(zhǔn)備好協(xié)議的使用,事務(wù)不需要簡單地被中止,因?yàn)閰⑴c資源管理模塊在事務(wù)處理期間故障。如果故障的資源管理模塊所擁有的事務(wù)的分支完成并且已經(jīng)完成了其插入、更新和刪除操作,則事務(wù)可以繼續(xù),如同資源管理模塊仍然是活動的一樣。事務(wù)管理模塊可以假設(shè)對相同資源管理模塊的后續(xù)插入、更新和刪除操作將遇到發(fā)送插入、更新和刪除請求的錯誤,或者遇到在連接斷開時在回復(fù)中的錯誤。如果錯誤發(fā)生,則客戶端可以告知事務(wù)管理模塊并且事務(wù)終止。如果沒有錯誤發(fā)生,則事務(wù)可以進(jìn)行到階段2。盡管事務(wù)管理模塊將接收到向故障的資源管理模塊發(fā)送階段2提交消息的錯誤,但是每當(dāng)資源管理模塊在沒有數(shù)據(jù)丟失的風(fēng)險的情況下被重新啟動/回復(fù)時,事務(wù)管理模塊可以重新驅(qū)動階段2提交,因?yàn)槭苡绊懙馁Y源管理模塊已經(jīng)處于準(zhǔn)備狀態(tài)。
圖1圖示了根據(jù)本公開的示例的用于分布式事務(wù)的兩階段提交協(xié)議混合的裝置(下文中還稱為“裝置100”)的布局。圖2圖示了根據(jù)本公開的示例的裝置100的環(huán)境200。
參考圖1和圖2,裝置100可以包括事務(wù)管理模塊102,其用于針對包括多個關(guān)聯(lián)的參與方106的事務(wù)104來確定是否所有參與方106實(shí)現(xiàn)、是否一些參與方106實(shí)現(xiàn)或者是否沒有參與方實(shí)現(xiàn)了假定準(zhǔn)備好協(xié)議。響應(yīng)于由事務(wù)管理模塊102確定了所有參與方106實(shí)現(xiàn)、一些參與方106實(shí)現(xiàn)或者沒有參與方實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議,事務(wù)管理模塊102可以結(jié)合參與方106的資源管理模塊108來進(jìn)行操作,以相應(yīng)地實(shí)現(xiàn)來自用于包括提交請求階段(例如,階段1)和提交階段(例如,階段2)的兩階段提交過程的多個可用過程的不同的過程,以提交事務(wù)。
根據(jù)示例,事務(wù)管理模塊102可以通過以下來針對包括多個關(guān)聯(lián)的參與方106的事務(wù)104來確定是否所有參與方106實(shí)現(xiàn)、是否一些參與方106實(shí)現(xiàn)或者是否沒有參與方實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議:分析對來自多個參與方106的每個參與方的用于加入事務(wù)104的登記請求的響應(yīng),以及基于對來自多個參與方106的每個參與方的用于加入事務(wù)104的登記請求的響應(yīng)的分析來確定是否所有參與方106實(shí)現(xiàn)、是否一些參與方106實(shí)現(xiàn)或者是否沒有參與方實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議。
根據(jù)示例,響應(yīng)于由事務(wù)管理模塊102確定了所有參與方106實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議,事務(wù)管理模塊102可以結(jié)合參與方106的資源管理模塊102來進(jìn)行操作以通過以下來實(shí)現(xiàn)用于兩階段提交過程的多個可用過程中的過程:對于多個參與方106中的所有參與方繞過兩階段提交過程的提交請求階段,以及對于多個參與方106中的所有參與方實(shí)現(xiàn)兩階段提交過程的提交階段。
根據(jù)示例,響應(yīng)于由事務(wù)管理模塊102確定了一些參與方106實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議,事務(wù)管理模塊102可以結(jié)合參與方106的資源管理模塊108來操作以通過以下來實(shí)現(xiàn)用于兩階段提交過程的多個可用過程中的過程:對于多個參與方106中的一些參與方繞過兩階段提交過程的提交請求階段,向多個參與方106中的除了所述一些參與方之外的其余參與方發(fā)送準(zhǔn)備請求,所述其余參與方不實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議以對于其余參與方實(shí)現(xiàn)兩階段提交過程的提交請求階段,以及對于多個參與方106中的所有參與方實(shí)現(xiàn)兩階段提交過程的提交階段。
根據(jù)示例,響應(yīng)于由事務(wù)管理模塊102確定了沒有參與方實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議,事務(wù)管理模塊102可以結(jié)合參與方106的資源管理模塊108來操作,以通過以下來實(shí)現(xiàn)用于兩階段提交過程的多個可用過程的過程:向所有參與方發(fā)送準(zhǔn)備請求以對于多個參與方106中的所有參與方實(shí)現(xiàn)兩階段提交過程的提交請求階段,以及對于多個參與方106中的所有參與方實(shí)現(xiàn)兩階段提交過程的提交階段。
根據(jù)示例,與參與方106相關(guān)聯(lián)的鎖定管理模塊110可以在提交請求階段和提交階段之前執(zhí)行數(shù)據(jù)操縱語言階段(例如,階段0)。與事務(wù)104相關(guān)的事務(wù)插入、更新和刪除操作可以在數(shù)據(jù)操縱語言階段執(zhí)行。
裝置100的模塊和其他元件可以是存儲在非瞬時計(jì)算機(jī)可讀介質(zhì)上的機(jī)器可讀指令。在這方面,裝置100可以包括或者可以是非瞬時計(jì)算機(jī)可讀介質(zhì)。此外或替代地,裝置100的模塊和其他元件可以是硬件或機(jī)器可讀指令和硬件的組合。
裝置100可以提供事務(wù)管理模塊102以確定哪個協(xié)議由參與方106中的每一個實(shí)現(xiàn)。如果參與方實(shí)現(xiàn)并且使用假定準(zhǔn)備好協(xié)議,則參與方可以在參與方加入事務(wù)104時在對登記(例如參與)請求的回復(fù)中指示假定準(zhǔn)備好協(xié)議的使用。
事務(wù)管理模塊102可以保持跟蹤其對于每個事務(wù)所具有的參與方106的類型(例如,使用假定準(zhǔn)備好協(xié)議的參與方和不使用假定準(zhǔn)備好協(xié)議的參與方)。
當(dāng)客戶端嘗試提交事務(wù)104并且進(jìn)入階段1時,如果所有參與方106實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議,則事務(wù)管理模塊102可以立即進(jìn)入階段2,因?yàn)榧僭O(shè)每個參與方106已經(jīng)完成沖突檢測、刷新并且投票以提交。關(guān)于投票,在每個數(shù)據(jù)操縱語言操作的結(jié)束時,參與方向客戶端返回回復(fù)。如果有錯誤,則這假設(shè)是中止請求,或者如果沒有錯誤,則這是“準(zhǔn)備好提交”回復(fù)?;谒袛?shù)據(jù)操縱語言操作的成功完成,可以在任何時間進(jìn)入階段2?;趨⑴c方106的投票,事務(wù)管理模塊102可以決定提交(如果所有參與方投票“是”)還是中止事務(wù)(其他情況),并將結(jié)果通知給所有參與方106。然后,參與方106可以以其本地資源管理模塊遵循所需要的動作(即,提交或中止)。
如果沒有參與方106已經(jīng)指示其正在實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議,則事務(wù)管理模塊102可以首先進(jìn)入階段1,并且向參與方106中的每一個發(fā)送準(zhǔn)備請求。在這方面,事務(wù)管理模塊102可以嘗試使事務(wù)104的所有參與方106準(zhǔn)備采取用于提交或中止事務(wù)所需要的步驟,并進(jìn)行投票,“是”(即,提交(如果事務(wù)參與方的本地部分執(zhí)行已經(jīng)適當(dāng)?shù)亟Y(jié)束))或“否”(即,中止(如果已經(jīng)檢測到事務(wù)參與方的本地部分執(zhí)行的問題)。此后,處理可以進(jìn)行到階段2,如本文公開的。
如果參與方106中的一些使用假定準(zhǔn)備好協(xié)議而其他參與方不使用,則事務(wù)管理模塊102可以繞過實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議的一個或多個參與方,由于其已經(jīng)準(zhǔn)備好,并且向不使用假定準(zhǔn)備好協(xié)議且以其他方式使用不同的兩階段提交協(xié)議的參與方發(fā)送準(zhǔn)備請求。以該方式,已知所有參與方106在事務(wù)進(jìn)入階段2之前已經(jīng)準(zhǔn)備好并刷新。
圖3-5分別圖示了與用于以上詳細(xì)描述了其構(gòu)造的用于分布式事務(wù)的兩階段提交協(xié)議混合的裝置100的示例相對應(yīng)的用于實(shí)現(xiàn)用于分布式事務(wù)的兩階段提交協(xié)議混合的方法300、400和500的流程圖。方法300、400和500可以通過示例而非限制的方式在參考圖1和圖2的用于分布式事務(wù)的兩階段提交協(xié)議混合的裝置100上實(shí)現(xiàn)。方法300、400和500可以在其他裝置中實(shí)踐。圖4的示例可以表示在包括處理器602(參見圖6)和存儲器606(參見圖6)的裝置100上實(shí)現(xiàn)的方法,存儲器606存儲機(jī)器可讀指令,所述機(jī)器可讀指令當(dāng)由處理器執(zhí)行時使得處理器執(zhí)行方法400。圖5的示例可以表示非瞬時計(jì)算機(jī)可讀介質(zhì),其上存儲有用于實(shí)現(xiàn)用于分布式事務(wù)的兩階段提交協(xié)議混合的機(jī)器可讀指令,所述機(jī)器可讀指令在被執(zhí)行時使得處理器(例如,圖6的處理器602)執(zhí)行方法500。
參考圖1-3,對于方法300,在框302處,該方法可以包括針對包括多個關(guān)聯(lián)的參與方106的事務(wù)104來識別多個參與方106中的哪些參與方實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議。
在框304處,該方法可以包括基于所述識別來確定是否所有參與方實(shí)現(xiàn)、是否一些參與方實(shí)現(xiàn)或者是否沒有參與方實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議。
在框306處,響應(yīng)于所有參與方實(shí)現(xiàn)、一些參與方實(shí)現(xiàn)、或者沒有參與方實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議的確定,該方法可以包括相應(yīng)地實(shí)現(xiàn)來自用于包括提交請求階段和提交階段的兩階段提交過程的多個可用過程的不同過程以提交事務(wù)。
根據(jù)示例,方法300可以包括,在提交請求階段和提交階段之前執(zhí)行數(shù)據(jù)操縱語言階段,其中,與事務(wù)104相關(guān)的事務(wù)插入、更新和刪除操作在數(shù)據(jù)操縱語言階段被執(zhí)行。
根據(jù)示例,對于方法300,基于識別來確定是否所有參與方實(shí)現(xiàn)、是否一些參與方實(shí)現(xiàn)或是否沒有參與方實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議可以進(jìn)一步包括分析對來自多個參與方106中的每一個參與方的用于加入事務(wù)104的登記請求的響應(yīng),并且基于對來自多個參與方106中的每一個參與方的用于加入事務(wù)104的登記請求的響應(yīng)的分析而確定是否所有參與方實(shí)現(xiàn)、是否一些參與方實(shí)現(xiàn)或是否沒有參與方實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議。
根據(jù)示例,響應(yīng)于所有參與方實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議的確定,該方法可以包括,通過以下來實(shí)現(xiàn)用于兩階段提交過程的多個可用過程中的過程:對于多個參與方106中的所有參與方繞過兩階段提交過程的提交請求階段,并且對于多個參與方106中的所有參與方實(shí)現(xiàn)兩階段提交過程的提交階段。
根據(jù)示例,響應(yīng)于一些參與方實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議的確定,方法300可以包括通過以下來實(shí)現(xiàn)用于兩階段提交過程的多個可用過程中的過程:對于多個參與方106中的一些參與方繞過兩階段提交過程的提交請求階段,向多個參與方106中的除了所述一些參與方之外的其余參與方發(fā)送準(zhǔn)備請求,所述其余參與方不實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議以對于其余參與方實(shí)現(xiàn)兩階段提交過程的提交請求階段,并且對于多個參與方106中的所有參與方實(shí)現(xiàn)兩階段提交過程的提交階段。
根據(jù)示例,響應(yīng)于沒有參與方實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議的確定,方法300可以包括,通過以下來實(shí)現(xiàn)用于兩階段提交過程的多個可用過程的過程:向所有參與方發(fā)送準(zhǔn)備請求以對于多個參與方106中的所有參與方實(shí)現(xiàn)兩階段提交過程的提交請求階段,并且對于多個參與方106中的所有參與方實(shí)現(xiàn)兩階段提交過程的提交階段。
參考圖4,對于方法400,在框402處,該方法可以包括,對于包括多個關(guān)聯(lián)的參與方106的事務(wù)104確定是否所有參與方實(shí)現(xiàn)、是否一些參與方實(shí)現(xiàn)或者是否沒有參與方實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議。
在框404處,響應(yīng)于所有參與方實(shí)現(xiàn)、一些參與方實(shí)現(xiàn)、或者沒有參與方實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議的確定,該方法可以包括相應(yīng)地實(shí)現(xiàn)來自用于包括提交請求階段和提交階段的兩階段提交過程的多個可用過程的不同過程以提交事務(wù)。
根據(jù)示例,對于方法400,針對包括多個關(guān)聯(lián)的參與方106的事務(wù)104確定是否所有參與方實(shí)現(xiàn)、是否一些參與方實(shí)現(xiàn)或是否沒有參與方實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議可以進(jìn)一步包括分析對來自多個參與方106中的每一個參與方的用于加入事務(wù)104的登記請求的響應(yīng),以及基于對來自多個參與方106中的每一個參與方的用于加入事務(wù)104的登記請求的響應(yīng)的分析來確定是否所有參與方實(shí)現(xiàn)、是否一些參與方實(shí)現(xiàn)或是否沒有參與方實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議。
根據(jù)示例,響應(yīng)于所有參與方實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議的確定,方法400可以進(jìn)一步包括,通過以下來實(shí)現(xiàn)用于兩階段提交過程的多個可用過程中的過程:對于多個參與方106中的所有參與方繞過兩階段提交過程的提交請求階段,并且對于多個參與方106中的所有參與方實(shí)現(xiàn)兩階段提交過程的提交階段。
根據(jù)示例,響應(yīng)于一些參與方實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議的確定,方法400可以進(jìn)一步包括,通過以下來實(shí)現(xiàn)用于兩階段提交過程的多個可用過程中的過程:對于多個參與方106中的一些參與方繞過兩階段提交過程的提交請求階段,向多個參與方106中的除了所述一些參與方之外的其余參與方發(fā)送準(zhǔn)備請求,所述其余參與方不實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議以對于其余參與方實(shí)現(xiàn)兩階段提交過程的提交請求階段,并且對于多個參與方106中的所有參與方實(shí)現(xiàn)兩階段提交過程的提交階段。
根據(jù)示例,響應(yīng)于沒有參與方實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議的確定,方法400可以進(jìn)一步包括,通過以下來實(shí)現(xiàn)用于兩階段提交過程的多個可用過程的過程:向所有參與方發(fā)送準(zhǔn)備請求以對于多個參與方106中的所有參與方實(shí)現(xiàn)兩階段提交過程的提交請求階段,并且對于多個參與方106中的所有參與方實(shí)現(xiàn)兩階段提交過程的提交階段。
參考圖5,對于方法500,在框502處,該方法可以包括針對包括多個關(guān)聯(lián)的參與方106的事務(wù)104,確定是否所有參與方實(shí)現(xiàn)、是否一些參與方實(shí)現(xiàn)、或者是否沒有參與方實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議。
在框504處,響應(yīng)于所有參與方實(shí)現(xiàn)、一些參與方實(shí)現(xiàn)或沒有參與方實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議的確定,該方法可以包括從多個可用過程中選擇要被實(shí)現(xiàn)用于包括提交請求階段和提交階段的兩階段提交過程的過程,以提交事務(wù)104。
在框506處,該方法可以包括實(shí)現(xiàn)用于兩階段提交過程的所選過程。
根據(jù)示例,響應(yīng)于所有參與方實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議的確定,實(shí)現(xiàn)兩階段提交過程的所選過程可以進(jìn)一步包括,對于多個參與方106中的所有參與方繞過兩階段提交過程的提交請求階段,并且對于多個參與方106中的所有參與方實(shí)現(xiàn)兩階段提交過程的提交階段。
根據(jù)示例,響應(yīng)于一些參與方實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議的確定,方法500可以進(jìn)一步包括通過以下來實(shí)現(xiàn)兩階段提交過程的所選過程:對于多個參與方106中的所述一些參與方繞過兩階段提交過程的提交請求階段,向多個參與方106中的除了所述一些參與方之外的其余參與方發(fā)送準(zhǔn)備請求,所述其余參與方不實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議以對于其余參與方實(shí)現(xiàn)兩階段提交過程的提交請求階段,并且響應(yīng)于對來自其余參與方的提交的授權(quán),對于多個參與方106中的所有參與方實(shí)現(xiàn)兩階段提交過程的提交階段。
根據(jù)示例,響應(yīng)于沒有參與方實(shí)現(xiàn)假定準(zhǔn)備好協(xié)議的確定,方法500可以進(jìn)一步包括通過以下來實(shí)現(xiàn)兩階段提交過程的所選過程:向所有參與方發(fā)送準(zhǔn)備請求以對于多個參與方106中的所有參與方實(shí)現(xiàn)兩階段提交過程的提交請求階段,并且響應(yīng)于對來自所有參與方的提交的授權(quán),對于多個參與方106中的所有參與方實(shí)現(xiàn)兩階段提交過程的提交階段。
圖6示出了可以與本文描述的示例一起使用的計(jì)算機(jī)系統(tǒng)600。計(jì)算機(jī)系統(tǒng)600可以表示通用平臺,其包括可以在服務(wù)器或另一個計(jì)算機(jī)系統(tǒng)中的組件。計(jì)算機(jī)系統(tǒng)600可以用作用于裝置100的平臺。計(jì)算機(jī)系統(tǒng)600可以通過處理器(例如,單個或多個處理器)或其他硬件處理電路來執(zhí)行本文描述的方法、功能和其他過程。這些方法、功能和其他過程可以被體現(xiàn)為存儲在計(jì)算機(jī)可讀介質(zhì)上的機(jī)器可讀指令,所述計(jì)算機(jī)可讀介質(zhì)可以非瞬時的,諸如硬件存儲設(shè)備(例如,ram、rom、eprom、eeprom、硬驅(qū)動器和閃速存儲器)。
計(jì)算機(jī)系統(tǒng)600可以包括處理器602,其可以實(shí)現(xiàn)或執(zhí)行機(jī)器可讀指令,所述機(jī)器可讀指令執(zhí)行本文描述的方法、功能和其他過程中的一些或全部。來自處理器602的命令和數(shù)據(jù)可以通過通信總線604來傳送。計(jì)算機(jī)系統(tǒng)還可以包括:主存儲器606,諸如ram,其中用于處理器602的機(jī)器可讀指令和數(shù)據(jù)可以在運(yùn)行時期間駐留;以及輔數(shù)據(jù)儲存器608,其可以是非易失性的并且存儲機(jī)器可讀指令和數(shù)據(jù)。存儲器和數(shù)據(jù)儲存器是計(jì)算機(jī)可讀介質(zhì)的示例。存儲器606可以包括用于分布式事務(wù)的兩階段提交協(xié)議混合的實(shí)現(xiàn)模塊620,其包括在運(yùn)行時期間駐留在存儲器606中并且由處理器602執(zhí)行的計(jì)算機(jī)可讀指令。用于分布式事務(wù)的兩階段提交協(xié)議混合的實(shí)現(xiàn)模塊620可以包括在圖1和2中所示的裝置100的模塊。
計(jì)算機(jī)系統(tǒng)600可以包括i/o設(shè)備610,諸如鍵盤、鼠標(biāo)、顯示器等。計(jì)算機(jī)系統(tǒng)可以包括用于連接到網(wǎng)絡(luò)的網(wǎng)絡(luò)接口612。其他已知的電子組件可以在計(jì)算機(jī)系統(tǒng)中被添加或被取代。
本文已經(jīng)描述和圖示了示例連同其一些變型。本文使用的術(shù)語、描述和附圖僅通過說明的方式被闡述,并且不意味著作為限制。在主題的精神和范圍內(nèi)許多變型是可能的,這旨在通過下述權(quán)利要求(及其等同物)來限定,其中所有的術(shù)語意在其最廣泛的合理意義上,除非另外指示。