近年來,越來越多的計算應用被實施在分布式環(huán)境中。一種給定的分布式應用可例如利用散布在提供商網(wǎng)絡(luò)的若干數(shù)據(jù)中心中的眾多物理和/或虛擬化服務器,且可服務許多不同國家的客戶。隨著給定應用中所涉及的服務器數(shù)目增加,和/或隨著所述應用的網(wǎng)絡(luò)的復雜性增加,不可避免地更高頻率地遇到各種類型的故障事件(例如,處理程序或服務器的明顯或真實故障、網(wǎng)絡(luò)消息延時的實質(zhì)延遲、或服務器對之間的連接性丟失)。因此分布式應用的設(shè)計者們面臨以下問題:在響應于應用配置狀態(tài)的變化的同時嘗試維持高水平的應用性能(例如,用于應用請求的高通量和低響應時間)。
用于管理狀態(tài)信息的一些傳統(tǒng)技術(shù)可涉及鎖定所述狀態(tài)信息來以一致的方式實施應用狀態(tài)變化。不幸地,用于應用狀態(tài)和/或數(shù)據(jù)的鎖定機構(gòu)可能隨著所述應用的大小和復雜性增加而自身經(jīng)常變成性能瓶頸。其他技術(shù)可避免鎖定,但可必須暫停正常操作以在應用的部件當中傳播改變的狀態(tài)信息。然而,此類“停止一切”時段可為有問題的,尤其對于用于散布在全世界不同時區(qū)中的幾百個或幾千個客戶所使用的任務關(guān)鍵型工作負載的延時敏感應用來說。
附圖說明
圖1示出根據(jù)至少一些實施方案的示例性系統(tǒng)環(huán)境,其中建立復制節(jié)點的動態(tài)DAG(有向非循環(huán)圖)用于管理應用狀態(tài)變化。
圖2a-2h共同示出根據(jù)至少一些實施方案的操作的示例性順序,所述操作可在復制DAG處響應于檢測到DAG節(jié)點中的一者可能已失效來執(zhí)行。
圖3示出根據(jù)至少一些實施方案的可在動態(tài)復制DAG處產(chǎn)生的應用狀態(tài)記錄和DAG配置德爾塔消息的示例性部件。
圖4示出根據(jù)至少一些實施方案的其成員節(jié)點分布在提供商網(wǎng)絡(luò)的多個可用性容器中的示例性復制DAG。
圖5示出根據(jù)至少一些實施方案的示例性配置,其中多個復制DAG的節(jié)點可按多租戶方式而實施在單個主機處。
圖6是示出根據(jù)至少一些實施方案的操作的多個方面的流程圖,所述操作可響應于接收到狀態(tài)轉(zhuǎn)變請求而執(zhí)行在復制DAG的接受器節(jié)點處。
圖7是示出根據(jù)至少一些實施方案的操作的多個方面的流程圖,所述操作可響應于接收到經(jīng)批準狀態(tài)轉(zhuǎn)變消息而執(zhí)行在復制DAG的中間節(jié)點處。
圖8是示出根據(jù)至少一些實施方案的操作的多個方面的流程圖,所述操作可響應于接收到經(jīng)批準狀態(tài)轉(zhuǎn)變消息而執(zhí)行在復制DAG的提交者節(jié)點處。
圖9是示出根據(jù)至少一些實施方案的操作的多個方面的流程圖,所述操作可執(zhí)行在復制DAG的配置管理器處。
圖10是示出根據(jù)至少一些實施方案的操作的多個方面的流程圖,所述操作可響應于接收到來自配置管理器的配置德爾塔消息而執(zhí)行在復制DAG的成員節(jié)點處。
圖11a-11h共同示出根據(jù)至少一些實施方案的操作的示例性順序,所述操作可在協(xié)調(diào)暫停程序期間在復制DAG處執(zhí)行。
圖12是示出根據(jù)至少一些實施方案的操作的多個方面的流程圖,所述操作可在協(xié)調(diào)暫停程序期間執(zhí)行在諸如復制DAG的狀態(tài)復制群組的提交者節(jié)點處。
圖13是示出根據(jù)至少一些實施方案的操作的多個方面的流程圖,所述操作可在協(xié)調(diào)暫停程序期間執(zhí)行在諸如復制DAG的狀態(tài)復制群組的非提交者節(jié)點處。
圖14是示出根據(jù)至少一些實施方案的操作的多個方面的流程圖,所述操作可在協(xié)調(diào)暫停程序期間執(zhí)行在諸如復制DAG的狀態(tài)復制群組的配置管理器處。
圖15示出根據(jù)至少一些實施方案的示例性系統(tǒng)環(huán)境,所述環(huán)境包括支持可包含對多個數(shù)據(jù)存儲區(qū)的寫入的事務的持久性改變?nèi)罩尽?/p>
圖16示出根據(jù)至少一些實施方案的使用復制DAG的持久性改變?nèi)罩镜氖纠詫嵤?/p>
圖17示出根據(jù)至少一些實施方案的可由日志記錄服務的客戶端遞交的事務請求描述符的示例性分量元素。
圖18示出根據(jù)至少一些實施方案的在基于日志的事務管理器處的讀取寫入沖突檢測的示例。
圖19是示出根據(jù)至少一些實施方案的可在日志記錄服務處執(zhí)行的控制平面操作的多個方面的流程圖。
圖20是示出根據(jù)至少一些實施方案的操作的多個方面的流程圖,所述操作可響應于從客戶端接收的事務請求而執(zhí)行在日志記錄服務處。
圖21示出根據(jù)至少一些實施方案的可用以實現(xiàn)各自特殊情況一致性目標的事務請求描述符的示例。
圖22示出根據(jù)至少一些實施方案的強制執(zhí)行與在基于日志的事務管理器處接收的事務請求相關(guān)聯(lián)的重復刪除約束的示例。
圖23示出根據(jù)至少一些實施方案的強制執(zhí)行與在基于日志的事務管理器處接收的事務請求相關(guān)聯(lián)的順序約束的示例。
圖24示出根據(jù)至少一些實施方案的包括多個邏輯約束描述符的事務請求描述符的示例。
圖25是示出根據(jù)至少一些實施方案的操作的多個方面的流程圖,所述操作可響應于指示一個或多個邏輯約束的事務請求而執(zhí)行在日志記錄服務處。
圖26是示出可用于至少一些實施方案中的示例性計算裝置的框圖。
雖然在本文中通過列舉若干實施方案和說明性附圖的方式描述實施方案,但是本領(lǐng)域的技術(shù)人員將認識到,實施方案并不限于所描述的實施方案或附圖。應理解,附圖和對其的詳細描述并非意圖將實施方案限于所公開的特定形式,而是相反地,其意圖在于涵蓋落入由所附權(quán)利要求書所界定的精神和范圍內(nèi)的所有修改、等同物以及替代方案。本文中使用的標題僅用于組織目的,并且并不意在用于限制說明書或權(quán)利要求書的范圍。如貫穿本申請所使用的,詞語“可”是以允許意義(即,意味著有可能)而不是強制意義(即,意味著必須)使用的。類似地,詞語“包含”(include/including/includes)意味著“包含但不限于”。
具體實施方式
本文描述用于使用組織為圖表的復制節(jié)點來管理分布式應用狀態(tài)并部署此類圖表以實施可用于事務管理的日志記錄服務的方法和設(shè)備的各種實施方案。根據(jù)一些實施方案,可使用布置在有向非循環(huán)圖(DAG)中的多個復制節(jié)點來實施用于構(gòu)建容錯分布式應用的復制狀態(tài)機。在一些實施中,特定復制DAG可包含一個或多個接受器節(jié)點、一個或多個提交者節(jié)點、零個或多個中間節(jié)點(每一節(jié)點沿著包括從接受器節(jié)點引向提交者節(jié)點的DAG邊緣的復制路徑而定位),以及被配置成在節(jié)點故障情況下快速地接管其他類型節(jié)點中的一者的責任的零個或多個備用節(jié)點。復制DAG的接受器節(jié)點、中間節(jié)點和備用節(jié)點可在本文共同地稱作“非提交者”節(jié)點?!敖邮芷鳌?、“中間”、“提交者”和“備用”可統(tǒng)稱為DAG節(jié)點可假定的角色集。在一些實施方案中,接受器節(jié)點還可稱作DAG的“頭部”節(jié)點,且提交者節(jié)點還可稱作“尾部”節(jié)點。
大體來說,在至少一些實施方案中,特定復制DAG的每一節(jié)點可負責復制至少特定應用的狀態(tài)信息,例如呈寫入到本地磁盤或其他類似存儲裝置的狀態(tài)轉(zhuǎn)變記錄的形式。應用狀態(tài)信息可沿著從DAG的接受器節(jié)點到提交者節(jié)點的邊緣集而傳播,在本文稱作復制路徑或提交路徑。在DAG內(nèi)傳播的每一狀態(tài)轉(zhuǎn)變消息可包含各自序號或邏輯時間戳,其指示(例如,在接受器節(jié)點處)處理對應狀態(tài)轉(zhuǎn)變請求的次序??墒褂貌煌瑢嵤┓桨钢械亩喾N技術(shù)中的任一者來實施序號,例如可使用通過接受器節(jié)點維持的簡單N位計數(shù)器,或可使用DAG的管理部件(例如DAG的配置管理器)所產(chǎn)生的單調(diào)遞增的邏輯時間戳值(不必與日歷鐘相關(guān))。當特定狀態(tài)轉(zhuǎn)變記錄到達提交者節(jié)點時,例如當已沿著復制路徑保存足夠數(shù)目的狀態(tài)轉(zhuǎn)變記錄的副本后,所述轉(zhuǎn)變可顯式或隱式地提交。在一些實施方案中,可將在某一時間點的應用的狀態(tài)確定為高達選定序號的所有所提交狀態(tài)轉(zhuǎn)變的結(jié)果的邏輯累積。配置管理器可負責通過異步地傳播配置德爾塔消息到DAG節(jié)點(如下所述)來管理DAG配置的變化(例如,當節(jié)點由于故障而離開DAG時,或當加入/重新加入DAG時)。在一些實施方案中,每一復制節(jié)點可實施各自的確定性有限狀態(tài)機,且配置管理器可實施另一確定性有限狀態(tài)機。在各種實施方案中,用于管理DAG配置改變的協(xié)議可經(jīng)設(shè)計以最大化DAG的可用性或“活性”。例如,在至少一些實施方案中DAG節(jié)點可能無需使其對DAG的配置的視圖同步,因此,用于應用狀態(tài)轉(zhuǎn)變處理的協(xié)議可正確地工作,即使沿著復制路徑的一些節(jié)點具有與其他節(jié)點不同的當前DAG配置的視圖。因此,情況可能是,在一個簡單示例性情形下,DAG的一個節(jié)點A在以下假設(shè)下繼續(xù)執(zhí)行其狀態(tài)轉(zhuǎn)變處理責任:DAG由按此次序的節(jié)點A、B、C和D組成(即,具有復制路徑A到B到C到D),而另一節(jié)點D已由于節(jié)點C已離開DAG的配置德爾塔消息而被通知,且已因此將DAG的D的視圖更新為包括改變的路徑A到B到D。在至少一些實施方案中,配置管理器可無需請求DAG節(jié)點暫停狀態(tài)轉(zhuǎn)變節(jié)點的處理,不管所述節(jié)點關(guān)于當前DAG配置的潛在不同視圖。因此,在使用本文所述種類的復制DAG時,可能不需要可在一些狀態(tài)復制技術(shù)中所需的“停止一切”配置同步時段的類型。
在大多數(shù)操作條件下,用于傳播DAG配置改變信息的技術(shù)可最終在各個成員節(jié)點處產(chǎn)生DAG的配置的聚合一致視圖,同時最小化或消除與節(jié)點故障/退出、節(jié)點加入或節(jié)點角色變化相關(guān)聯(lián)的任何停機時間。狀態(tài)管理協(xié)議的正確性的正式數(shù)學證明可用于至少一些實施方案。在至少一些實施方案中,復制DAG的協(xié)議可在處理假陽性故障檢測時尤其有效。例如,在上述示例中,節(jié)點D可被配置管理器通知節(jié)點C已失效,即使節(jié)點C實際上尚未失效。因此,狀態(tài)轉(zhuǎn)變?nèi)钥稍诩訇栃怨收蠙z測之后、在指示C的退出的配置德爾塔消息在A、B和D處被接收之前的時間間隔中由C(且由其鄰居B和D)正確地處理一段時間,從而使得其狀態(tài)被復制的應用不管所述假陽性故障檢測而繼續(xù)前進。在最終被通知其已從DAG移除后,C可向配置管理器指示,其實際上可用于服務,且可被允許重新加入DAG(例如,作為備用節(jié)點或在沿著經(jīng)修改的復制路徑的某一其他位置)。
在一些實施方案中,接受器節(jié)點可負責:接收來自復制DAG的客戶端的應用狀態(tài)轉(zhuǎn)變請求;確定特定請求的轉(zhuǎn)變是否應被接受最終提交;存儲所接受的狀態(tài)轉(zhuǎn)變記錄的本地副本;以及沿著DAG的復制路徑朝向提交者節(jié)點將所接受的狀態(tài)轉(zhuǎn)變記錄傳輸?shù)洁従庸?jié)點。取決于用例,在一些實施方案中狀態(tài)轉(zhuǎn)變記錄可包含寫入有效負載:例如,如果應用狀態(tài)包括數(shù)據(jù)庫的內(nèi)容,那么狀態(tài)轉(zhuǎn)變記錄可包含在對應于狀態(tài)轉(zhuǎn)變的事務期間寫入的字節(jié)。在至少一些實施方案中,接受器節(jié)點還可負責確定或產(chǎn)生用于所接受狀態(tài)轉(zhuǎn)變的序號。中間節(jié)點可負責存儲所接受狀態(tài)轉(zhuǎn)變記錄的本地副本,且沿著通往提交者節(jié)點的路徑將指示所接受狀態(tài)轉(zhuǎn)變的消息傳輸/轉(zhuǎn)發(fā)到下一節(jié)點。提交者節(jié)點可將狀態(tài)轉(zhuǎn)變記錄的其自身副本存儲在本地存儲器上,例如并指示記錄已提交。指示對應的狀態(tài)轉(zhuǎn)變已被提交的記錄可在本文稱作“提交記錄”,而指示對應的狀態(tài)轉(zhuǎn)變已被接受但未必被提交的記錄可稱作“接受記錄”。在一些實施方案中,且取決于應用的需要,提交者節(jié)點可起始提交響應的傳輸(例如,經(jīng)由接受器節(jié)點)到請求狀態(tài)轉(zhuǎn)變的客戶端。在至少一個實施方案中,提交者節(jié)點可通知沿著復制路徑的一些或所有節(jié)點所述狀態(tài)轉(zhuǎn)變已被提交。在一些實施方案中,當在DAG節(jié)點處接收到提交的指示時,用于現(xiàn)在提交的狀態(tài)轉(zhuǎn)變的接受記錄可由對應的提交記錄替代,或經(jīng)修改而使得其現(xiàn)在表示提交記錄。在其他實施方案中,給定DAG節(jié)點可存儲用于同一狀態(tài)轉(zhuǎn)變的例如具有各自的序號的接受記錄和提交記錄兩者。在一些實施中,單獨的提交記錄集和接受記錄集可存儲在本地存儲器中各個DAG節(jié)點處,而在其他實施中,僅一個類型的記錄(接受或提交)可一次針對給定狀態(tài)轉(zhuǎn)變存儲在給定DAG節(jié)點處。
在一些實施方案中,可將配置管理器指定為DAG的配置信息的權(quán)威來源,負責接受DAG配置的變化并將所述變化傳播到DAG節(jié)點。在至少一些實施方案中,配置管理器可自身經(jīng)設(shè)計成靈活應對故障,例如作為經(jīng)由共識而共同地批準DAG配置改變(例如節(jié)點的移除或添加)并在多個配置管理器存儲裝置處復制所述DAG配置的節(jié)點容錯集群。如名稱“配置德爾塔”所表明,由配置管理器發(fā)送到DAG節(jié)點的消息可僅包含特定變化的指示(例如,由加入DAG或離開DAG的節(jié)點所引起的變化,或DAG的現(xiàn)有節(jié)點的角色/位置變化),且無需整體包含DAG的配置的表示,或列出DAG的全部成員。配置德爾塔消息的給定接收者因此可預期基于其已至此接收的配置德爾塔消息的特定集或順序而構(gòu)建其自身的DAG配置視圖。在一些實施中,還可將序號指派到配置德爾塔消息,例如以使得配置德爾塔消息的接收者能夠確定其是否已缺失任何早期的配置德爾塔消息。因為配置管理器可能未嘗試保證由不同DAG節(jié)點接收配置德爾塔消息的次序或相對時序,所以在一些實施方案中,DAG的配置的當前視圖可能在不同節(jié)點處是不同的,至少對于上文示例所指示的一些時段來說是不同的。
根據(jù)一個實施方案,DAG節(jié)點響應于配置德爾塔消息而采取的動作可基于所述配置改變是否影響接收者的直接鄰居而不同。考慮DAG在時間點T0包括接受器節(jié)點A、中間節(jié)點B和提交者節(jié)點C(具有初始復制路徑A到B到C)的另一示例情形。在時間T1,DAG的配置管理器DCM1意識到,例如由于明顯的故障或連接性丟失,B已離開DAG。DCM1可分別發(fā)送各自的異步配置德爾塔消息D1和D2到剩余節(jié)點A和C,不請求狀態(tài)轉(zhuǎn)變請求處理的任何暫停。如果在A于時間T3接收D1之前,C在時間T2接收到D2,那么A可繼續(xù)發(fā)送定向到B的狀態(tài)轉(zhuǎn)變消息持續(xù)某一時間間隔(T3-T2)(盡管,如果N實際上已失效,那么由A發(fā)送的消息可能不由B處理)。類似地,如果在C于T3接收D2之前,A在T2接收到D1,那么C可繼續(xù)處理其從B接收的消息(當B失效時所述消息正在飛行中)持續(xù)某一時間(T3-T2),直到C意識到B脫離了DAG。當節(jié)點A接收到D1時,如果其尚未與C聯(lián)系,那么節(jié)點A可建立與C的連接性作為其在新配置的復制路徑(A到C)中的新的直接后繼,所述新配置的復制路徑替代較舊的復制路徑(A到B到C)。類似地,當C接收到D2時,其可建立與A的連接性(如果A尚未聯(lián)系C)作為其新的直接前趨,且至少在一些實施方案中,C可遞交到A重新傳輸可能已從A傳輸?shù)紹但尚未到達C的狀態(tài)轉(zhuǎn)變記錄的請求。例如,C可在重新傳輸請求內(nèi)包含其至此已接收到的狀態(tài)轉(zhuǎn)變記錄的最高序號HSN1,從而使得A能夠重新傳輸具有高于HSN1的序號的任何狀態(tài)轉(zhuǎn)變記錄。
在至少一些實施方案中,配置管理器可依賴于健康檢測機制或服務以指示DAG節(jié)點何時已明顯變得不健康,從而導致從DAG配置移除明顯不健康的節(jié)點。分布式環(huán)境中的至少一些健康檢測機制可取決于心跳或可能不總是做出關(guān)于節(jié)點健康狀態(tài)的正確決策的其他較低水平的機制。同時,配置管理器可在發(fā)送其配置德爾塔消息之前并不處于無限期地等待確認實際節(jié)點故障的位置;而是,其可在確定節(jié)點故障的可能性高于某一閾值(例如,80%或90%)時傳輸配置德爾塔消息,或可使用某一其他啟發(fā)法來觸發(fā)DAG配置改變和對應的德爾塔消息。如上文提及,在復制DAG處使用的狀態(tài)管理協(xié)議可例如通過避免“停止一切”暫停來減輕假陽性故障“檢測”的負面影響。結(jié)果,在采用復制DAG時有可能使用比使用其他狀態(tài)復制技術(shù)的情況下可接受的更快/更便宜的(盡管可能較不可靠)故障檢查機制。
在至少一個實施方案中,可實施用于復制DAG的協(xié)調(diào)暫停技術(shù)。在某些條件下,例如,如果檢測到涉及多個DAG資源或節(jié)點的大規(guī)模故障事件,那么配置管理器可指導DAG的幸存節(jié)點停止處理進一步的狀態(tài)轉(zhuǎn)變,使其應用狀態(tài)信息彼此同步,將同步的應用狀態(tài)信息存儲在各自的存儲器位置,且等待重新激活指令。在一些實施中,在本地保存應用狀態(tài)之后,DAG節(jié)點可每個執(zhí)行干凈關(guān)閉和重新啟動,且在重新啟動后向配置管理器報告以指示其可用于服務。如果在由配置管理器發(fā)布暫停命令之前已失效的節(jié)點報告其可用于服務,那么在一些實施方案中,配置管理器可指導此類節(jié)點使其應用狀態(tài)與另一節(jié)點同步,所述另一節(jié)點被(例如,配置管理器)已知關(guān)于應用狀態(tài)是最新的。配置管理器可等待直到足夠數(shù)目的節(jié)點(a)可用于服務且(b)關(guān)于應用狀態(tài)最新為止,確定(潛在的新)DAG配置,且通過發(fā)送指示DAG配置的重新激活消息到所述配置的成員節(jié)點來重新激活所述DAG。此類受控且協(xié)調(diào)暫停/重新啟動策略可允許在大規(guī)模故障事件之后比在一些實施方案中有可能的其他方式更快速且可靠的應用恢復。所述協(xié)調(diào)暫停方法還可用于除了響應于大規(guī)模故障之外的目的,例如用于來自多個復制節(jié)點的應用狀態(tài)信息的快速并行備份/快照。
在各種實施方案中,上文所描述類型的基于DAG的復制狀態(tài)機可用以管理各種不同應用。在一些實施方案中,可實施日志記錄服務,其中可經(jīng)由使用復制DAG而實施的持久性改變?nèi)罩镜膶嵗齺碜杂糜谑聞展芾淼囊粋€或多個數(shù)據(jù)存儲區(qū)(例如,關(guān)系或非關(guān)系數(shù)據(jù)庫)。如下文進一步詳細描述,在一些實施方案中可由此類基于日志的事務管理器來使用樂觀并發(fā)控制機制。日志記錄服務的客戶端可在一個或多個源數(shù)據(jù)存儲區(qū)上執(zhí)行讀取操作,且確定將要在給定事務內(nèi)執(zhí)行寫入操作的一個或多個數(shù)據(jù)存儲區(qū)位置(例如,基于讀取的結(jié)果)??蓪x取集、寫入集、并發(fā)控制要求和/或?qū)κ聞盏倪壿嫾s束的表示的事務請求描述符遞交到日志記錄服務的沖突檢測器(例如,與對應的復制DAG的接受器節(jié)點相關(guān)聯(lián)的沖突檢測邏輯)。沖突檢測器可使用先前提交的事務的記錄連同事務描述符的內(nèi)容來確定所述事務請求是否可接受提交。如果事務接受提交,那么可在針對日志建立的DAG的某一數(shù)目的復制節(jié)點處起始對應提交記錄的復制。插入到日志的給定副本中的記錄因此可每個表示各自的應用狀態(tài)轉(zhuǎn)變。許多不同邏輯約束可在不同實施方案中指定,且由基于日志的事務管理器強制執(zhí)行,例如重復刪除要求、事務間提交順序要求及其類似者。在一些實施方案中,此類基于日志的事務管理機制可使得能夠支持多項目事務或多數(shù)據(jù)庫事務,其中例如給定事務的寫入集包含多個寫入位置,即使基礎(chǔ)數(shù)據(jù)存儲區(qū)可能本身并不支持用于涉及一個以上寫入的事務的原子性。在至少一些實施方案中,可將對應于所提交事務的寫入異步應用到相關(guān)數(shù)據(jù)存儲區(qū),例如,可在將對應寫入傳播到目標數(shù)據(jù)存儲區(qū)之前的某一時間將已提交事務的記錄保存在持久性改變?nèi)罩局?。在至少一些實施方案中,持久性改變?nèi)罩疽虼丝勺兂蓱脿顟B(tài)的權(quán)威來源,其中數(shù)據(jù)存儲區(qū)在日志已記錄狀態(tài)變化之后趕上應用狀態(tài)。
在各種實施方案中,復制DAG還可用于復制數(shù)據(jù)庫實例,用于管理高通量數(shù)據(jù)流,和/或用于分布式鎖定管理。在一些實施方案中,可在提供商網(wǎng)絡(luò)內(nèi)使用復制DAG來管理虛擬化資源的狀態(tài)變化,例如計算實例。在至少一些實施方案中,除了將所提交寫入傳播到注冊的數(shù)據(jù)存儲區(qū)(可經(jīng)由所述數(shù)據(jù)存儲區(qū)的各自讀取接口來讀取寫入的結(jié)果)之外,日志記錄服務還可界定和實施其自身的單獨訪問接口,從而允許感興趣的客戶端直接從持久性日志實例讀取針對給定客戶端應用而存儲的記錄的至少一部分。
示例性系統(tǒng)環(huán)境
圖1示出根據(jù)至少一些實施方案的示例性系統(tǒng)環(huán)境,其中建立復制節(jié)點的動態(tài)DAG(有向非循環(huán)圖)用于管理應用狀態(tài)變化。如所展示,在系統(tǒng)100中,為了管理應用160的狀態(tài)轉(zhuǎn)變而建立的復制DAG140包括具有三個節(jié)點的復制路徑:接受器節(jié)點110、中間節(jié)點112和提交者節(jié)點114。另外,在所描繪實施方案中,DAG 140包含備用節(jié)點130,其可用于在需要時接管其他節(jié)點中的任一者的責任??刹渴鸸?jié)點的其他組合用于其他復制DAG,例如,一個以上中間節(jié)點可用于一些應用,無中間節(jié)點可用于其他應用,或備用節(jié)點可不被建立??捎扇缦挛拿枋龅娜蒎eDAG配置管理器(DCM)164來協(xié)調(diào)DAG 140的配置的變化。
在所描繪實施方案中,接受器節(jié)點110可經(jīng)由一個或多個編程接口(諸如API(應用編程接口))來接收應用狀態(tài)轉(zhuǎn)變請求(STR)150。使用應用相關(guān)的規(guī)則或邏輯,接受器節(jié)點110可接受用于最終提交的請求轉(zhuǎn)變,或可來拒絕所述請求。如果接受轉(zhuǎn)變,那么可由接受器節(jié)點110產(chǎn)生序號,其例如指示相對于其他接受轉(zhuǎn)變而接受所述轉(zhuǎn)變的次序。如上文提及,在一些實施方案中,序號可包括針對每一接受轉(zhuǎn)變而遞增的計數(shù)器,而在其他實施方案中,可使用由配置管理器提供的邏輯時鐘或時間戳值。包含對應序號的應用狀態(tài)記錄(ASR)172A的集合176A可由接受器節(jié)點存儲在本地持久性存儲器中。在一些實施方案中,應用狀態(tài)記錄可包括轉(zhuǎn)變接受記錄和轉(zhuǎn)變提交記錄兩者(其中僅在通知接受器節(jié)點對應轉(zhuǎn)變由提交者節(jié)點提交之后才存儲提交記錄)。在其他實施方案中,沿著復制路徑的至少一些節(jié)點可僅存儲接受記錄。在存儲指示接受的狀態(tài)轉(zhuǎn)變記錄之后,接受器節(jié)點可傳輸指示批準的狀態(tài)轉(zhuǎn)變消息(STM)152A到沿著復制路徑的其后繼節(jié)點,諸如所示配置中的中間節(jié)點112。中間節(jié)點可將對應ASR的其自身副本172B連同序號存儲在其本地ASR集合176B中。中間節(jié)點可將其自身的STM 152B傳輸?shù)窖刂斍皬椭坡窂降钠溧従樱绲剿枥L實施方案中的提交者節(jié)點114。在至少一些實施中,STM 152可包含哪些節(jié)點已存儲ASR的副本的指示,例如,消息152B可向提交者節(jié)點指示,指示接受的應用狀態(tài)記錄的各自副本已經(jīng)被分別存儲在節(jié)點110和節(jié)點112處。
響應于在提交者節(jié)點處確定已存儲足夠數(shù)目的應用狀態(tài)記錄的副本(其中足夠的副本的確切數(shù)目可為應用160的配置參數(shù)),可提交所述轉(zhuǎn)變。在所描繪實施方案中,提交者節(jié)點的ASR集合176C可包括事務提交的記錄(與批準相反);因此,ASR 172C可指示提交而不是僅接受。在至少一些實施方案中,提交者節(jié)點116可傳輸指示或通知到接受器節(jié)點和/或中間節(jié)點來指示所述轉(zhuǎn)變被提交。在其他實施方案中,接受器和/或中間節(jié)點可遞交請求(例如,定期地)到提交者節(jié)點116以確定已提交哪些轉(zhuǎn)變,且可相應地更新其ASR集合。對于一些應用,可能不需要顯式提交;因此,沒有提交的指示可被存儲,且沿著路徑的DAG節(jié)點中的每一者可僅存儲指示接受的各自應用狀態(tài)記錄。在所描繪實施方案中,提交后STM 154可從提交者節(jié)點傳輸?shù)絺溆霉?jié)點130以使得備用節(jié)點能夠更新其ASR集合176D(例如,通過存儲提交ASR 172D),使得如果且當激活備用節(jié)點以替代另一DAG節(jié)點時,其應用狀態(tài)信息匹配提交者節(jié)點的應用狀態(tài)信息。在一些實施方案中,使備用節(jié)點始終跟上最新提交的應用狀態(tài)的事實可使得配置管理器能夠快速地激活用于其他三個類型角色中的任一者的備用節(jié)點:例如,作為接受器節(jié)點、中間節(jié)點或提交者節(jié)點。
在所描繪實施方案中,容錯DAG配置管理器(DCM)164可負責根據(jù)需要來傳播呈配置德爾塔消息166(例如,消息166A、166B、166C和166D)的形式的DAG配置或成員的變化到DAG節(jié)點。當給定DAG節(jié)點例如由于故障而離開DAG 140時,可例如通過DCM 164將對應配置德爾塔消息166發(fā)送到一個或多個幸存節(jié)點。類似地,當新的節(jié)點加入DAG時(例如,在從故障恢復之后,或以增加應用160的耐久性水平),可通過DCM將指示加入事件、DAG內(nèi)的加入節(jié)點的位置、和/或授予加入節(jié)點的角色(例如,接受器、中間、提交者或備用)的對應配置德爾塔消息傳輸?shù)紻AG的一個或多個當前成員節(jié)點。配置德爾塔消息166可彼此異步,且可由其目標按不影響應用狀態(tài)的整體復制的任何次序來接收。DAG的每一節(jié)點可獨立于其他節(jié)點可具有的配置視圖174基于所接收的配置德爾塔消息來負責構(gòu)造DAG配置的其自身視圖174。因此,例如,由于在各自節(jié)點110、112、114和130處接收的不同配置德爾塔消息的相對次序和/或時序,在一些實施方案中,配置視圖174A、174B、174C和174D中的一者或多者可至少在一些短的時間間隔為不同的。在至少一些實施方案中,每一DAG節(jié)點可存儲在各自的本地配置改變儲存庫中接收的一定數(shù)量的配置德爾塔消息的表示或內(nèi)容。在所描繪實施方案中,DCM 164可不強制執(zhí)行由DAG節(jié)點進行的應用狀態(tài)處理中的停止一切暫停,例如,其可允許所述節(jié)點繼續(xù)接收和處理應用狀態(tài)轉(zhuǎn)變消息,不管配置德爾塔消息的時序或基礎(chǔ)DAG配置改變。下文參照圖2a-2h來論述DAG節(jié)點對配置德爾塔消息作出響應的方式的示例。
應注意,盡管圖1展示具有單個線性復制路徑的DAG或具有每一類型的一個節(jié)點的“鏈”,但在至少一些實施方案中,復制DAG可包含分支路徑和/或用于每一角色的多個節(jié)點。即,若干接受器節(jié)點、中間節(jié)點、提交者節(jié)點和/或備用節(jié)點可共存在同一DAG中,且DAG的復制路徑可包含加入節(jié)點(接收來自多個前趨節(jié)點的轉(zhuǎn)變請求所在的節(jié)點)或分裂節(jié)點(從其將轉(zhuǎn)變請求發(fā)送到多個后繼節(jié)點的節(jié)點)。如果接受器節(jié)點110或提交者節(jié)點116中的任一者拒絕請求的狀態(tài)轉(zhuǎn)變(例如,由于接受器節(jié)點確定一組應用特定接受準則未得到滿足,或由于在提交者節(jié)點接收到接受的狀態(tài)轉(zhuǎn)變請求消息之時已進行所接受轉(zhuǎn)變的副本的不足數(shù)目),那么在一些實施方案中,可通知請求所述轉(zhuǎn)變的客戶端所述轉(zhuǎn)變未被提交??蛻舳私又芍卦囁鲛D(zhuǎn)變(例如,通過遞交另一狀態(tài)轉(zhuǎn)變請求),或可決定完全放棄請求。在一些實施中,還可允許中間節(jié)點使轉(zhuǎn)變請求中止。
圖2a-2h示出根據(jù)至少一些實施方案的操作的示例性順序,所述操作可在復制DAG處響應于檢測到DAG節(jié)點中的一者已失效來執(zhí)行。圖2a展示DAG配置的初始狀態(tài),包含三個節(jié)點202A、202B和202C。在節(jié)點202A處接收狀態(tài)轉(zhuǎn)變請求(STR)150。所接受狀態(tài)轉(zhuǎn)變記錄在節(jié)點202A(在STR的本地批準之后)和202B(在節(jié)點202B接收經(jīng)批準的STM 211A之后)處復制,且在202C(在節(jié)點202C接收經(jīng)批準的STM 211B之后)處提交。DCM 164可接收指示節(jié)點202B已明顯失效的健康狀態(tài)更新250。在不同實施方案中,關(guān)于節(jié)點202B的狀態(tài)的健康狀態(tài)更新可從多個來源中的任一者接收,例如,來自其他節(jié)點中的一者(202A或202B),或來自DAG外部的健康監(jiān)視服務(例如,在建立于體現(xiàn)DAG節(jié)點的提供商網(wǎng)絡(luò)處的通用資源健康監(jiān)視服務)。在至少一個實施中,健康狀態(tài)更新可由DMC 164自身的子部件產(chǎn)生,諸如定期發(fā)送心跳消息到DAG節(jié)點且在某一數(shù)量的連續(xù)心跳消息的可接受時間窗內(nèi)未接收到響應的情況下確定給定節(jié)點處于不健康狀態(tài)的監(jiān)視進程。
在所描繪實施方案中,DCM 164可基于健康狀態(tài)更新來決定應從DAG移除節(jié)點202B,且應添加新的節(jié)點202D作為節(jié)點202C的后繼。新的節(jié)點可例如包括被提升到活動狀態(tài)作為DAG的新的提交者節(jié)點的備用節(jié)點。在決定DAG的新配置(即,所述DAG現(xiàn)在應包括復制鏈202A到202C到202D)且將新的配置的表示保存在持久性儲存庫中之后,DCM 164可發(fā)布命令241到節(jié)點202D以加入DAG作為節(jié)點202C的后繼。應注意至少在一些實施方案中,從DAG移除節(jié)點(諸如202B)可未必伴有替換節(jié)點的直接添加(尤其在移除之后保持在線且連接的DAG節(jié)點的數(shù)目超過其狀態(tài)被復制的應用所需的節(jié)點的最小數(shù)目的情況下);示出節(jié)點202D的添加僅作為DCM可對節(jié)點故障(或至少明顯的節(jié)點故障)作出響應的方式中的一者。如圖2b中所示,其可為節(jié)點202B實際上尚未失效的情況(即,所述健康更新在有關(guān)202B的故障上出錯)。在此類假陽性情形中,狀態(tài)轉(zhuǎn)變消息可繼續(xù)從202A朝向202B傳輸,且從202B傳輸?shù)?02C,從而允許應用在DCM 164進行移除決策之后繼續(xù)前進至少一些時間。
在至少一些實施方案中,當從DAG移除諸如202B的節(jié)點時,且當所移除節(jié)點的直接后繼(例如,202C)保持在DAG中時,可將先前指派到所移除節(jié)點的角色轉(zhuǎn)移到直接后繼。因此,曾經(jīng)可能作為提交者節(jié)點的節(jié)點202C可在節(jié)點202B的離開后成為中間節(jié)點,且可將新近激活的節(jié)點202D指定為新的提交者節(jié)點。如果所移除節(jié)點沒有直接后繼(例如,如果在所描繪示例中以移除節(jié)點202C而不是節(jié)點202B),那么在一些實施方案中新近激活的備用節(jié)點可被授予指派到所移除節(jié)點的角色。在其他實施方案中,未按照此類依序/線性方式來轉(zhuǎn)移角色,例如,配置管理器可決定應授予給定節(jié)點哪些角色而無需考慮所述節(jié)點相對于所移除節(jié)點的相對位置。
在所描繪實施方案中,在決定應從DAG移除節(jié)點202B之后,DCM 164可發(fā)送各自的異步配置德爾塔消息242A和242B到節(jié)點202A和202C。如所展示,德爾塔消息中的每一者可指示,202B已離開DAG,且202D已加入。盡管在所描繪實施方案中在單個配置德爾塔消息中指示配置的兩個變化,但在其他實施方案中,可發(fā)送單獨的配置德爾塔消息用于202B的移除和202D的加入。在所描繪實施方案中,配置德爾塔消息可僅指示DAG配置的變化,且可不包括DAG的全部配置的表示。STM可繼續(xù)從節(jié)點202A被引導到節(jié)點202B,直到節(jié)點202A接收到配置德爾塔消息242A或以其他方式意識到202B已離開DAG(例如,由于網(wǎng)絡(luò)連接的終止)為止。在202B實際上尚未失效的情形下,節(jié)點202B可繼續(xù)處理狀態(tài)轉(zhuǎn)變請求且朝向節(jié)點202C發(fā)送消息211B,直到其意識到其已被從DAG移除為止(例如,如果202A或202C停止與202B通信)。
因為使用異步消息傳遞機制來發(fā)送配置德爾塔消息242,所以所述消息在不同的時間到達其目的地。如果在節(jié)點202C接收配置德爾塔消息242B之前節(jié)點202A接收配置德爾塔消息242A,那么可實現(xiàn)圖2d中描繪的情形(其中DAG至少臨時含有分支)。響應于消息242A,節(jié)點202A可將配置改變的指示保存在本地存儲器中且停止發(fā)送任何其他消息到節(jié)點202B。此外,節(jié)點202A可確定其新的后繼節(jié)點是202C,且可因此建立與節(jié)點202C的網(wǎng)絡(luò)連接性并開始向節(jié)點202C發(fā)送新的狀態(tài)轉(zhuǎn)變消息211C。在所描繪實施方案中,狀態(tài)轉(zhuǎn)變處理活動可在DAG的各個節(jié)點處繼續(xù),即使指示202B的移除的消息到達剩余節(jié)點。在假定節(jié)點202B已失效但實際上保持起作用的情形下,例如,甚至在節(jié)點202A了解到節(jié)點202B已從DAG移除之后,仍可在節(jié)點202B處從節(jié)點202A接收一個或多個在飛行中的狀態(tài)轉(zhuǎn)變消息。在接收此類在飛行中的消息后,節(jié)點202B可在本地存儲器中復制所述消息中指示的狀態(tài)轉(zhuǎn)變信息且嘗試傳輸另一類似STM到節(jié)點202C。如果節(jié)點202C尚未了解節(jié)點202B的移除(或至少尚未關(guān)閉其與節(jié)點202B的連接),那么節(jié)點202C可接收且處理來自節(jié)點202B的消息,從而允許應用繼續(xù)前進,即使節(jié)點202B已被配置管理器從DAG配置移除。
如果在節(jié)點202A接收配置德爾塔消息242A之前節(jié)點202C接收配置德爾塔消息242B,那么可實現(xiàn)圖2e中示出的情形。在接收消息242B后,節(jié)點202C可停止接收從節(jié)點202B發(fā)送的新消息(例如,如果其與節(jié)點202B的連接仍在服務中,那么通過終止所述連接)。在了解到節(jié)點202A是其在DAG路徑中的新的直接前趨后,節(jié)點202C可建立與節(jié)點202A的連接性。在所描繪實施方案中,節(jié)點202C還可確定最高序號HSN1(從節(jié)點202C處已接收的經(jīng)批準STM的序號當中),且發(fā)送請求260到節(jié)點202A以重新傳輸202C可能已缺失的任何經(jīng)批準的狀態(tài)轉(zhuǎn)變消息(即,具有比HSN1高的序號的任何經(jīng)批準STM)。此外,節(jié)點202C還可建立與其新的后繼節(jié)點202D的連接性,且可開始發(fā)送后續(xù)經(jīng)批準STM 211D到節(jié)點202D。
在節(jié)點202A和202C兩者都已被通知DAG配置改變后,圖2f中示出的DAG的新復制路徑(即,202A到202C到202D)可用于新引入的狀態(tài)轉(zhuǎn)變請求。應注意,由于配置德爾塔消息242的時序,其可為以下情況:在節(jié)點202A處接收到配置德爾塔消息242A之前,節(jié)點202A從節(jié)點202C了解到配置改變。類似地,在一些實施方案中,節(jié)點202C可從節(jié)點202A(或甚至節(jié)點202D)了解所述新配置。因此,可存在關(guān)于所述新配置的信息可到達DAG的任何給定節(jié)點的多個方式,且至少在一些實施方案中,DAG節(jié)點可甚至在配置德爾塔消息已到達其所有目標接收者之前開始使用新復制路徑的部分。
如圖2g中所示,在已從DAG移除之后的某一時刻(例如,由于實際故障或由于假陽性故障檢測),節(jié)點202B可任選地向DCM 164指示其準備好用于服務。在實際故障的情況下,例如,節(jié)點202B可最終被修復并重新啟動,且可在發(fā)送“可用于服務”消息280之前執(zhí)行某組恢復操作。在網(wǎng)絡(luò)連接性丟失的情況下,“可用于服務”消息可在重新建立連接性之后發(fā)送。作為響應,在所描繪實施方案中,DCM 164可決定添加回節(jié)點202B作為DAG的備用節(jié)點。因此,如圖2h中所示,DCM可發(fā)送加入命令282到節(jié)點202B,且分別發(fā)送一組新的配置德爾塔消息244A、244B和244C到節(jié)點202A、202B和202D,從而通知它們節(jié)點202B的添加。應注意,提供圖2a-2h中示出的操作順序作為示例,且在各種實施方案中,DAG節(jié)點和DCM可響應于節(jié)點202B的明顯故障而執(zhí)行與圖2a-2h中示出的操作順序不同的操作順序。例如,在一些實施方案中,沒有新的節(jié)點可添加到DAG作為節(jié)點202C的后繼。而且,在一些實施方案中,節(jié)點202B可在其變得可用于服務之后不必重新加入同一DAG;而是,例如,其可部署到不同的DAG或可保持在可配置新DAG的節(jié)點池中。
盡管在圖2a-2h中將故障的檢測展示為觸發(fā)DAG配置改變,但大體來說,在各種實施方案中,許多不同考慮因素中的任一者可導致DAG配置的修改。例如,應用所有者(或DCM)可決定添加節(jié)點到DAG以增強數(shù)據(jù)耐久性或出于可用性原因??砂搭愃频漠惒椒绞綄⒅甘拘鹿?jié)點的添加的配置德爾塔消息傳播到其他DAG節(jié)點作為上文在一些實施方案中所描述的移除相關(guān)傳播,而不需要狀態(tài)轉(zhuǎn)變處理中的“停止一切”暫停。在一些實施方案中,DAG節(jié)點可能出于維護相關(guān)原因而必須被離線,例如,用于軟件升級、用于對軟件錯誤除錯或用于硬件修改。在至少一個實施方案中,DAG的配置可由于以下確定而改變:節(jié)點中的一者或多者處的工作負載水平(例如,每秒處理的狀態(tài)轉(zhuǎn)變數(shù)目)已到達閾值水平,且應利用比當前使用的更高性能(或較不高性能)的硬件/軟件堆疊。在一些實施方案中,DAG配置改變可涉及改變特定DAG節(jié)點的位置或角色,未必需要添加或移除節(jié)點。例如,配置管理器可將提交者的角色切換給先前為中間節(jié)點的節(jié)點,且使舊的提交者節(jié)點成為新配置中的中間節(jié)點??蓪嵤┐祟惤巧淖?且傳播對應的配置德爾塔消息)例如用于負載平衡目的,尤其在同一主機用于若干不同DAG的多個節(jié)點的多租戶環(huán)境中。下文進一步詳細描述此類多租戶環(huán)境。
狀態(tài)轉(zhuǎn)變記錄和配置德爾塔消息
圖3示出根據(jù)至少一些實施方案的可在動態(tài)復制DAG處產(chǎn)生的應用狀態(tài)記錄(ASR)和DAG配置德爾塔消息的示例性部件。如先前指示,在至少一些實施方案中,每個表示經(jīng)批準或提交狀態(tài)轉(zhuǎn)變的應用狀態(tài)記錄的副本可存儲在沿著DAG的復制路徑的若干節(jié)點中的每一者處,且本文還可將應用狀態(tài)記錄稱作狀態(tài)轉(zhuǎn)變記錄。如所展示,應用狀態(tài)記錄320可包括轉(zhuǎn)變的類型302的指示,例如,是否記錄所請求狀態(tài)轉(zhuǎn)變的批準,或是否記錄經(jīng)批準狀態(tài)轉(zhuǎn)變的提交。在一些實施方案中,如先前指出,每一DAG節(jié)點可存儲批準記錄和提交記錄兩者,而在其他實施方案中,可存儲僅一個類型的狀態(tài)轉(zhuǎn)變記錄。例如,在一個情形中,批準記錄可最初在非提交者節(jié)點處復制,且在通過提交者節(jié)點最終提交事務之后,所述批準記錄可改變?yōu)樘峤挥涗?。在至少一個實施方案中,單獨的轉(zhuǎn)變類型字段302可未包含在ASR中或?qū)е庐a(chǎn)生ASR的消息中,而是,可基于DAG節(jié)點對其當前角色和/或從其接收消息的源DAG節(jié)點的角色的知識來由DAG節(jié)點推斷所述轉(zhuǎn)變的類型。例如,接收狀態(tài)轉(zhuǎn)變消息的非提交者節(jié)點可推斷,所述消息表示經(jīng)批準狀態(tài)轉(zhuǎn)變。
在所描繪實施方案中,狀態(tài)轉(zhuǎn)變記錄320記錄可包含轉(zhuǎn)變數(shù)據(jù)304。轉(zhuǎn)變數(shù)據(jù)部件304的內(nèi)容的性質(zhì)可取決于狀態(tài)被管理的應用而不同。在一些情況下,例如,狀態(tài)轉(zhuǎn)變請求可包含寫入有效負載(指示將被寫入的某一數(shù)量的字節(jié),和所述字節(jié)將被寫入的地址),寫入有效負載可包含在轉(zhuǎn)變記錄中。對于其他應用,每一狀態(tài)轉(zhuǎn)變可指示應用客戶端所發(fā)布的各自命令,且所述命令的表示可包含在ASR中。ASR 320還可包含對應于狀態(tài)轉(zhuǎn)變的序號306(其還可被視為邏輯時間戳)。所述序號可例如在批準狀態(tài)轉(zhuǎn)變請求時在接受器節(jié)點處產(chǎn)生,或在提交狀態(tài)轉(zhuǎn)變時在提交者節(jié)點處產(chǎn)生。在至少一些實施方案中,可通過按增加的序號次序來應用(在應用的某一初始狀態(tài)開始)所提交狀態(tài)記錄的轉(zhuǎn)變數(shù)據(jù)(例如,寫入有效負載、命令等)來確定使用DAG來管理的應用的當前狀態(tài)。在一些實施方案中,轉(zhuǎn)變的復制歷史信息308還可包含在ASR中,例如,指示哪些DAG節(jié)點已存儲針對同一轉(zhuǎn)變的各自ASR,和/或那些記錄已被復制的次序。在一些實施中,此類復制歷史信息可例如由提交者節(jié)點使用,以確認足夠數(shù)目的節(jié)點已記錄給定狀態(tài)轉(zhuǎn)變用于提交。在一些實施方案中,ASR消息可指示接收對應的狀態(tài)轉(zhuǎn)變請求的接受器節(jié)點的身份,但無需包含關(guān)于沿著復制路徑的其他節(jié)點的信息。在至少一個實施中,可不需要提交者節(jié)點來確認在提交經(jīng)批準狀態(tài)轉(zhuǎn)變之前足夠數(shù)目的節(jié)點已復制狀態(tài)轉(zhuǎn)變記錄。
在所描繪實施方案中,DAG配置德爾塔消息370可指示加入或離開配置的一個(或多個)節(jié)點的識別符352,且實施改變354的類型(例如,加入相對于離開)。在一些實施中,關(guān)于加入(或離開)節(jié)點的角色信息356可任選地包含在配置德爾塔消息中。在至少一些實施方案中,僅在應用狀態(tài)序號與應用狀態(tài)轉(zhuǎn)變相關(guān)聯(lián)時,DAG配置改變序號358可包含在配置德爾塔消息中。例如,此類序號可由配置德爾塔消息的接收者使用,以確定接收者是否已缺失任何先前配置改變。如果已缺失一些配置改變(例如由于網(wǎng)絡(luò)包丟失),那么接收者節(jié)點可發(fā)送請求到DCM以重新傳輸缺失的配置德爾塔消息。在各種實施方案中,可將配置改變序號358實施為DCM處的計數(shù)器或邏輯時間戳。在DCM包括具有多個節(jié)點的集群的一些實施中,由集群管理器維持的全局邏輯時間戳可用作用于配置改變序號358的源。
提供商網(wǎng)絡(luò)環(huán)境中的復制DAG部署
圖4示出根據(jù)至少一些實施方案的其成員節(jié)點分布在提供商網(wǎng)絡(luò)的多個可用性容器中的示例性復制DAG。實體(諸如公司或公共部門組織)所設(shè)置的用于將可通過因特網(wǎng)和/或其他網(wǎng)絡(luò)訪問的一個或多個服務(諸如各種類型的多租戶和/或單租戶基于云的計算或存儲服務)提供給一組分布式客戶端的網(wǎng)絡(luò)在本文中可稱為提供商網(wǎng)絡(luò)。至少一些提供商網(wǎng)絡(luò)還可被稱作“公共云”環(huán)境。給定提供商網(wǎng)絡(luò)可包括托管實現(xiàn)、配置和分配由提供商提供的基礎(chǔ)設(shè)施和服務所需的各種資源池的許多數(shù)據(jù)中心,如物理和/或虛擬化計算機服務器、存儲裝置、聯(lián)網(wǎng)設(shè)備等的集合。在較大提供商網(wǎng)絡(luò)內(nèi),一些數(shù)據(jù)中心可位于與其他數(shù)據(jù)中心不同的城市、州或國家中,且在一些實施方案中,分派到給定應用的資源可分布在若干此類位置中,以實現(xiàn)可用性、故障恢復和性能的所需水平。
在一些實施方案中,提供商網(wǎng)絡(luò)可被組織成多個地理區(qū)域,并且每一區(qū)域可包含一個或多個可用性容器,所述可用性容器還可稱為“可用性區(qū)”??捎眯匀萜鬟M而可包括一個或多個不同的物理處所或數(shù)據(jù)中心,所述物理處所或數(shù)據(jù)中心被構(gòu)建(例如,利用獨立基礎(chǔ)結(jié)構(gòu)部件,例如電力相關(guān)裝備、冷卻裝備和/或物理安全部件),其方式為使得給定可用性容器中的資源絕緣于其他可用性容器中的故障。一個可用性容器中的故障可不預期導致任何其他可用性容器中的故障;因此,給定物理主機或虛擬化服務器的可用性配置文件意圖獨立于不同可用性容器中的其他主機或服務器的可用性配置文件。
如圖4中所示,在一些實施方案中,可將復制DAG的一個或多個節(jié)點實例化在與DAG的其他節(jié)點不同的可用性容器中。在所描繪實施方案中,提供商網(wǎng)絡(luò)402包含三個可用性容器466A、466B和466C,其中每一可用性容器包括某一數(shù)目的節(jié)點主機410??捎眯匀萜?66A的節(jié)點主機410A例如包括DAG節(jié)點422A、本地持久性存儲器(例如,一個或多個基于磁盤的裝置)430A、以及可用作與DAG客戶端通信的前端的代理412A。類似地,可用性容器466B中的節(jié)點主機410B包括DAG節(jié)點422B、本地持久性存儲器430B和代理412B,且可用性容器466C中的節(jié)點主機410C包含DAG節(jié)點422C、本地持久性存儲器430C和代理412C。在所描繪實施方案中,DAG節(jié)點422(和/或代理412)可每個包括一個或多個執(zhí)行線程,諸如一個或多個處理程序集合。在所描繪實施方案中,本地持久性存儲裝置430可用以存儲沿著復制路徑491的應用狀態(tài)信息的本地副本(和/或在復制路徑491的DAG節(jié)點422處接收的DAG配置德爾塔消息內(nèi)容)。
在圖4的實施方案中描繪的DAG的DCM自身包括分布在多個可用性容器中的多個節(jié)點。如所展示,可使用基于共識的DCM集群490,包括隨DCM存儲器475A位于可用性容器466A中的DCM節(jié)點472A,以及隨DCM存儲器475B位于可用性容器466B中的DCM節(jié)點472B。所描繪DCM因此可被視為至少關(guān)于不越過可用性容器邊界的故障是容錯的。此類容錯DCM的節(jié)點可在本文稱作“配置節(jié)點”,例如相比于由DCM管理的DAG的成員節(jié)點??墒褂肈CM節(jié)點472當中的基于共識的協(xié)議來批準DAG配置的變化(例如,包含節(jié)點移除、添加或角色變化),且在將對應的配置德爾塔消息傳輸?shù)紻AG節(jié)點422之前可必須由多個DCM節(jié)點來將DAG配置的表示存儲在持久性存儲器中。用于DCM和/或用于給定復制DAG的可用性容器的數(shù)目可在不同實施方案中和針對不同應用而不同,例如取決于應用的可用性要求或數(shù)據(jù)耐久性要求。在一些實施方案中,復制DAG可用以管理在提供商網(wǎng)絡(luò)處實施的其他服務的資源的配置。例如,在一個實施方案中,可使用復制DAG來管理虛擬化計算服務所使用的計算實例(虛擬機)或?qū)嵗鳈C(物理主機)的狀態(tài)的變化。
圖5示出根據(jù)至少一些實施方案的示例性配置,其中多個復制DAG的節(jié)點可按多租戶方式而實施在單個主機處。如所展示,三個復制DAG 555A、555B和555C的節(jié)點分布在四個DAG節(jié)點主機510A、510B、510C和510D當中。大體來說,節(jié)點主機可在其資源能力方面不同,例如,一個主機的計算、存儲、網(wǎng)絡(luò)連接和/或存儲器資源可與其他主機的計算、存儲、網(wǎng)絡(luò)連接和/或存儲器資源不同。例如,節(jié)點主機510B具有可用于DAG信息的兩個存儲裝置530B和530C,節(jié)點主機510D具有兩個存儲裝置530E和530F,而節(jié)點主機510A和510C具有一個存儲裝置(分別為530A和530D)。
主機510A包括DAG 555A的接受器節(jié)點522A,和DAG 555C的中間節(jié)點522N。主機510B包括DAG 555A的中間節(jié)點522B、DAG 555B的提交者節(jié)點522K和DAG 555C的中間節(jié)點522O。DAG 555A的提交者節(jié)點522C和DAG 555C的提交者節(jié)點522P可實施在主機510C處。最后,DAG 555A的備用節(jié)點522C、DAG 555B的接受器節(jié)點522J和DAG 555C的接受器節(jié)點522M可實例化在主機510D處。因此,大體來說,給定主機可用于N個不同DAG的節(jié)點,且每一DAG可利用M個不同主機,其中在至少一些實施方案中M和N可為可配置參數(shù)。在至少一些實施方案中,代表各自應用所有者而建立的若干DAG的節(jié)點可按多租戶方式實施在同一主機上:例如,其可能對于特定應用所有者不明顯,使得被用于其應用的狀態(tài)管理的資源還被用于管理其他應用的狀態(tài)。在一些提供商網(wǎng)絡(luò)環(huán)境中,可實施放置服務,其選擇特定主機以用于給定應用的復制DAG的給定節(jié)點。可基于不同實施方案中的各個因素組合來選擇節(jié)點主機,諸如其狀態(tài)被管理的應用的性能要求、候選主機處的可用資源能力、負載平衡需要、定價考慮因素等等。在至少一些實施中,每個主機實例化多個DAG節(jié)點可幫助相對于在僅實例化單個DAG節(jié)點的情況下可能實現(xiàn)的利用水平而增加主機處的整體資源利用水平。例如,尤其在其中用于DAG節(jié)點的大部分邏輯是單個線程的實施方案中,多核心主機的處理器核心中的多者可在多租戶情形中而不是在單租戶情形中并行使用,因此增加了所述主機的平均CPU利用率。
用于實施動態(tài)基于DAG的狀態(tài)復制的方法
如上文論述,在一些實施方案中,可在給定時間點授予復制DAG的給定節(jié)點許多角色中的一者(例如,接受器、中間、提交者或備用)。圖6是示出根據(jù)至少一些實施方案的操作的多個方面的流程圖,所述操作可響應于接收到狀態(tài)轉(zhuǎn)變請求(STR)而執(zhí)行在復制DAG的接受器節(jié)點處。如元素601中所示,接受器節(jié)點可從例如狀態(tài)復制服務的客戶端接收包括用于應用的STR的消息。在不同實施方案中,STR可部分取決于應用的性質(zhì)而包括各種元素。例如,在如下文更詳細描述的一些實施方案中,DAG可用于在一個或多個數(shù)據(jù)存儲區(qū)處指導的事務的樂觀并發(fā)控制,且STR可包含諸如可用以檢測與先前提交的事務的沖突的讀取集和寫入集的數(shù)據(jù)。其狀態(tài)轉(zhuǎn)變通過使用復制DAG來管理的每一應用可具有其自身的用于請求的狀態(tài)轉(zhuǎn)變的接受準則集合,且至少在一些情況下,STR的內(nèi)容可用以決定所述轉(zhuǎn)變應被接受還是拒絕。在一些實施中,操作條件還可或代替用于接受/拒絕請求的狀態(tài)轉(zhuǎn)變,例如如果在接受器節(jié)點處或在DAG的其他節(jié)點處的工作負載水平處于或高于閾值,那么可拒絕狀態(tài)轉(zhuǎn)變。如果所述轉(zhuǎn)變滿足接受準則(如元素604中所檢測),那么可例如通過遞增計數(shù)器值或通過獲得某一其他單調(diào)遞增邏輯時間戳值來產(chǎn)生用于接受STR的新的批準序號(元素607)。指示所述轉(zhuǎn)變經(jīng)批準的記錄可連同序號存儲在本地存儲器中(元素610)。對于一些應用,轉(zhuǎn)變請求可包含將被復制的數(shù)據(jù)集(例如寫入有效負載),接受器節(jié)點同樣可將所述數(shù)據(jù)集存儲在本地存儲器中。在一個實施中,接受器節(jié)點可包括在提供商網(wǎng)絡(luò)的特定主機處運行的一個或多個處理程序,且所述轉(zhuǎn)變的批準、序號和所述轉(zhuǎn)變的數(shù)據(jù)集的記錄可全部存儲在特定主機的持久性基于磁盤的存儲裝置處。在一些實施方案中,所述轉(zhuǎn)變的數(shù)據(jù)、轉(zhuǎn)變經(jīng)批準的指示和序號可全部組合成存儲在本地存儲器處的單個對象,諸如插入到(或附加到)日志的日志條目。在其他實施方案中,所述轉(zhuǎn)變的數(shù)據(jù)集可與指示轉(zhuǎn)變的批準的記錄分開存儲。
在安全地存儲狀態(tài)轉(zhuǎn)變的記錄之后,可將指示所述批準的狀態(tài)轉(zhuǎn)變消息傳輸?shù)窖刂鳧AG的復制路徑(元素613)朝向提交者節(jié)點的鄰居節(jié)點。在一些情況下,取決于DAG的拓撲學,可發(fā)送多個此類消息,每一消息發(fā)送到沿著復制路徑的每一鄰居節(jié)點。如先前描述,DAG的每一節(jié)點可具有其自身的DAG配置視圖,所述視圖可能未必在給定時間點與其他節(jié)點的視圖一致。在所描繪實施方案中,接受器節(jié)點可將其經(jīng)批準狀態(tài)轉(zhuǎn)變消息引導到DAG的配置的其當前視圖中所指示的鄰居節(jié)點,即使所述當前視圖從DAG的DCM的角度來看(或從一個或多個其他DAG節(jié)點的角度來看)碰巧是過時的或不正確的。在發(fā)送消息之后,可認為狀態(tài)轉(zhuǎn)變請求的處理在接受器節(jié)點處是完成的(元素619)。如果所請求轉(zhuǎn)變不滿足應用的接受準則(如還在元素604中所檢測),那么可拒絕所述轉(zhuǎn)變(元素616)。在一些實施中,可將指示所述拒絕的通知或響應提供到請求者。
圖7是示出根據(jù)至少一些實施方案的操作的多個方面的流程圖,所述操作可響應于接收到經(jīng)批準狀態(tài)轉(zhuǎn)變消息而執(zhí)行在復制DAG的中間節(jié)點處。在例如從接受器節(jié)點或從另一中間節(jié)點接收此類消息STM1(元素701)之后,在一些實施方案中,中間節(jié)點可確定具有較低序號的狀態(tài)轉(zhuǎn)變消息是否缺失(例如,如果STM1具有序號SN1,那么具有比SN1小的序號的一個或多個STM是否尚未被接收)。如果發(fā)現(xiàn)了此類缺失狀態(tài)轉(zhuǎn)變消息的證據(jù)(元素704),那么在所描繪實施方案中,中間節(jié)點可任選地將對所述缺失STM的重新傳輸請求遞交到沿著當前已知復制路徑的直接前趨節(jié)點(元素707)。在一些實施中,中間節(jié)點可在將對應于STM1的經(jīng)批準狀態(tài)轉(zhuǎn)變的記錄存儲在本地存儲器中之前等待接收對其重新傳輸請求的響應。可存儲用于STM1的批準記錄(例如)連同批準序號和與所述轉(zhuǎn)變相關(guān)聯(lián)的任何數(shù)據(jù)集(例如寫入有效負載)(元素710)。接著可將狀態(tài)轉(zhuǎn)變消息(其內(nèi)容可類似于所接收的消息,或其內(nèi)容與所接收的消息相同)發(fā)送到當前已知復制路徑上朝向提交者節(jié)點的每一鄰居節(jié)點(元素713)。在其中狀態(tài)轉(zhuǎn)變的批準歷史包含在狀態(tài)轉(zhuǎn)變消息內(nèi)的一些實施中,中間節(jié)點可將其(中間節(jié)點的)識別符添加到向外發(fā)出的狀態(tài)轉(zhuǎn)變消息中所指示的批準者的列表。
在一些實施方案中,代替在將用于STM1的批準記錄保存在本地存儲器中之前檢查缺失的序號,可采用不同的方法。例如,中間節(jié)點可在將批準記錄存儲在本地存儲器中之后和/或在將對應STM朝向提交者節(jié)點傳輸之后檢查缺失的序號。
在一個實施中,可結(jié)合用于在非接受器節(jié)點處接收STM的拉模型來使用保證在給定連接內(nèi)的消息的按序遞送的網(wǎng)絡(luò)連接協(xié)議(諸如TCP(傳輸控制協(xié)議))。在此類實施中,只要中間節(jié)點、提交者節(jié)點或備用節(jié)點維持與沿著復制路徑的其直接前趨的網(wǎng)絡(luò)連接,就可依賴于網(wǎng)絡(luò)連接協(xié)議以確保沒有消息丟失。在給定DAG節(jié)點N1處,如果與直接前趨節(jié)點P1的連接在此類實施中丟失,那么N1可負責建立與P1的新連接(或者如果已接收指示P1不再是DAG的部分的配置德爾塔消息,那么建立與不同的前趨節(jié)點的連接),且請求P1發(fā)送具有比先前最高的接收序號高的序號的任何STM。
圖8是示出根據(jù)至少一些實施方案的操作的多個方面的流程圖,所述操作可響應于接收到經(jīng)批準狀態(tài)轉(zhuǎn)變消息而執(zhí)行在復制DAG的提交者節(jié)點處。在例如從中間節(jié)點或從接受器節(jié)點接收經(jīng)批準狀態(tài)轉(zhuǎn)變消息后(元素801),提交者節(jié)點可確定所述狀態(tài)轉(zhuǎn)變是否滿足應用的提交準則。在一些實施方案中,提交者節(jié)點可能夠根據(jù)STM的內(nèi)容(諸如批準歷史字段)來確定至此已保存的應用狀態(tài)記錄的副本的數(shù)目,且如果副本的數(shù)目超過閾值,那么可認為所述轉(zhuǎn)變是可提交的。副本計數(shù)閾值可基于應用而不同;例如,接受器節(jié)點處的單個副本可對于一些應用是足夠的。在其他實施方案中,提交者節(jié)點還可必須在提交所述轉(zhuǎn)變之前考慮其他因素,諸如提交者節(jié)點是否已接收具有比當前STM的序號低的序號的全部STM。在一個實施方案中,例如,在提交當前轉(zhuǎn)變之前,提交者節(jié)點可必須等待直到其接收且處理所有此類先前STM。
如果滿足提交準則(其可在多個應用中不同)(如元素804中所檢測),那么提交者節(jié)點可將在其應用狀態(tài)記錄的集合內(nèi)的提交記錄存儲在本地存儲器中(元素807),例如連同序號和轉(zhuǎn)變的數(shù)據(jù)集(如果存在)。在一些實施中,提交準則可默認為已在接受器節(jié)點處驗證的接受準則,即,一旦在接受器節(jié)點處已批準狀態(tài)轉(zhuǎn)變,提交者節(jié)點即可提交在所接收的STM中指示的狀態(tài)轉(zhuǎn)變而無需驗證任何額外條件。在一些實施方案中,可將在STM中指示的批準序號的副本存儲為提交序號。因為一些經(jīng)批準轉(zhuǎn)變可能未獲得提交,所以在至少一個實施方案中,可使用與用于批準不同的一組序號來提交(例如,使得提交序號的順序不具有任何間隙)。如果備用節(jié)點被配置用于DAG,那么可從提交者節(jié)點將提交后STM引導到一個或多個此類備用節(jié)點。在至少一些實施方案中,在提交所述轉(zhuǎn)變之后,可將提交的通知提供到DAG的一個或多個其他節(jié)點(元素810),例如,以使得其他節(jié)點能夠更新其應用狀態(tài)信息和/或用于將響應傳輸?shù)綘顟B(tài)轉(zhuǎn)變的請求客戶端從而指示所述轉(zhuǎn)變已被提交。
在其中缺失STM并未被處置為與提交準則相關(guān)的處理的部分的一些實施方案中,提交者節(jié)點可采用與圖7中關(guān)于缺失STM所指示的類似動作。因此,例如,如果提交者節(jié)點確定一個或多個STM缺失(具有比所接收的STM的序號低的序號)(元素813),那么可將對缺失STM的重新傳輸請求發(fā)送到直接前趨節(jié)點(元素816)以完成所接收STM的處理(元素822)。如果未滿足提交準則,那么提交者節(jié)點可中止狀態(tài)轉(zhuǎn)變(元素819)。在一些實施方案中,可將中止通知發(fā)送到DAG的一個或多個其他節(jié)點,和/或發(fā)送到請求狀態(tài)轉(zhuǎn)變的客戶端。在一些實施中,如上文提及,如果已在接受器節(jié)點處批準狀態(tài)轉(zhuǎn)變,那么復制DAG可負責(最終)提交所述狀態(tài)轉(zhuǎn)變,即使復制路徑的一個或多個節(jié)點(包含接受器節(jié)點自身)失效。在一些此類實施中,中止狀態(tài)轉(zhuǎn)變可需要相對重量級的改變,諸如從其他DAG節(jié)點移除轉(zhuǎn)變的批準記錄(或從碰巧存儲批準記錄的節(jié)點的DAG的實際移除)。如下文關(guān)于圖11a至圖14進一步詳細描述,可在一些實施方案中使用搶先協(xié)調(diào)DAG暫停技術(shù)來避免以下情形:STM到達提交者節(jié)點,而未在所需數(shù)目的DAG節(jié)點處復制對應的狀態(tài)轉(zhuǎn)變信息。
圖9是示出根據(jù)至少一些實施方案的操作的多個方面的流程圖,所述操作可執(zhí)行在復制DAG的配置管理器(DCM)處。如元素901中所示,可通過配置管理器檢測可潛在地觸發(fā)DAG處的配置改變的事件。此類事件可包含接收諸如以下的消息:“檢測到節(jié)點故障”(例如,從DAG節(jié)點,或從提供商網(wǎng)絡(luò)的健康管理部件);或“可用于服務”(例如,從在故障之后已重新啟動的DAG節(jié)點)。在一些實施方案中,配置管理器自身可負責監(jiān)視各個DAG節(jié)點的健康狀態(tài),且觸發(fā)事件可為通過配置管理器進行的檢測,即,所述節(jié)點中的一者尚未以及時的方式對某一數(shù)目的心跳消息或其他健康檢查做出響應。在至少一些實施方案中,DAG節(jié)點可負責報告任何明顯的節(jié)點故障(例如,當連接意外丟失時,或當在大于閾值的時間段內(nèi)未從鄰居節(jié)點接收到消息時)到DCM。在一些實施方案中,DAG節(jié)點還可負責通知DCM可能導致DAG配置改變的即將發(fā)生的變化(例如,當節(jié)點計劃離線以用于維護時)。在所描繪實施方案中,DCM可例如基于可實施在DCM集群的多個節(jié)點當中的共識協(xié)議來確定所指示配置改變(例如,失效節(jié)點的移除,或新節(jié)點的加入)是否變得有效(元素904)。例如,在一些實施中,由一個DCM節(jié)點進行的DAG節(jié)點已失效的確定可在從所述配置移除節(jié)點之前必須在集群的一個或多個其他節(jié)點處確認(例如,通過在其他DCM節(jié)點處審閱從DAG節(jié)點接收的心跳響應)。在其他實施中,可在無需利用基于共識的協(xié)議的情況下執(zhí)行關(guān)于是否應用可能的配置改變的決策。在一些實施方案中,可確定或產(chǎn)生與DAG配置改變相關(guān)聯(lián)的序號或邏輯時間戳,例如,用于包含在發(fā)送到DAG的其他節(jié)點的配置德爾塔消息中,使得可在DAG節(jié)點處按正確的次序處理配置改變。
獨立于批準配置改變的方式,在一些實施方案中,在將所述改變視為完成之前,可必須在DCM的多個存儲位置處復制配置改變的表示(元素907)。在其中DCM充當DAG配置信息的權(quán)威來源的實施方案中,將關(guān)于配置改變的信息保存在多個位置可為DCM的功能性的重要方面。在至少一些實施中,可復制僅所述配置的改變(而不是,例如,整個配置)。在已保存配置改變信息之后,可識別將從DCM發(fā)送對應的配置德爾塔消息(指示所述配置的僅實施改變,未必DAG的整個配置)前往的一組DAG節(jié)點(元素910)。在一些實施方案中,可將所有DAG成員(潛在地包含作為配置德爾塔消息中指示的配置改變的部分從DAG移除的節(jié)點)選擇為用于配置德爾塔消息的目的地。在一個實施方案中,可選擇僅假定為當前DAG成員的節(jié)點,例如,如果節(jié)點被移除或已知已失效,那么可不將配置德爾塔消息發(fā)送到節(jié)點。在其他實施方案中,可將成員的一些子集選擇為目的地,且所述子集可負責將配置改變傳播到剩余節(jié)點。在成員的子集被選擇為目的地的實施方案中,DCM可必須在任何給定時間跟蹤哪些改變已被傳播到哪些成員。在已識別DAG節(jié)點的目的地集合之后,可將各自的配置德爾塔消息相對于彼此異步地發(fā)送到其,且無需請求在狀態(tài)轉(zhuǎn)變消息處理或狀態(tài)轉(zhuǎn)變請求處理中的任何暫停(元素913)。在至少一些實施方案中,配置德爾塔消息可包含與配置改變相關(guān)聯(lián)的配置序號。在一些實施中,復合配置德爾塔消息可指示兩個或兩個以上改變(例如,失效節(jié)點的移除和替換節(jié)點的加入)。
圖10是示出根據(jù)至少一些實施方案的操作的多個方面的流程圖,所述操作可響應于接收到來自配置管理器的配置德爾塔消息而執(zhí)行在復制DAG的成員節(jié)點處。在所描繪實施方案中,在從DCM接收包括配置改變序號的此類配置德爾塔消息后(元素1001),接收者DAG節(jié)點可例如通過比較新近接收的序號與先前接收的最高序號來確定其是否缺失任何先前配置德爾塔消息。如果接收者確定一個或多個配置德爾塔消息尚未被接收(元素1004),那么其可發(fā)送配置刷新請求到DCM(元素1007)。此類刷新請求可導致DCM重新發(fā)送缺失的一個或多個配置德爾塔消息,例如,或?qū)е掳l(fā)送其中指示DAG的整個當前配置的不同類型的消息。
如果未檢測到缺失配置德爾塔消息(也在對應于元素1004的操作中),那么接收者節(jié)點可將所接收的配置改變信息存儲在本地存儲器中的配置改變儲存庫中。儲存庫中的累積消息可用以更新接收者的DAG配置視圖(元素1010)。更新DAG配置的本地視圖可包含例如:確定待用于未來向外發(fā)出的和進入的狀態(tài)轉(zhuǎn)變消息的一個或多個復制路徑的一個或多個DAG節(jié)點和/或邊緣。如先前提及,由于消息遞送的異步性質(zhì)和由于網(wǎng)絡(luò)的不同部分可體驗不同的延遲,所以在一個DAG節(jié)點處獲得配置德爾塔消息的順序可與在另一節(jié)點處接收同一組配置德爾塔消息的順序不同。因此,在給定時間點在兩個不同節(jié)點處識別的復制路徑可彼此不同。在所描繪實施方案中,如果復制路徑上的直接前趨節(jié)點已改變或如果其直接后繼已改變,那么接收者節(jié)點可采用其他動作。在一些實施方案中,如果直接后繼者節(jié)點和直接前趨節(jié)點兩者都不改變,那么配置德爾塔消息的處理可在將配置改變信息存儲在接收者節(jié)點的本地存儲器處(元素1027)之后結(jié)束。
直接前趨節(jié)點相對于DAG的節(jié)點C改變的情形的示例是復制路徑從A到B到C改變?yōu)锳到C的部分。如果更新配置涉及接收者的直接前趨節(jié)點的改變,且尚沒有消息直接從新的直接前趨節(jié)點(如元素1013中所檢測)被接收,那么接收者節(jié)點(當前示例中的節(jié)點C)可建立與新的直接前趨(當前示例中的節(jié)點A)的連接。另外,在至少一些實施方案中,接收者節(jié)點(例如,節(jié)點C)還可發(fā)送請求到新的直接前趨(例如,節(jié)點A),用于重新傳輸具有比接收者節(jié)點處的最近接收的序號高的序號的STM(元素1017)。如果節(jié)點C具有后繼節(jié)點,那么其可繼續(xù)傳輸任何待決狀態(tài)轉(zhuǎn)變消息到此類后繼節(jié)點,而節(jié)點C等待從節(jié)點A接收請求的重新傳輸。
如果配置德爾塔消息指示接收者的直接后繼節(jié)點已改變,(例如,當模式A接收上文論述的同一示例配置德爾塔消息時,其指示節(jié)點B已離開DAG),且尚沒有消息從新的直接后繼節(jié)點接收(元素1021),那么接收者節(jié)點可建立與新的后繼節(jié)點的連接。在上述示例中,節(jié)點A可建立與節(jié)點C(其新的直接后繼)的連接。隨后可將狀態(tài)轉(zhuǎn)變消息轉(zhuǎn)移到新的直接后繼(元素1024)。
復制DAG節(jié)點的協(xié)調(diào)暫停
對于提供商網(wǎng)絡(luò)操作者,可能致使大量應用的幾乎同時停機的大規(guī)模故障事件存在顯著的挑戰(zhàn)性。其應用受持續(xù)停機影響的客戶可能對提供商網(wǎng)絡(luò)提供用于關(guān)鍵應用所需的服務水平的能力失去信心。盡管大規(guī)模故障事件的可能性可通過智能基礎(chǔ)結(jié)構(gòu)設(shè)計和通過實施可利用所述基礎(chǔ)結(jié)構(gòu)的高可用性特征的應用架構(gòu)而降低,但其不可能完全地消除大規(guī)模故障。在至少一些實施方案中,因此可開發(fā)可能允許分布式應用從影響多個資源的故障較快速且清晰地恢復的技術(shù)。在采用上文所描述類型的復制DAG用于分布式應用狀態(tài)管理的一些環(huán)境中,可使用協(xié)調(diào)暫停協(xié)議來支持從分布式故障的較有效且高效的恢復。在一個實施方案中,例如,響應于故障情形的檢測,可通過配置管理器指導DAG的某一數(shù)目的節(jié)點來停止執(zhí)行其正常應用狀態(tài)轉(zhuǎn)變處理操作(例如,接收狀態(tài)轉(zhuǎn)變請求消息,存儲應用狀態(tài)信息的本地副本,和沿著其復制路徑傳輸狀態(tài)轉(zhuǎn)變請求)。在至少一些實施方案中,在暫停其操作之后,節(jié)點可使其本地應用狀態(tài)記錄與其他DAG節(jié)點同步,執(zhí)行干凈關(guān)閉和重新啟動。在節(jié)點重新啟動之后,其可報告回配置管理器,其可用于服務的恢復,且等待通過配置管理器對DAG的重新激活。
圖11a-11h共同示出根據(jù)至少一些實施方案的操作的示例性順序,所述操作可在此類協(xié)調(diào)暫停程序期間在復制DAG處執(zhí)行。示出DAG中的每一節(jié)點可存儲各自的一組提交記錄,其中每一提交記錄包含(或指示,例如經(jīng)由指針)對應的提交序號(CSN)。從所述節(jié)點的角度來看,本地提交記錄集因此可表示使用DAG來管理的應用的狀態(tài)。經(jīng)批準(但尚未提交)的狀態(tài)轉(zhuǎn)變的記錄還可保持在一些或所有節(jié)點處,如先前描述。應注意,盡管本文在動態(tài)復制DAG的上下文中描述協(xié)調(diào)暫停技術(shù),其中DCM如上文描述來傳輸配置德爾塔消息以保持DAG節(jié)點關(guān)于DAG配置改變而更新,但在一些實施方案中可采用類似的方法用于其他狀態(tài)復制技術(shù)。例如,協(xié)調(diào)暫停技術(shù)還可用在其中使用停止一切重新配置時間間隔(在此期間以同步的方式來更新所有節(jié)點)來實施復制節(jié)點群組的配置改變的環(huán)境中,使得復制群組僅在所有節(jié)點已了解新配置之后變得可操作。因此,動態(tài)復制DAG可表示多節(jié)點狀態(tài)復制群組(SRG)的僅一個示例,在不同實施方案可在所述多節(jié)點狀態(tài)復制群組處實施協(xié)調(diào)暫停技術(shù)。至少一些此類SRG可具有類似于先前描述的DCM的其自身配置管理器,且可具于指定為提交者節(jié)點的一些節(jié)點和指定為非提交者節(jié)點的其他節(jié)點。
圖11a中展示包括五個節(jié)點1102A、1102B、1102C、1102D和1102E的復制DAG連同DCM 1180。在所描繪示例中,提交者節(jié)點1102E包括確定應起始協(xié)調(diào)暫停程序用于DAG的暫停觸發(fā)檢測器1106。在不同實施方案中,許多不同類型的原因可導致開始暫停程序。例如,暫停程序可由于以下原因而起始:(a)由于某一閾值數(shù)目的節(jié)點可能已失效(例如節(jié)點1102B和1102D處的故障,由“X”符號指示);(b)由于在提交者節(jié)點(或在某一其他節(jié)點)處接收配置德爾塔消息的速率超過閾值;(c)由于在某一DAG節(jié)點或DCM處丟失網(wǎng)絡(luò)包或連接的比率超過閾值,等等。在所描繪實施方案中,提交者節(jié)點1102E發(fā)送DAG暫停請求1150,其包括在提交者節(jié)點的提交記錄集中所表示的序號當中的最高序號。此最高序號可在本文被稱作最高提交序號(HCSN)1108,且可用作在暫停程序的步驟中的一者期間在DAG節(jié)點當中使提交記錄集同步的參考,如下文描述。在一些實施方案中,應起始暫停的初始確定可在非提交者節(jié)點中的一者處或在DCM 1180自身處進行,且可將特定提交序號(理想地但未必是HCSN)選擇為目標序號,應使節(jié)點更新其提交記錄集高達所述目標序號。
響應于接收到暫停請求,DCM 1180將HCSN保存在持久性存儲器1175中,如圖11b中展示。DCM接著可將各自的暫停命令1152發(fā)送到DAG節(jié)點的至少一子集,例如在所描繪示例性情形中分別將命令1152A和1152B發(fā)送到節(jié)點1102A和1102C。在一些實施方案中,DCM 1180可將暫停命令發(fā)送到所有DAG節(jié)點,所述DAG節(jié)點為根據(jù)保存在DCM處的最新DAG配置的DAG的成員(包含可能已失效的節(jié)點,例如1102B和1102D)。暫停命令可包含HCSN 1108。
在接收到暫停命令后,DAG節(jié)點可停止處理狀態(tài)轉(zhuǎn)變請求/消息,且可代替開始處理以驗證其提交記錄集包含多達HSCN且包含對應于HSCN的提交記錄的所有提交記錄。例如,可能是以下情況:節(jié)點1102A和節(jié)點1102C可能尚未被提交者節(jié)點1102E通知關(guān)于序號小于或等于HCSN的一個或多個提交狀態(tài)轉(zhuǎn)變。在此類情形中,如圖11c中展示,節(jié)點1102A可發(fā)送提交記錄同步請求1172B到提交者節(jié)點1102E(如箭頭標記“1a”所指示),且節(jié)點1102C可發(fā)送類似的提交記錄同步請求1172B到節(jié)點1102E(如箭頭標記“1b”所指示)。提交記錄同步請求1172可分別包含在發(fā)送請求的節(jié)點處缺失哪些提交記錄的指示,例如,節(jié)點1102A可指示其已經(jīng)具有序號高達SN1的提交記錄,而節(jié)點1102C可指示其缺失序號SN2、SN3和SN4的提交記錄。接著可通過提交者節(jié)點分別將缺失的提交記錄1174A和1174B發(fā)送到節(jié)點1102A和1102C,如箭頭標記“2a”和“2b”所指示。節(jié)點1102A和1102C接著可將各自的同步確認1176A和1176B發(fā)送到DCM 1180,如箭頭標記“3a”和“3b”所指示。DCM 1180可將節(jié)點1102A和1102C添加到在DCM的持久性存儲器1175處維持的最新節(jié)點列表1133(即,已更新其提交記錄集以匹配提交者節(jié)點1102E的提交記錄集的節(jié)點),如箭頭標記“4”所指示。
如圖11d中展示,在所描繪實施方案中,DAG的節(jié)點可終止執(zhí)行且自我重新啟動。例如,失效節(jié)點1102B和1102D可重新啟動作為從其故障恢復的部分。作為協(xié)調(diào)暫停程序的部分,節(jié)點1102A和1102C可在其提交記錄集已與提交者節(jié)點的同步之后將其提交記錄集(和/或與節(jié)點的操作相關(guān)的額外元數(shù)據(jù))保存在本地存儲器中,且接著起始受控的重新啟動。在所描繪實施方案中,節(jié)點1102E可在其已發(fā)送暫停請求1150之后等待某一時間間隔(允許提交者節(jié)點對至少一些同步請求1172作出響應),將任何狀態(tài)元數(shù)據(jù)保存到本地存儲器,且接著起始其自身的受控重新啟動作為暫停程序的部分。
在一些實施方案中,在DAG節(jié)點1102A-1102E恢復聯(lián)機之后,其可每個發(fā)送各自的“可用于服務”消息到DCM 1180,如圖11e中展示,且等待重新激活指令以恢復其應用狀態(tài)轉(zhuǎn)變處理操作。DCM可能夠辨別(使用其最新節(jié)點列表1133)節(jié)點1102B和1102D的提交記錄集可能不是最新的,且可因此發(fā)送各自的同步命令1194到節(jié)點1102B和1102D,如圖11f中展示。在至少一些實施中,同步命令可指示HCSN 1108。響應于同步命令1194,節(jié)點1102B和1102D可每個發(fā)送其自身的提交記錄同步請求1172C和1172D到已知為最新的節(jié)點,從而指示哪些提交記錄在其各自的提交記錄集中缺失。例如,節(jié)點1102B可將其同步請求1172C發(fā)送到節(jié)點1102A,而節(jié)點1102D可將其同步請求發(fā)送到節(jié)點1102E。在一些實施方案中,DCM可指定提交記錄同步請求應被發(fā)送到的目的地節(jié)點。在一個實施方案中,所有非提交者DAG節(jié)點可必須使其提交記錄集與提交者節(jié)點同步。節(jié)點1102B和1102D可分別接收其缺失的提交記錄1174C和1174D,使得最終所有節(jié)點已使其提交記錄集同步高達HCSN。在一些實施中,節(jié)點1102B和1102D可發(fā)送指示其提交記錄集已被更新/同步的確認到DCM 1180。在至少一個實施方案中,DCM可扮演相對于上文關(guān)于圖11f所描述的未在其最新節(jié)點列表中的那些節(jié)點而稍微較被動的角色。在此類實施方案中,當失效節(jié)點(例如1102B或1102D)恢復聯(lián)機時,其發(fā)送消息到DCM以確定新近聯(lián)機的節(jié)點是否缺失任何提交記錄。DCM可通知所述節(jié)點(例如,通過僅指示HCSN),具有高達HCSN的序號的提交記錄是所述節(jié)點變成最新而需要的。節(jié)點接著可負責使其自身最新,且一旦其已使提交記錄同步高達HCSN即向DCM回報。因此,在此類實施方案中,DCM可不必發(fā)送同步命令1194;而是,新近聯(lián)機的節(jié)點可采取主動以使其提交記錄集同步。
在確認至少閾值數(shù)目的節(jié)點已更新提交記錄集之后,DCM 1180可確定重新啟動后DAG的配置。在一些情況下,可重新使用在暫停之前在使用中的同一配置,而在其他實施方案中可選擇不同的配置。例如,可以是需要DAG具有最少四個節(jié)點的情況,因此最初可選擇節(jié)點1102A-1102E中的僅四個。如圖11g中展示,DCM 1180可發(fā)送各自的重新激活消息到選定的節(jié)點組(在所描繪示例中所有五個節(jié)點),從而指示DAG的當前配置。DAG節(jié)點接著可恢復正常操作,如圖11h所指示。在一些實施方案中,未失效的至少一些DAG節(jié)點(例如,1102A、1102C和1102E)可不必自我重新啟動。而是,在此類實施方案中,在使其提交記錄集同步之后,此類節(jié)點中的一者或多者可僅使進一步狀態(tài)轉(zhuǎn)變處理延期,直到其接收到來自DCM的重新激活命令為止。
圖12是示出根據(jù)至少一些實施方案的操作的多個方面的流程圖,所述操作可在協(xié)調(diào)暫停程序期間執(zhí)行在諸如復制DAG的SRG的提交者節(jié)點處。如元素1201中展示,提交者節(jié)點可確定用于SRG的協(xié)調(diào)暫停的觸發(fā)準則已滿足。多種不同的觸發(fā)條件可導致協(xié)調(diào)暫停,包含例如,通過提交者節(jié)點檢測到保持響應的SRG節(jié)點的數(shù)目已降到閾值以下,或發(fā)生SRG的配置改變的比率超過閾值。在一些情況下,資源工作負載水平或誤差率可觸發(fā)暫停,例如,如果丟失網(wǎng)絡(luò)包的比率超過閾值,或如果意外終止連接的比率處于或高于最大可接受率。在一個實施方案中,SRG的非提交者節(jié)點或諸如DCM的配置管理器可最初檢測到將要導致受控暫停的問題,且可將所述問題通知提交者節(jié)點。
在所描繪實施方案中,在確定將要起始受控暫停之后,提交者節(jié)點可暫?;蛲V蛊錉顟B(tài)轉(zhuǎn)變消息的正常處理/復制,且將任何顯著的至今仍尚未保存的提交記錄保存到本地存儲器(元素1204)。提交者節(jié)點接著可將包含HCSN的指示的暫停請求(已被提交者節(jié)點存儲的提交記錄的轉(zhuǎn)變的序號當中的最高提交序號)傳輸?shù)絊RG的配置管理器(例如,在復制DAG情況中的DCM)(元素1207)。HCSN可充當目標提交序號,SRG的當前活動節(jié)點將使其提交記錄集同步高達所述目標提交序號。
在至少一些實施方案中,在其發(fā)送暫停請求之后,提交者節(jié)點可接收來自其他SRG節(jié)點的某一數(shù)目的提交記錄同步請求(例如,已確定其不具有序號高達HCSN的全組提交記錄的節(jié)點)(元素1210)。在所描繪實施方案中,提交者節(jié)點對在可配置時間窗期間接收的任何此類同步請求作出響應。提交者節(jié)點接著可任選地執(zhí)行干凈關(guān)閉和重新啟動,且將可用于服務消息發(fā)送到SRG的配置管理器(元素1213)。在一些實施方案中,可省略干凈關(guān)閉和重新啟動,且提交者節(jié)點可僅發(fā)送可用于服務消息,或提交者節(jié)點可僅延期進一步狀態(tài)轉(zhuǎn)變相關(guān)處理直到從配置管理器接收到重新激活指令為止。最終,提交者節(jié)點可接收來自配置管理器的重新激活消息,指示DAG的當前暫停后配置,且提交者節(jié)點接著可按照所指示的配置來恢復狀態(tài)轉(zhuǎn)變相關(guān)的處理(元素1216)。在一些實施方案中,可以是以下情況:在新的暫停后配置中,提交者節(jié)點不再被授予提交者的角色;而是,其可例如被配置成接受器節(jié)點、中間節(jié)點或備用節(jié)點。
圖13是示出根據(jù)至少一些實施方案的操作的多個方面的流程圖,所述操作可在協(xié)調(diào)暫停程序期間執(zhí)行在諸如復制DAG的狀態(tài)復制群組的非提交者節(jié)點處。在正常操作期間,非提交者節(jié)點可在對應轉(zhuǎn)變已被提交之后的某點將提交記錄存儲在本地存儲器中;結(jié)果,非提交者節(jié)點的本地提交記錄集可不必與提交者節(jié)點的提交記錄集一樣最新。如元素1301中展示,非提交者節(jié)點可接收來自配置管理器的暫停命令,指示HCSN作為非提交者節(jié)點將要使其本地提交記錄集同步到的目標序號。
在接收到暫停命令后,非提交者節(jié)點可暫?;蛲V固幚硇碌臓顟B(tài)轉(zhuǎn)變消息。如果具有比HCSN低的序號的一些提交記錄在本地提交記錄集中缺失,那么非提交者節(jié)點可將用于缺失記錄的提交記錄同步請求發(fā)送到提交者節(jié)點(或發(fā)送到配置管理器所指示作為缺失提交記錄的來源的不同節(jié)點)(元素1304)。如果其提交記錄集已經(jīng)關(guān)于HCSN最新,那么所述非提交者節(jié)點可不需要在暫停程序的此階段與其他節(jié)點通信。在所描繪實施方案中,在驗證具有高達HCSN的序號的提交記錄存儲在本地存儲器中之后,非提交者節(jié)點可將同步確認消息發(fā)送到配置管理器(元素1307)。非提交者節(jié)點接著可延期進一步應用狀態(tài)轉(zhuǎn)變處理,直到其被配置管理器重新激活為止。任選地,非提交者節(jié)點可執(zhí)行干凈關(guān)閉和重新啟動,且在重新啟動之后將“可用于服務”消息發(fā)送到配置管理器(元素1310)。響應于來自配置管理器的重新激活消息,非提交者節(jié)點可更新其SRG配置視圖且恢復應用狀態(tài)轉(zhuǎn)變處理(元素1313)。在暫停后配置中,在一些情況下可通過配置管理器將不同的角色授予非提交者節(jié)點,例如非提交者節(jié)點的角色可改變?yōu)樘峤徽吖?jié)點。
圖14是示出根據(jù)至少一些實施方案的操作的多個方面的流程圖,所述操作可在協(xié)調(diào)暫停程序期間執(zhí)行在諸如復制DAG的狀態(tài)復制群組的配置管理器處。如元素1401中展示,配置管理器可接收來自SRG的提交者節(jié)點的暫停請求,指示來自其提交記錄存儲在提交者節(jié)點處的轉(zhuǎn)變的序號當中的最高提交序號(HCSN)。在一些實施方案中,可在最終進行暫停SRG操作的決策之前,在配置管理器的各個節(jié)點當中采用共識協(xié)議,之后。配置管理器可將HCSN存儲在持久性存儲器中(元素1404)(例如,在配置管理器集群的若干節(jié)點處的各自存儲裝置處),且將指示HCSN的暫停命令發(fā)送到SRG的一個或多個其他節(jié)點(元素1407)。在一些實施方案中,可將暫停命令發(fā)送到SRG的所有已知成員,包含假定已失效的節(jié)點。SRG的接收者節(jié)點可每個驗證其本地提交記錄集含有對應于HCSN的提交記錄(其在一些情況下可需要接收者節(jié)點獲得如上所述的來自提交者節(jié)點的缺失提交記錄)。在驗證其提交記錄集關(guān)于HCSN最新之后,暫停命令的接收者可向配置管理器發(fā)送指示其提交記錄集現(xiàn)在最新的同步確認。因此,在接收到來自SRG節(jié)點的此類確認后,配置管理器可將所述節(jié)點添加到最新節(jié)點列表(元素1410)。
在一些實施方案中,配置管理器可等待接收來自SRG節(jié)點的指示其可用于服務的各自消息。在接收到來自節(jié)點的此類消息后(例如,在節(jié)點已完成干凈關(guān)閉和重新啟動之后,或在節(jié)點已在故障后恢復聯(lián)機之后),配置管理器可確定所述節(jié)點是否在最新節(jié)點列表中。如果從其接收“可用于服務”指示的節(jié)點并未已知為關(guān)于提交記錄最新,那么配置管理器可例如在顯式同步命令中或響應于來自節(jié)點的隱式或顯式查詢而發(fā)送指示HCSN到節(jié)點(元素1413)。通過使用HCSN作為提交記錄被更新高達的目標序號,節(jié)點接著可通過與已經(jīng)最新的其他節(jié)點通信而更新其本地提交記錄集。在一些實施方案中,配置管理器可在同步命令中包含過時節(jié)點將要從其獲得缺失的提交記錄的來源的指示。
在配置管理器已確認所需最少數(shù)目的SRG節(jié)點(a)可用于服務和(b)關(guān)于應用提交狀態(tài)最新之后,配置管理器可使SRG的初始暫停后配置結(jié)束(元素1416)。配置管理器接著可將指示所述配置的重新激活消息發(fā)送到初始配置中的適當?shù)墓?jié)點組(元素1419)。在一些實施方案中,可將初始配置信息提供到節(jié)點作為一序列配置德爾塔消息。
在至少一些實施方案中,選定用于同步的目標序號(即,SRG的多個節(jié)點中的每一者將要更新其本地提交記錄集高達的所述序號)未必需要為最高提交序號。例如,可能是以下情況:提交者節(jié)點處的最高提交序號是SN1,且歸因于由于快速上升的大規(guī)模故障事件的檢測而引起的暫停SRG的操作的緊急需要,SRG配置管理器可愿意允許節(jié)點在使其提交記錄更新為較小序號(SN1-k)后暫停其操作。在一些實施中,SRG的節(jié)點可在暫停/重新啟動之前使其提交記錄同步到某一較低序號,且可在暫停之后同步到最高提交序號,例如在節(jié)點重新啟動之后,且將“可用于服務”消息發(fā)送到配置管理器。如先前指出,在一些實施方案中,暫停程序可通過非提交者節(jié)點或通過配置管理器自身起始。
用于多數(shù)據(jù)存儲事務的基于日志的樂觀并發(fā)控制
在一些實施方案中,可使用上文所描述類型的復制DAG來實施樂觀并發(fā)控制技術(shù),所述技術(shù)使用使得能夠支持涉及多個獨立數(shù)據(jù)存儲區(qū)的事務的日志記錄服務。圖15示出根據(jù)至少一些實施方案的示例性系統(tǒng)環(huán)境,所述環(huán)境包括支持可包含對多個數(shù)據(jù)存儲區(qū)的寫入的事務的持久性改變?nèi)罩?。系統(tǒng)1500展示可使用日志記錄服務實例化的持久性改變?nèi)罩?510。在所描繪實施方案中,可在日志記錄服務處注冊一個或多個數(shù)據(jù)存儲區(qū)1530用于事務管理,諸如數(shù)據(jù)存儲區(qū)1530A(例如NoSQL或非關(guān)系數(shù)據(jù)庫)和數(shù)據(jù)存儲區(qū)1530B(例如,關(guān)系數(shù)據(jù)庫)。術(shù)語“并發(fā)控制”、“事務管理”和“更新管理”可在本文關(guān)于日志記錄服務所提供的功能性而用作同義詞。
在一些實施方案中,客戶端1532可遞交指示數(shù)據(jù)源集的注冊請求,為此其希望使用用于特定應用的基于日志的事務管理,例如經(jīng)由日志記錄服務管理器1501所呈現(xiàn)的管理或控制平面編程接口。在一些實施方案中,持久性改變?nèi)罩?510可響應于此類注冊請求而實例化。大體來說,可創(chuàng)建給定持久性改變?nèi)罩緦嵗糜诠芾碛糜谝粋€或多個基礎(chǔ)數(shù)據(jù)存儲區(qū)的事務,即,在至少一些部署中,可使用基于日志的事務管理用于單個數(shù)據(jù)存儲區(qū)而不是同時用于多個數(shù)據(jù)存儲區(qū)。如本文所使用,術(shù)語“數(shù)據(jù)存儲區(qū)”可指廣泛多種持久性或臨時性數(shù)據(jù)儲存庫和/或數(shù)據(jù)消費者中的任一者的實例。例如,一些數(shù)據(jù)存儲區(qū)可包括可能未必提供用于多項目事務的原生支持的持久性非關(guān)系數(shù)據(jù)庫,而其他數(shù)據(jù)存儲區(qū)可包括可能原生支持多項目事務的持久性關(guān)系數(shù)據(jù)庫。在一些實施方案中,使得其用戶能夠存儲任意大小的非結(jié)構(gòu)化數(shù)據(jù)對象、可通過網(wǎng)絡(luò)服務接口訪問的提供商網(wǎng)絡(luò)的網(wǎng)絡(luò)可訪問的存儲服務可被注冊為數(shù)據(jù)存儲區(qū)中的一者。其他類型的數(shù)據(jù)存儲區(qū)可包括存儲器內(nèi)數(shù)據(jù)庫、分布式高速緩沖存儲器的實例、網(wǎng)絡(luò)可訪問的塊存儲服務、文件系統(tǒng)服務或物化視圖。消耗日志記錄服務所記錄的提交寫入例如以產(chǎn)生新數(shù)據(jù)假影的實體可表示另一類型的數(shù)據(jù)存儲區(qū),且可在本文一般稱為“數(shù)據(jù)消費者”。此類數(shù)據(jù)存儲區(qū)可例如包含預計算查詢結(jié)果管理器(PQRM)(如在數(shù)據(jù)存儲區(qū)1530C的情況下),其負責根據(jù)通過日志記錄服務管理的指定數(shù)據(jù)集而產(chǎn)生指定查詢的結(jié)果(其中指定數(shù)據(jù)集可包含存儲在一個或多個不同其他數(shù)據(jù)存儲區(qū)處的對象)。在一些實施方案中,被配置成產(chǎn)生通過日志記錄服務管理的一些或所有提交數(shù)據(jù)的時間點快照的快照管理器可表示另一類別的數(shù)據(jù)存儲區(qū)。在不同實施方案中,可存儲此類日志快照用于多種目的,諸如用于備份或用于離線工作負載分析。本文可使用術(shù)語“數(shù)據(jù)消費者”來指諸如PQRM和快照管理器的數(shù)據(jù)存儲區(qū)。至少一些數(shù)據(jù)存儲區(qū)可具有不同于其他者的讀取接口1531,例如在所描繪實施方案中,數(shù)據(jù)存儲區(qū)1530A的數(shù)據(jù)存儲區(qū)(DS)讀取接口1531A可包括不同于DS讀取接口1531B或預計算查詢接口1531C的API集、基于網(wǎng)絡(luò)的接口、命令行工具或定制GUI(圖形用戶接口)。
在所描繪實施方案中,日志記錄服務客戶端1532可本地構(gòu)建事務請求,且接著遞交(或“提供”)事務請求用于由持久性改變?nèi)罩?510批準和提交。在一個實施中,例如,日志記錄服務的客戶端庫可使得客戶端能夠通過發(fā)布“事務開始”請求的邏輯等效物來起始候選事務。在候選事務內(nèi),客戶端可在數(shù)據(jù)存儲區(qū)1530處對選定對象集執(zhí)行某一數(shù)目的讀取,本地(例如,在本地存儲器中)執(zhí)行指向在一個或多個數(shù)據(jù)存儲區(qū)處的提議寫入集??蛻舳私又赏ㄟ^發(fā)布“事務結(jié)束”請求的等效物來遞交候選事務。在所描繪實施方案中,可通過日志的寫入接口1512在與持久性改變?nèi)罩?510相關(guān)聯(lián)的沖突檢測器1505處接收候選事務請求1516。大體來說,在至少一些實施方案中,給定事務請求1516可包含分別來自一個或多個數(shù)據(jù)存儲區(qū)的一個或多個讀取,和分別針對一個或多個數(shù)據(jù)存儲區(qū)的一個或多個提議寫入,其中被讀取的數(shù)據(jù)存儲區(qū)組可或不可與被寫入的數(shù)據(jù)存儲區(qū)組重疊。在一些實施方案中,可使用原生DS讀取接口1531來執(zhí)行讀取(盡管如下文描述,在一些情形下客戶端還可通過持久性改變?nèi)罩?510來執(zhí)行只讀操作)。
在一些實施方案中,在給定事務請求中指示的至少一些寫入可取決于所述讀取中的一者或多者的結(jié)果。例如,請求事務可涉及從數(shù)據(jù)存儲區(qū)DS1處的位置L1讀取一個值V1,從數(shù)據(jù)存儲區(qū)DS2處的第二位置L2讀取第二值V2,計算函數(shù)F(V1,V2)且將所述函數(shù)的結(jié)果存儲在某一數(shù)據(jù)存儲區(qū)DS3處的位置L3處。在一些基于鎖定的并發(fā)控制機制中,可必須在L1和L2處獲得排它鎖定以確保值V1和V2在L3更新之前不改變。在圖15中示出的日志記錄服務的樂觀并發(fā)控制機制中,可能并不必須獲得鎖定。而是,在所描繪實施方案中,沖突檢測器1505可至少部分基于事務描述符1516的內(nèi)容和持久性改變?nèi)罩?510的提交事務日志記錄集1527來確定:在請求事務中讀取的數(shù)據(jù)項目集從其各自的數(shù)據(jù)存儲區(qū)被讀取以來是否已更新。在至少一些實施方案中,可使用基于序號的技術(shù)來確定此類讀取寫入沖突是否存在,如下文進一步詳細描述。如果沖突檢測器1505確定在事務期間讀取的數(shù)據(jù)一點也沒被覆寫,那么可接受請求事務用于提交,且可提交此類接受用于提交事務1514用于在持久性改變?nèi)罩咎帍椭茖娜罩居涗洝Pg(shù)語“批準”和“接受”可在本文關(guān)于未拒絕的請求事務而用作同義詞。在所描繪實施方案中,如果一些讀取數(shù)據(jù)從發(fā)生對應的讀取以來已更新(或如果由沖突檢測器估計所述數(shù)據(jù)被更新的可能性大于閾值),那么可代替拒絕或中止所述請求事務1516。此類型的并發(fā)控制方法可認為是樂觀的,因為最初可在讀取寫入沖突不可能的樂觀假設(shè)下進行關(guān)于是否繼續(xù)進行事務的寫入集的決策。結(jié)果,在其中讀取寫入沖突實際上很少的情形中,可比使用較傳統(tǒng)的基于鎖定的技術(shù)更有可能的情況實現(xiàn)較高通量和較低響應時間。
在所描繪實施方案中,在接受事務用于提交的情況下,在認為所述提交是成功的之前,可在與持久性改變?nèi)罩?510相關(guān)聯(lián)的復制DAG的某一數(shù)目的節(jié)點處復制提交事務日志記錄的內(nèi)容(如下文關(guān)于圖16進一步詳細描述)。在所描繪實施方案中,如果未創(chuàng)建必要數(shù)目的副本,那么可拒絕或中止所述事務。提交所需的副本的數(shù)目可對于不同的應用或客戶端而不同。提交事務日志記錄還可在本文稱作“提交記錄”。在一些實施方案中,當提交請求事務時,可通知請求客戶端1532。在至少一個實施方案中,客戶端1532可被通知事務何時被拒絕,使得,例如,可產(chǎn)生和遞交新的事務請求用于所需更新。
對于提交的每一事務,在至少一些實施方案中,可在持久性改變?nèi)罩?532處產(chǎn)生和存儲(例如,作為提交事務日志記錄的副本中的每一者的部分)提交序號(或指示應用的提交狀態(tài)的某一其他識別符)。此類提交序號可例如被實施為計數(shù)器或?qū)嵤檫壿嫊r間戳,如上文關(guān)于在用于狀態(tài)轉(zhuǎn)變的復制DAG處使用的序號所論述。所述提交序號可例如在一些實施方案中由沖突檢測器確定,或在其他實施方案中在持久性改變?nèi)罩镜牟煌考幋_定(諸如被使用的復制DAG的提交者節(jié)點)。在所描繪實施方案中,在提交給定事務且在持久性改變?nèi)罩咎幋鎯ζ涮峤挥涗浿?,可將事務的寫入應用或傳播到其針對的?shù)據(jù)存儲區(qū)1530中的一者或多者(或,如在PQRM 1530C的情況下,其中寫入數(shù)據(jù)將要被消耗)。在一些實施中,可按異步方式將寫入推進到目標數(shù)據(jù)存儲區(qū)1530。因此,在此類實施中,在提交事務的時間(即,當所需數(shù)目的提交記錄副本已被成功存儲時)與提交事務的特定寫入操作的有效負載到達對應數(shù)據(jù)存儲區(qū)的時間之間可存在某一延遲。在圖15中展示的實施方案中,可使用各自的異步寫入應用器1517來將寫入中的一些或全部傳播到相關(guān)數(shù)據(jù)存儲區(qū)。例如,寫入應用器1517A被配置成應用與數(shù)據(jù)存儲區(qū)1530A相關(guān)的寫入1515A,寫入應用器1517B推進與數(shù)據(jù)存儲區(qū)1530B相關(guān)的寫入,且寫入應用器1517C推進將在數(shù)據(jù)存儲區(qū)1530C處被消耗的寫入。在一些實施中,寫入應用器可包括持久性改變?nèi)罩?510的子部件(例如,線程或處理程序),而在其他實施中,寫入應用器1517可經(jīng)實施為在持久性改變?nèi)罩就獠康膶嶓w。在一些實施方案中,給定寫入應用器1517可負責將寫入傳播到一個以上數(shù)據(jù)存儲區(qū)1530,或單個數(shù)據(jù)存儲區(qū)1530可接收來自多個寫入應用器1517的寫入。在至少一個實施中,可使用拉取技術(shù)來將寫入數(shù)據(jù)傳播到數(shù)據(jù)存儲區(qū),例如,一個或多個數(shù)據(jù)存儲區(qū)1530可將寫入請求遞交到持久性改變?nèi)罩?510或?qū)懭霊闷?,而非在寫入應用器主動下被提供寫入?shù)據(jù)。在將事務期間寫入的數(shù)據(jù)應用到對應數(shù)據(jù)存儲區(qū)之后,客戶端1532可能夠使用數(shù)據(jù)存儲區(qū)的各自讀取接口來讀取更新數(shù)據(jù)。在一些實施方案中,寫入應用器中的至少一者可能夠執(zhí)行同步寫入(例如,當由日志記錄服務明顯指示進行時,或用于應用器所負責的所有寫入)。例如,在通知客戶端已提交所述事務之前,客戶端可能希望確保給定事務的至少一個寫入(諸如針對在事務中涉及的多個數(shù)據(jù)存儲區(qū)當中的“主控”數(shù)據(jù)存儲區(qū)的寫入)已被應用。在一些實施方案中,可在事務請求1516中指示將被同步執(zhí)行的特定寫入。
在一些實施方案中,如下文進一步詳細描述,給定事務請求1516可包含:事務的讀取集的各自指示符(即,識別在事務期間讀取的數(shù)據(jù)對象集的信息);事務的寫入集(即,識別在事務被提交的情況下將被更新/寫入的數(shù)據(jù)對象集的信息);寫入有效負載(即,將被存儲用于每一寫入的數(shù)據(jù)字節(jié)集);和/或沖突檢查定界符(應被檢查以接受/拒絕所述事務的提交事務日志記錄的子集的指示)。事務請求的這些組成要素中的一些或全部可連同事務的提交序號一起存儲在對應的提交記錄內(nèi)。在至少一個實施方案中,持久性改變?nèi)罩?510可例如響應于來自數(shù)據(jù)存儲區(qū)的查詢或來自日志記錄服務客戶端的查詢而提供應用的最新提交狀態(tài)的識別符1590(諸如,至此產(chǎn)生的最高提交序號)。在所描繪實施方案中,寫入應用器可指示對應于其在數(shù)據(jù)存儲區(qū)處應用的寫入的提交序號。因此,在任何給定時間點,客戶端1532可能夠(例如,通過查詢數(shù)據(jù)存儲區(qū))確定對應于在給定數(shù)據(jù)存儲區(qū)1530處的最近應用寫入的提交序號。
在至少一些實施方案中,在事務請求的產(chǎn)生期間(例如,通過日志記錄服務的客戶端庫),可從在事務期間進行訪問的數(shù)據(jù)存儲區(qū)獲得最近應用的提交時間戳,且可在事務請求中指示此類提交序號中的一者或多者作為沖突檢查定界符。例如,考慮在特定客戶端起始包含在數(shù)據(jù)存儲區(qū)DS1處的位置L1的讀取的事務之時的情形,對應于DS1處的最近應用寫入的提交序號為SN1。在此示例中進一步假定,事務的讀取集僅包括DS1的數(shù)據(jù)。在此類情形中,SN1可包含在事務請求1516中。沖突檢測器可識別序號大于SN1的提交記錄作為待被檢查有用于請求事務的讀取寫入沖突的提交記錄集。如果所識別提交記錄的寫入集中的任一者與請求事務的讀取集重疊,那么可拒絕/中止所述事務;否則,在此示例性情形中可批準所述事務用于提交。
在所描繪實施方案中,日志記錄服務可暴露一個或多個編程日志讀取接口1513(例如,API、網(wǎng)頁、命令行實用程序、GUI及其類似者),以使得客戶端1532能夠直接讀取日志記錄。在其他實施方案中,可能未實施允許直接訪問改變?nèi)罩?510的此類讀取API。直接訪問指示已提交的特定事務的日志記錄以及確定所述事務提交的次序的能力可使得在一些實施方案中執(zhí)行新類型分析而非直接僅訪問數(shù)據(jù)存儲區(qū)更有可能的情況(由于至少一些數(shù)據(jù)存儲區(qū)可通常僅允許讀取器看見數(shù)據(jù)對象的最新應用版本而不是數(shù)據(jù)對象的歷史)。
圖15中示出的樂觀并發(fā)控制機制可允許支持比在至少一些情形中使用基礎(chǔ)數(shù)據(jù)存儲區(qū)的并發(fā)控制機制而可能的更復雜類型的原子操作。例如,一些高性能非關(guān)系數(shù)據(jù)存儲區(qū)可僅允許單項目事務(即,一次可允許一個寫入,但如果在單個批量更新中遞交多個寫入,那么可能未提供原子性/一致性保證用于一起進行的多個寫入)。通過上文所描述的基于日志的方法,可相對輕松地支持包含對非關(guān)系數(shù)據(jù)存儲區(qū)(和/或其他數(shù)據(jù)存儲區(qū)一樣)的多個位置的寫入的單個事務。持久性改變?nèi)罩?510連同相關(guān)聯(lián)的沖突檢測器1505可在本文稱作基于日志的事務管理器。在一些實施方案中,寫入應用器1517還可被視為事務管理器的子部件。
如上文提及,在一些實施方案中,可使用先前描述的復制DAG來實施持久性改變?nèi)罩?510。圖16示出根據(jù)至少一些實施方案的使用復制DAG 1640的持久性改變?nèi)罩镜氖纠詫嵤?。在所描繪實施方案中,DAG所管理的應用狀態(tài)轉(zhuǎn)變對應于日志客戶端1660請求的事務,作為包含針對一組一個或多個數(shù)據(jù)存儲區(qū)的讀取和寫入的應用的部分??蓪玫臓顟B(tài)建模為存儲在本地存儲器中在接受器節(jié)點1610、中間節(jié)點1612、提交者節(jié)點1614和備用節(jié)點1616處的各自的事務記錄集1672,其中當前復制路徑包括節(jié)點1610、1612和1614。在一些實施中,可存儲用于批準(即,指示所述請求事務已被批準用于提交)和提交的單獨事務記錄,而在其他實施方案中,單個事務記錄可與指示所述事務是否已被提交的字段一起存儲。在所描繪實施方案中,序號或邏輯時間戳可被存儲為事務記錄中的至少一些的部分或由其指示。
在所描繪實施方案中,可通過實施在接受器節(jié)點1610處的沖突檢測器來進行關(guān)于請求事務1650是否被批準用于提交的決策,但在其他實施方案中,沖突檢測器可實施在復制DAG的外部。容錯日志配置管理器164可將配置德爾塔消息異步發(fā)送到DAG節(jié)點1610、1612、1614和1616,其中每一此類消息指示DAG配置的改變而不是DAG的整個配置,且不需要DAG節(jié)點暫停處理客戶端1660所提交的引入的事務請求的流。每一DAG節(jié)點可獨立地處理或聚集所接收的配置德爾塔消息以得出當前DAG配置的其各自視圖1674(例如,節(jié)點1610處的視圖1674A、節(jié)點1612處的視圖1674B、節(jié)點1614處的視圖1674C和節(jié)點1616處的視圖1674D)。至少一些視圖1674可在給定時間點與其他節(jié)點處的那些視圖不同;因此,在正常操作條件下,不同的DAG節(jié)點可不需要使其DAG配置視圖彼此同步。指示被批準(但尚未提交)事務的消息1652A和1652B可分別從接受器節(jié)點1610和中間節(jié)點1612沿著復制路徑傳輸。在所描繪實施方案中,提交者節(jié)點1614可將指示提交的消息1653傳輸?shù)浇邮芷鞴?jié)點和中間節(jié)點以及到備用節(jié)點1616。圖16的實施方案中展示為在復制DAG外部的實體的異步寫入應用器1692可將來自各個提交事務記錄的寫入傳播到適當?shù)臄?shù)據(jù)存儲區(qū)或數(shù)據(jù)消費者。在其他實施方案中,寫入應用器可實施在復制DAG內(nèi),例如,作為在DAG節(jié)點內(nèi)運行的各自處理程序。在一些實施中,僅DAG節(jié)點的子集可由應用器1692讀取,以便將提交寫入傳播到其目的地數(shù)據(jù)源或數(shù)據(jù)消費者。在其他實施方案中,如圖16中展示,應用器可讀取來自DAG節(jié)點中的任一者的提交事務記錄以推進如先前描述的寫入有效負載的內(nèi)容。
事務請求元素
圖17示出根據(jù)至少一些實施方案的可由日志記錄服務的客戶端1732遞交的事務請求描述符1744的示例性分量元素。如所展示,在所描繪實施方案中,事務描述符1744可包含沖突檢查定界符1702、讀取集描述符1704、寫入集描述符1706、寫入有效負載1708、和任選邏輯約束描述符1710。在所展示的示例中,日志記錄服務客戶端1732包括可被用來集合事務請求描述符的客戶端庫1756。在至少一些實施方案中,客戶端庫可自動地分別記錄在事務期間從其讀取數(shù)據(jù)的數(shù)據(jù)存儲區(qū)1730A、1730B和1730C內(nèi)的讀取位置1761A、1761B和1761C,和/或?qū)?shù)據(jù)寫入到的(在所描繪示例中為數(shù)據(jù)存儲區(qū)1730C的)寫入位置1771。在一些實施中,客戶端庫1756還可從數(shù)據(jù)源1730中的每一者獲得其寫入最近已被應用到數(shù)據(jù)存儲區(qū)的最近事務的對應提交序號(CSN)。在一個實施方案中,將事務的讀取中的任一者發(fā)布到對應數(shù)據(jù)存儲區(qū)之前,可檢索此類CSN,例如。在另一實施方案中,可剛好在發(fā)布針對當前事務內(nèi)的數(shù)據(jù)存儲區(qū)的第一讀取之前從給定數(shù)據(jù)存儲區(qū)1730檢索CSN。
在所描繪實施方案中,可從將最近應用CSN提供作為輸入的函數(shù)導出沖突檢查定界符1702。例如,在一個實施中,可使用從在事務期間讀取的所有數(shù)據(jù)存儲區(qū)獲得的CSN當中的最小序號。在另一實施中,可包含包括來自數(shù)據(jù)存儲區(qū)中的每一者的CSN的向量或陣列作為事務請求描述符的沖突檢查定界符1702。沖突檢查定界符1702在本文還可稱作提交狀態(tài)識別符(CSI),因為其表示請求事務所取決于的一個或多個數(shù)據(jù)存儲區(qū)的提交狀態(tài)。在一些實施方案中,可將選定散列函數(shù)應用到讀取位置1761A、1761B或1761C中的每一者以獲得將被包含在讀取描述符1704中的散列值集。類似地,可將選定散列函數(shù)(取決于實施,與用于讀取描述符相同的函數(shù)或是不同函數(shù))應用到事務的寫入的位置以產(chǎn)生寫入集描述符1706。在其他實施方案中,可不使用散列法;而是,例如,非散列位置識別符可用于讀取集和寫入集條目中的每一者。寫入有效負載1708可包含針對包含在事務中的寫入中的每一者將被寫入的數(shù)據(jù)的表示。任選邏輯約束1710可包含用于重復檢測/消除和/或用于在其他事務之前或之后順序指定事務的簽名,如下文進一步詳細描述。在一些實施方案中,可存儲事務請求描述符1744的內(nèi)容的一些或全部作為在持久性改變?nèi)罩?510處復制的事務狀態(tài)記錄的部分(例如,批準事務記錄和/或提交事務記錄)。
應注意,從其產(chǎn)生讀取描述符和寫入描述符的讀取位置和寫入位置可表示不同的存儲粒度,或甚至在不同實施方案中的不同類型的邏輯實體,或用于不同的數(shù)據(jù)存儲區(qū)。例如,對于包括非關(guān)系數(shù)據(jù)庫的數(shù)據(jù)存儲區(qū),其中特定的數(shù)據(jù)對象由容器名稱(例如表格名稱)、用戶名稱(指示容器的所有者)和某一鍵集(例如,散列鍵和范圍鍵)的組合表示,可獲得作為元組(容器ID、用戶ID、散列鍵、范圍鍵)的函數(shù)的讀取集。對于關(guān)系數(shù)據(jù)庫,可使用元組(表格ID、用戶ID、行ID)或(表格ID、用戶ID)。
在各種實施方案中,事務管理器可負責使用事務請求的內(nèi)容和持久性改變?nèi)罩緛碜R別事務請求中所指示的讀取與日志中所指示的寫入之間的沖突。對于相對簡單的讀取操作,基于進行讀取的位置而產(chǎn)生散列值,以及比較所述讀取位置的散列值與改變?nèi)罩局兴甘镜膶懭氲纳⒘兄悼勺銐蛴糜跈z測沖突。在一些實施方案中,對于較復雜的讀取請求,使用基于位置的散列值可能并不總是足夠的。例如,考慮以下情形:其中讀取請求R1包括查詢“從表格T1選擇以字母‘G’開頭的產(chǎn)品名稱”,且原始結(jié)果集是“Good-product1”。如果在檢查其寫入W1取決于R1的結(jié)果的事務請求用于接受之時,將產(chǎn)品名稱“Good-product2”插入到表格中,那么此將意味著如果R1在進行事務接受決策之時重新運行那么R1的結(jié)果集將改變,即使“Good-product1”數(shù)據(jù)對象的位置可能尚未修改且因此可能未被指示日志的寫入記錄。為了處置關(guān)于此類讀取查詢的讀取寫入沖突,或為了讀取涉及值的范圍的查詢(例如,“選擇產(chǎn)品價格在$10與$20之間的產(chǎn)品名稱集),在一些實施方案中,可使用基于邏輯或謂詞的讀取集描述符。因此可將上文所描述的基于位置的讀取集指示符視為可在各種實施方案中用于讀取寫入沖突檢測的結(jié)果集改變檢測元數(shù)據(jù)的僅一個示例類別。
讀取寫入沖突檢測
圖18示出根據(jù)至少一些實施方案的在基于日志的事務管理器處的讀取寫入沖突檢測的示例。在所描繪示例中,展示存儲在持久性改變?nèi)罩?810處的事務提交記錄(CR)1852按照從日志頂部到底部增加提交序號的次序布置。最新或最近提交事務由CR 1852F表示,具有提交序號(CSN)1804F和寫入集描述符(WSD)1805F。CR 1852A、1852B、1852C、1852D和1852E中的每一者包括對應的CSN 1804(例如,分別CSN 1804A-1804E)和對應的WSD 1805(例如,WSD 1805A-1805E)。
如所展示,事務請求描述符1844包含沖突檢查定界符(或提交狀態(tài)識別符)1842、讀取集描述符1846和寫入集描述符1848。(未展示請求事務的寫入有效負載)??尚枰谌罩镜氖聞展芾硐到y(tǒng)的沖突檢測器來識別將被檢查用于與請求事務的讀取集沖突的日志1810的CR集。在所描繪實施方案中,沖突檢查定界符1842指示可由沖突檢測器使用來識別將被檢查用于與請求事務讀取寫入沖突的CR集1809的開頭的下界CSN,如由箭頭標記“匹配”所指示。在一些實施方案中,集1809可包含以高達最近提交事務(CR 1852F)的匹配序號開始的所有CR。如果CR集1809所指示的寫入中的任一者與事務請求1844中所指示的讀取中的任一者重疊,那么此類讀取寫入沖突可導致請求事務的拒絕。在不同實施方案中可使用多種機制來檢查此類重疊是否存在。在一個實施方案中,例如,可使用一個或多個基于散列法的計算或探測來確定,讀取集描述符1846中表示的讀取是否與CR集1809中所指示的寫入沖突,因此避免CR集的依序掃描。在一些實施中,例如如果CR集中的記錄數(shù)目低于閾值,那么可使用CR集1809的依序掃描。如果CR集1809中所指示的寫入沒有一者與請求事務的讀取中的任一者重疊,那么可接受事務,這是因為在事務請求的制備期間讀取的數(shù)據(jù)沒有一者可能自其被讀取以來改變。在至少一個實施方案中,事務請求描述符還可指示將被檢查用于沖突的事務記錄的序號的上界,例如沖突檢查定界符可指示CS集1852內(nèi)的開始點和結(jié)束點兩者。
用于樂觀的基于日志的并發(fā)控制的方法
圖19是示出根據(jù)至少一些實施方案的可在日志記錄服務處執(zhí)行的控制平面操作的多個方面的流程圖。所展示的管理或配置相關(guān)操作中的至少一些可由諸如圖15中示出的日志記錄服務管理器1501例如響應于在日志記錄服務處實施的一個或多個管理編程接口的調(diào)用而執(zhí)行。如元素1901中展示,可通過日志記錄服務來注冊一個或多個數(shù)據(jù)存儲區(qū)用于事務管理,所述日志記錄服務例如使用上文所描述的讀取寫入沖突檢測方法來實施樂觀并發(fā)控制機制。在不同實施方案中,可使用基于日志的方法來實施用于具有各自不同的讀取接口的多種類型的數(shù)據(jù)存儲區(qū)的事務管理,包含例如關(guān)系數(shù)據(jù)庫、非關(guān)系數(shù)據(jù)庫、存儲器內(nèi)數(shù)據(jù)庫、提供商網(wǎng)絡(luò)實施的存儲服務、分布式高速緩沖存儲器部件、預計算查詢結(jié)果管理器、快照管理器等等的實例。在一些實施方案中,使用給定日志實例來管理的基礎(chǔ)數(shù)據(jù)存儲區(qū)中的一些或所有可能并不支持由一些傳統(tǒng)關(guān)系數(shù)據(jù)庫系統(tǒng)支持的至少一些ACID特性(原子性、一致性、隔離和耐久性)。
日志記錄服務可識別將用于持久性改變?nèi)罩镜膹椭艱AG節(jié)點的一組主機,所述持久性改變?nèi)罩緦⒈粚嵤┯糜谧詳?shù)據(jù)存儲區(qū)(元素1904),例如在實施于提供商網(wǎng)絡(luò)處的布建服務的幫助下。還可識別一個或多個主機用于復制DAG的配置管理器,例如如先前描述,可在一些實施中使用利用基于共識的協(xié)議來實施DAG配置改變的節(jié)點集群??稍谶x定主機處實例化復制節(jié)點和配置管理器??膳渲没谌罩镜氖聞展芾頇C制的其他部件,包含沖突檢測器、一個或多個寫入應用器和任選讀取接口管理器用于持久性改變?nèi)罩?元素1907)。在一些實施方案中,用于日志的讀取接口管理器可負責響應于直接遞交到日志(并非遞交到注冊數(shù)據(jù)存儲區(qū)的讀取接口)的讀取請求。在一個示例性實施中,寫入應用器可被實例化為訂閱何時在日志處提交事務的通知的各自處理程序或線程。在一些實施方案中,沖突檢測器可包括利用日志的讀取接口的模塊。沖突管理器的配置可包含例如,建立相對于對應于重復刪除或順序的約束檢查操作來識別讀取寫入沖突的次序,向客戶端提供響應的方式(例如,客戶端是否和如何被通知事務拒絕/提交),等等。在一些實施方案中,沖突檢測器、寫入應用器和/或日志讀取接口管理器可按多租戶方式實施,例如,給定沖突檢測器、寫入應用器或讀取接口管理器可將其服務提供到從其建立各自的日志實例的多個客戶端。
在已配置持久性改變?nèi)罩镜母鱾€部件之后,可例如通過將適當?shù)木W(wǎng)絡(luò)地址和/或憑據(jù)提供到客戶端來啟用來自客戶端的事務請求的流(元素1910)。在至少一些實施方案中,在日志記錄服務處執(zhí)行的控制平面操作可包含修整或存檔所存儲事務狀態(tài)記錄的部分(元素1914)。在一些此類實施方案中,例如,當用于給定持久性改變?nèi)罩镜氖聞沼涗浀拇鎯α砍^閾值時,可將某一數(shù)目的最舊事務記錄復制到不同的存儲設(shè)施(諸如提供商網(wǎng)絡(luò)存儲服務,或用于最近事務記錄集的較慢的存儲裝置組)。在另一實施方案中,可僅丟棄最舊事務記錄。在至少一個實施方案中,可根據(jù)需要來執(zhí)行其他控制平面操作,諸如在持續(xù)改變?nèi)罩镜囊粋€實例與另一實例之間切換,例如,第一改變?nèi)罩具_到記錄的閾值群體時。
圖20是示出根據(jù)至少一些實施方案的操作的多個方面的流程圖,所述操作可響應于從客戶端接收的事務請求而執(zhí)行在日志記錄服務處。如元素2001中展示,日志記錄服務的沖突檢測器可接收事務T1的事務請求描述符,例如,指示沖突檢查定界符、讀取集和包括到一個或多個數(shù)據(jù)存儲區(qū)處的各自位置的一個或多個寫入的寫入集,針對所述數(shù)據(jù)存儲區(qū)已通過日志記錄服務建立了持久性改變?nèi)罩?。沖突檢查定界符可指示從其獲得事務的讀取的結(jié)果的一個或多個源數(shù)據(jù)存儲區(qū)的提交狀態(tài),且因此可充當提交狀態(tài)識別符(CSI)。在一些環(huán)境中CSI還可稱作“快照序號”,因為其可對應于源數(shù)據(jù)存儲區(qū)的時間點邏輯快照??勺R別存儲在持久性改變?nèi)罩咎幍氖聞沼涗浖疭1,用于例如使用沖突檢查定界符和存儲在日志中的事務記錄的序號來檢查與請求事務的潛在沖突(元素2004)。在一個實施方案中,此類集S1可包含例如具有高于沖突檢查定界符中所指示的序號的提交序號的事務的所有記錄。
如果檢測到讀取寫入沖突(元素2007),例如,如果請求事務的讀取集至少部分地與集S1的事務中的一者的寫入集重疊,那么可拒絕或中止事務T1(元素2022)。在一些實施方案中,可使用散列函數(shù)來確定此類重疊是否存在,例如如果讀取集散列到與寫入集相同的值,那么可假定已發(fā)生沖突。在一些實施中,可將拒絕的指示或通知提供到從其接收事務請求的客戶端,從而使得客戶端能夠通過產(chǎn)生和遞交另一請求描述符來重試所述事務。如果未檢測到?jīng)_突(如也在元素2007中確定),那么可接受T1用于提交(元素2010)。在所描繪實施方案中,可起始T1的事務記錄的復制到持久性存儲器,例如在日志的多個復制DAG節(jié)點處。在一些實施方案中,當接受T1用于提交時可將接受序號指派到T1,且可將所述接受序號與至少一些事務請求描述符元素的內(nèi)容一起存儲在每一副本中。在至少一個實施方案中,如果所述事務最終獲得提交,那么接受序號可充當提交序號。
取決于其事務被管理的應用的數(shù)據(jù)耐久性需要,可必須在事務T1的提交完成之前存儲閾值數(shù)目的副本。如果保存足夠數(shù)目的副本(如元素2013中確定),那么可認為提交是成功的,且在一些實施方案中可通知請求客戶端所述提交完成(元素2014)。如果由于某種原因可保存到持久性存儲器的副本數(shù)目低于所需閾值(如還在元素2013中所檢測),那么可中止/拒絕所述事務(元素2022)。在T1提交之后,在所描繪實施方案中,可例如通過異步寫入應用器來將T1的寫入集中指示的寫入操作應用到對應的數(shù)據(jù)存儲區(qū)或數(shù)據(jù)消費者(元素2016)。在一些實施方案中,寫入應用器中的至少一者可為同步的,例如,客戶端可被通知:已只有在此類同步寫入應用器完成事務的寫入子集(已針對其同步地應用更新)之后才提交所述事務。在已應用更新之后,可響應于通過各自數(shù)據(jù)存儲區(qū)的讀取接口接收的客戶端讀取請求來讀取更新數(shù)據(jù)元素(元素2019)。除了各個注冊數(shù)據(jù)存儲區(qū)所支持的讀取接口之外,在至少一些實施方案中,持久性改變?nèi)罩咀陨砜衫缤ㄟ^日志記錄服務的編程查詢/讀取接口而直接被查詢事務記錄內(nèi)容。在一些實施中,通過此類日志記錄服務接口而針對日志的讀取可能夠在一些情況下比針對數(shù)據(jù)存儲區(qū)的讀取更快速地看見寫入操作的結(jié)果,這是因為數(shù)據(jù)存儲區(qū)可依賴于異步應用器以傳播已經(jīng)存在于日志中的寫入。在一些實施方案中,可使用同步應用器,其在于日志處提交事務時盡快傳播寫入到數(shù)據(jù)存儲區(qū)。在其他實施方案中,每一應用器可具有可配置時間窗,在所述時間窗內(nèi)必須將寫入傳播到對應的數(shù)據(jù)存儲區(qū)或消費者,使得變得有可能調(diào)整事務提交與數(shù)據(jù)存儲區(qū)處的事務的修改數(shù)據(jù)的出現(xiàn)之間的最大延遲。
圖21示出根據(jù)至少一些實施方案的可用以實現(xiàn)各自特殊情況一致性目標的事務請求描述符的示例。在一個實施方案中,日志記錄服務的客戶端可能希望強制執(zhí)行“寫后讀”一致性語義,據(jù)此寫入變得在其一被提交時即可由所有讀取器可見。為了確保寫后讀一致性,即,為了確保讀取總是在數(shù)據(jù)被提交后即刻“看見”數(shù)據(jù),客戶端可能希望遞交甚至用于只讀事務的事務請求(以及用于含有寫入的事務)。只讀事務請求描述符(TRD)2144例如具有空寫入集2106A和空寫入有效負載2108A,但具有非空沖突檢查定界符2102A和非空讀取集描述符2104A。在接收到此類只讀事務請求描述符后,沖突檢測器可檢查在請求中所指示的讀取集與寫入之間是否存在重疊,已提交具有高于沖突檢查定界符中所指示的序號的序號的所述寫入。如果檢測到?jīng)_突,那么可拒絕只讀事務,因此不允許讀取可在產(chǎn)生沖突檢查定界符之后已提交寫入的位置,即使請求事務不包含取決于那些讀取的任何寫入。
在至少一些實施方案中,在某些狀況下,可將只寫事務請求遞交到日志記錄服務。對于一些應用,可能有以下情況:客戶端至少在一些時間段期間或針對一些數(shù)據(jù)存儲區(qū)不希望強制執(zhí)行讀取寫入一致性檢查。而是,客戶端可希望在此類時間段期間使一些寫入無條件地接受而用于提交。因此,可遞交具有空讀取集2104B和/或空沖突檢查定界符2102B連同非空寫入集描述符2106B和非空寫入有效負載2108B的事務請求描述符2145。例如,當最初填入數(shù)據(jù)存儲區(qū)或?qū)ο髸r,或在僅一個寫入器客戶端已知在某一時間段期間遞交請求的情況下,可遞交此類只寫請求。
如先前提及,在一些實施方案中,可使用異步寫入應用器來將提交寫入的內(nèi)容從持久性改變?nèi)罩緜鞑サ礁鱾€數(shù)據(jù)存儲區(qū)或數(shù)據(jù)消費者。由于寫入傳播的異步性質(zhì),可能有在某一時間點提交寫入集尚未被傳播到其預期數(shù)據(jù)存儲區(qū)的情況。在至少一個實施方案中,有可能使用只寫事務來沖洗此類未應用寫入。例如,如果特定寫入應用器WA1被配置成具有給定數(shù)據(jù)存儲區(qū)DS1未解決的不超過N個未應用寫入,那么客戶端可遞交針對DS1中的特殊寫入位置WL1的只寫事務請求描述符(諸如TRD 2145),其中特定或主要使用WL1用于沖洗未解決的提交寫入。在一些情況下,此類TRD可根本不需要具有任何寫入有效負載(例如,可將寫入有效負載2108B設(shè)置為空)。當接受此類寫入應用沖洗事務請求時,可將新的待決提交寫入添加到日志和添加到WA1的未解決的請求隊列。隨著隊列的長度生長,WA1可必須開始在隊列中應用先前提交的寫入以滿足其不超過N個未應用寫入的要求。在一些實施方案中,可定期地(例如,每秒一次)遞交此類寫入應用沖洗請求,以確保所述提交寫入不保持待決太長時間。當寫入應用沖洗事務的提交寫入到達應用器的隊列的頭部時,在一些實施中,無需執(zhí)行物理寫入;而是,例如,應用器可僅發(fā)送對應于事務的提交序號到目的地數(shù)據(jù)存儲區(qū)作為最近“應用”寫入的指示符。
對于一些應用,客戶端可希望在至少一些時間段期間強制執(zhí)行嚴格的串行化。即,一次可允許僅一個(含有寫入)事務繼續(xù)進行,不管在事務期間的數(shù)據(jù)讀取與可從起始事務準備以來已提交的寫入之間是否存在任何沖突。在此類情形中,客戶端可將嚴格串行化事務請求描述符2146連同其指示應用所使用的所有數(shù)據(jù)集的全部內(nèi)容的讀取集描述符2104C遞交到日志記錄服務。在散列值用作讀取/寫入位置的指示符且使用與寫入集條目的逐位比較來檢測沖突的一個實施中,例如,可將包含在讀取集描述符2402C中的散列值設(shè)置為“1”的序列(例如,對于16位散列值為“1111111111111111”)。如果已提交CSN大于此類TRD 2146的沖突檢查定界符2102C的任何含有寫入事務,那么可拒絕對應于TRD 2146的事務。因此,寫入集描述符2106C和寫入有效負載2108C所指示的寫入將僅在描述符所指示的沖突檢查時間間隔中未提交其他寫入的情況下(不管此類寫入的位置)才被提交。
重復刪除和順序約束
在一些實施方案中,日志記錄服務的客戶端可能希望確保不將重復條目寫入到一個或多個數(shù)據(jù)存儲區(qū)。在一個此類實施方案中,除了執(zhí)行如上所述的讀取寫入沖突檢測之外,日志記錄服務還可必須強制執(zhí)行事務請求中所指示的重復刪除要求。圖22示出根據(jù)至少一些實施方案的強制執(zhí)行與在基于日志的事務管理器處接收的事務請求相關(guān)聯(lián)的重復刪除約束的示例。如所展示,事務請求描述符2244包括讀取寫入沖突檢查定界符2212、讀取集描述符2214、寫入集描述符2216和邏輯約束定界符2218。圖22中未展示TRD 2244的寫入有效負載。在所描繪實施方案中,邏輯約束描述符2218包含指示其表示重復刪除約束的LC類型字段2219、重復刪除檢查定界符2220和排除簽名2222。
在所描繪實施方案中,為了確定是否接受請求事務,日志記錄服務可能必須執(zhí)行兩個類型的檢查:一個用于檢測讀取寫入沖突,且一個用于檢測重復。在所描繪實施方案中,持久性改變?nèi)罩?210中的提交記錄2252可每個包含各自的提交序號(CSN 2204)、寫入集描述符(WSD)2205和重復刪除簽名(DDS)2206。為了確定讀取寫入沖突是否已發(fā)生,日志記錄服務可識別CR集2209,在對應于讀取寫入沖突檢查定界符2212的序號處開始且在最近提交記錄2252F結(jié)束,將評估其寫入集用于與請求事務的讀取集描述符2214重疊。如果檢測到讀取寫入沖突(即,如果存在此類重疊),那么可如先前描述拒絕請求事務。
為了確定請求事務的寫入是否表示重復,在所描繪實施方案中可識別在對應于重復刪除檢查定界符2220的序號處開始且在最近提交記錄2252F結(jié)束的另一CR集2259。對于CR集2259中的提交記錄中的每一者,日志記錄服務可檢查提交記錄中存儲的重復刪除簽名中的任一者是否與請求事務的排除簽名2222匹配。如果發(fā)現(xiàn)此類匹配,那么可檢測到重復,且在此類情形中可拒絕請求事務,即使未檢測到讀取寫入沖突。如果未檢測到復制,且如果未檢測到讀取寫入沖突,那么可接受所述事務用于提交。
在至少一些實施方案中,重復刪除簽名2206可表示通過對應事務按照與寫入集描述符不同的方式(例如,通過使用不同散列函數(shù)而產(chǎn)生的散列值,或通過使用較多位存儲的散列值)寫入的數(shù)據(jù)項目。寫入集的此類不同編碼可出于許多原因中的任一者而用于重復刪除相對讀取寫入沖突檢測。例如,對于一些應用,客戶端比其由于假陽性讀取寫入沖突檢測而偶爾必須重新遞交事務更加擔心準確地檢測重復。對于此類應用,讀取寫入沖突檢測中誤差的可接受率因此可高于重復檢測誤差的可接受率。因此,在一些實施中,輸出值采用128位或256位的加密強度散列函數(shù)可用于重復刪除簽名,而使用16位或32位來存儲輸出的較簡單散列函數(shù)可用于包含在WSD中的寫入簽名。在一些情形中,針對所使用的數(shù)據(jù)存儲區(qū)的小子集可能需要重復刪除,而可必須針對大的多的事務集來檢查讀取寫入沖突。在此類情況下,可通過使用比在一些實施方案中的重復刪除簽名小的WDS簽名來降低存儲和網(wǎng)絡(luò)連接資源利用率。在邏輯上分離讀取寫入沖突檢測機制與重復刪除檢測機制而非出于其他原因合并所述兩者也可以是有用的,例如,為了避免日志記錄服務的用戶當中的混亂,為了能夠支持用于重復刪除的分離計費等等。
在其他實施方案中,寫入集描述符可用于讀取寫入沖突檢測目的和重復刪除目的兩者(例如,可未使用單獨排除簽名)。類似地,在一些實施方案中,同一序號值可用作讀取寫入沖突檢查定界符和重復刪除檢查定界符,即,也可檢查針對讀取寫入沖突而檢查的提交記錄集用于重復。在至少一個實施方案中,可例如使用寫入集描述符而通過默認執(zhí)行重復刪除,不需要將邏輯約束描述符包含在事務請求描述符中。
對于一些應用,客戶端可能對指定事務集當中強制執(zhí)行提交次序感興趣,例如,遞交分別用于事務T1、T2和T3的三個不同事務請求的客戶端可能希望使T1在T2之前提交,且T3僅在T1和T2兩者已提交之后才提交。在一些實施方案中,可使用第二類型的邏輯約束描述符來強制執(zhí)行此類提交順序約束。圖23示出根據(jù)至少一些實施方案的強制執(zhí)行與在基于日志的事務管理器處接收的事務請求相關(guān)聯(lián)的順序約束的示例。如所展示,事務請求描述符2344包括讀取寫入沖突檢查定界符2312、讀取集描述符2314、寫入集描述符2316、以及與圖22的邏輯描述符2218不同類型的邏輯約束定界符2318。圖23中未展示TRD 2344的寫入有效負載。在所描繪實施方案中,邏輯約束描述符2318包含指示其表示順序約束的LC類型字段2319、順序檢查定界符2220、以及分別對應于事務T1和T2的所需順序簽名2322A和2322B。邏輯約束描述符2318可包含在TRD 2344中以確保僅在先前已提交事務T1和T2兩者(由順序簽名2322A和2322B表示)的情況下提交請求事務。
為了確定是否接受請求事務,在圖23中示出的示例中日志記錄服務可再次必須執(zhí)行兩個類型的檢查:一個用于檢測讀取寫入沖突,且一個用于確保事務T1和T2已被提交。在所描繪實施方案中,持久性改變?nèi)罩?310中的提交記錄2352可每個包含各自的提交序號(CSN 2304)、寫入集描述符(WSD)2305和順序簽名2306。為了確定讀取寫入沖突是否已發(fā)生,像以前一樣,日志記錄服務可識別CR集2309,在對應于讀取寫入沖突檢查定界符2312的序號處開始且在最近提交記錄2352F結(jié)束,將評估其寫入集用于與請求事務的讀取集描述符2314重疊。如果檢測到讀取寫入沖突(即,如果存在此類重疊),那么可拒絕請求事務。
為了確定請求事務的順序約束是否得到滿足,在所描繪實施方案中可識別在對應于順序檢查定界符2320的序號處開始且在最近提交記錄2352F結(jié)束的另一CR集2359。日志記錄服務可必須驗證,具有匹配所需簽名2322A和2322B的順序簽名的各自提交記錄存在于CR集2359內(nèi)。如果在CR集2259中未發(fā)現(xiàn)所需簽名2322中的至少一者,那么可能違反了順序約束且可拒絕請求事務,即使未檢測到讀取寫入沖突。如果在CR集2359中發(fā)現(xiàn)順序簽名兩者,且如果未檢測到讀取寫入沖突,那么可接受所述事務用于提交。
在不同實施方案中可使用多種技術(shù)來產(chǎn)生存儲在CR 2352(且在TRD 2344中)的順序簽名。在一些實施方案中,其可由事務的寫入集產(chǎn)生;在其他實施方案中,順序簽名可至少部分基于其他因素。例如,在一些實施方案中,請求客戶端的身份除了可編碼在寫入簽名中之外還可編碼在順序簽名中,請求所述事務所在的時鐘時間可編碼在順序簽名中,或可編碼從其請求事務的位置的指示,等等。在一些實施方案中,可應用如上文描述的關(guān)于使用與寫入集簽名不同的用于表示順序簽名的技術(shù)的類似考慮因素。因此,在一些實施方案中,可使用與用于產(chǎn)生寫入集描述符內(nèi)容不同的用以產(chǎn)生順序簽名的技術(shù),即使順序簽名和寫入集簽名兩者都從同一基礎(chǔ)寫入位置導出。例如,可使用不同的散列函數(shù)或不同的散列值大小。然而,在其他實施方案中,寫入集描述符可用于讀取寫入沖突檢測和順序執(zhí)行目的兩者(例如,可未使用單獨順序簽名)。類似地,在一些實施方案中,同一序號值可用作讀取寫入沖突檢查定界符和順序檢查定界符,即,也可檢查針對讀取寫入沖突而檢查的提交記錄集用于順序。在一些情況下,與寫入集無關(guān)的任意數(shù)字或字符串可用作順序簽名。在至少一個實施方案中,約束描述符可不包含LC類型字段;而是,約束的類型可由事務請求內(nèi)的約束描述符的位置指示。在一些實施方案中,“所需”標記可與順序簽名相關(guān)聯(lián),且“排除”標記可與重復刪除簽名相關(guān)聯(lián),而不是例如使用LC類型字段。如先前在讀取寫入沖突檢查定界符的上下文中提及,在一些實施方案中,也可在事務請求描述符內(nèi)指定CSN上界以指示將要被檢查用于約束檢查的提交記錄范圍,而不是僅指定CSN下界。
在一些實施方案中,可強制執(zhí)行比圖23中所示的更復雜的順序約束。例如,代替僅請求日志記錄服務以驗證在請求事務的提交之前事務T1和T2兩者必須已被提交(按照任何次序),客戶端可能夠請求必須在T2之前已提交T1。類似地,在一些實施方案中,客戶端可能夠請求負排序要求:例如,某一事務集{T1,T2,Tk}應按照某一指定次序(或按照任何次序)在請求事務之前提交,且也不應提交某一其他事務集{Tp,Ts}。
在圖22和圖23中,在所展示的事務請求中指示單個類型的邏輯約束。在一些實施方案中,客戶端可希望對各個事務強制執(zhí)行若干不同類型的邏輯約束。圖24示出根據(jù)至少一些實施方案的包括多個邏輯約束描述符的事務請求描述符的示例。將要應用一個順序約束,且將要針對事務描述符2444所表示的同一請求事務來應用一個重復刪除約束。在所描繪實施方案中,讀取和寫入集描述符包括用于每一數(shù)據(jù)項目讀取或?qū)懭氲?2位(4字節(jié))散列值。例如,各自的4字節(jié)讀取散列簽名2464A和2464B可表示讀取集描述符2404中的兩個數(shù)據(jù)項目位置,且各自的4字節(jié)寫入散列簽名2465A和2465B可包含在寫入集描述符2406中以表示目標用于寫入的兩個位置(在事務被提交的情況下)。使用讀取寫入沖突檢查定界符2402來選擇持久性改變?nèi)罩局行蛱柗秶南陆纾瑢z查所述持久性改變?nèi)罩镜奶峤挥涗浻糜谂c請求事務的讀取寫入沖突。
在所描繪實施方案中,事務請求描述符2444還可包含順序約束描述符2408A和重復刪除約束描述符2408B。順序約束描述符2408A可包含約束類型字段2409A、順序檢查定界符2410、以及對應于必須已針對將被接受的請求事務而完成提交的事務的一個或多個所需順序簽名諸如2412A和2412B。重復刪除約束描述符2408B可包含約束類型字段2409B、重復刪除檢查定界符2420和重復刪除排除簽名2422。
如所展示,在所描繪實施方案中,所需順序簽名2412A、2412B和重復刪除簽名2422可分別包括128位(16字節(jié))散列簽名2466A、2466B和2467。因此,在所描繪示例中,邏輯約束簽名可每個占據(jù)用于讀取和寫入集簽名的每個數(shù)據(jù)項目所使用的位數(shù)的四倍,此相對于針對讀取寫入沖突檢測而執(zhí)行的比較可幫助減少針對邏輯約束相關(guān)比較的散列碰撞的數(shù)目。在一些實施方案中,諸如MD5的加密散列函數(shù)可用于順序和/或重復刪除簽名。在至少一些此類實施方案,加密散列函數(shù)的使用可幫助減小評估邏輯約束時的誤差到近零的可能性。盡管基于假陽性散列碰撞(例如基于假陽性讀取寫入沖突檢測)的事務拒絕的適度地低比率可是可接受的,但至少一些客戶端可更關(guān)心避免歸因于假陽性散列碰撞的事務的接受(例如,在提交順序的情況下),且使用加密強度散列函數(shù)可幫助避免此類不正確的事務接受。在一些實施中,客戶端可能夠選擇散列函數(shù)以用于重復檢測和/或用于順序目的。在一些實施方案中,與圖24中所示不同的散列函數(shù)和/或散列值長度可用于重復刪除簽名、順序簽名和/或讀取或?qū)懭牒灻?,例如,重復刪除和順序簽名可在大小上不同。在至少一些實施方案中,讀取或?qū)懭氲臄?shù)據(jù)項目的地址可用于讀取/寫入集簽名、重復刪除和/或順序簽名,例如,而不是使用由所述地址產(chǎn)生的散列值。在一個實施方案中,除了或代替將數(shù)據(jù)寫入的位置,重復刪除和/或?qū)懭牒灻€可從寫入有效負載導出。
在一些實施方案中,還可在事務請求描述符中指定額外的邏輯約束,諸如數(shù)據(jù)完整性/有效性約束或提交最后期限約束。示例性數(shù)據(jù)完整性或有效性約束可需要例如,在不同值V2已經(jīng)存儲在DS1中或某一其他數(shù)據(jù)存儲區(qū)中的情況下,特定值V1可僅存儲在數(shù)據(jù)存儲區(qū)DS1中。數(shù)據(jù)有效性約束可界定用于將被存儲的指定數(shù)據(jù)類型或數(shù)據(jù)項目的可接受范圍(對存儲于指定數(shù)據(jù)存儲區(qū)位置中的值無條件或有條件的)。提交約束可指示事務的提交應被完成的最后期限,意圖是如果最后期限未滿足那么應拋棄或中止所述事務。
圖25是示出根據(jù)至少一些實施方案的操作的多個方面的流程圖,所述操作可響應于指示一個或多個邏輯約束的事務請求而執(zhí)行在日志記錄服務處。在所描繪實施方案中,給定事務的提交要求可包含并發(fā)控制要求(例如,未發(fā)現(xiàn)上文所描述種類的讀取寫入沖突的要求)以及邏輯約束要求。在至少一些實施方案中,可支持重復刪除和順序邏輯約束兩者用于單個事務(也可支持其他邏輯約束,但在圖25中僅展示與重復刪除和順序有關(guān)的操作)。如元素2501中展示,可在與日志記錄服務的特定持久性改變?nèi)罩緦嵗嚓P(guān)聯(lián)的沖突檢測器處接收包含事務T1的一個或多個邏輯約束描述符的事務請求描述符。對于每一邏輯描述符,可在所描繪實施方案中指定對應的檢查定界符,以用以選擇將被分析的提交記錄集,從而確定邏輯約束是被滿足還是違反。還可針對每一邏輯約束指定各自的一個或多個簽名集。還可指示請求事務的讀取集和寫入集連同讀取寫入沖突檢查定界符。如先前提及,在一些實施方案中,與用于檢查讀取寫入沖突相同的定界符可用于一個或多個邏輯約束。而且,在至少一個實施方案中,邏輯約束可不需要單獨的簽名;而是,例如,寫入集簽名可用作重復刪除和/或順序簽名。
通過使用讀取寫入沖突檢查定界符,在所描繪實施方案中可識別將被分析的第一提交記錄集CRS1。例如,此類集可包括其序號位于開始于讀取寫入沖突檢查定界符處、高達最近存儲提交記錄的序號(或高達事務請求中所指示的不同上界)的范圍中的那些提交記錄。如果檢測到讀取寫入沖突(元素2504)(例如,如果CRS1的提交記錄中的任一者的寫入集與請求事務的讀取集重疊),那么可拒絕/中止事務(元素2531)。檢查讀取寫入沖突還可在本文稱作驗證所述請求事務滿足并發(fā)控制要求。在一些實施方案中,從其接收事務請求的客戶端可被通知所述事務已中止。
如果未檢測到讀取寫入沖突(也在對應于元素2504的操作中),那么在所描繪實施方案中可按順序檢查對應的描述符所指示的邏輯約束中的每一者。可檢查序列中的下一邏輯約束描述符,且可基于與所述約束相關(guān)聯(lián)的檢查定界符而選擇用于約束分析的新的提交記錄集CRS-k(元素2507)。例如,CRS-k可包含序號在開始于定界符處且結(jié)束于最高記錄提交序號處(或高達事務請求中所指示的不同上界)的范圍中的所有提交記錄。將被執(zhí)行的分析可取決于邏輯約束描述符的類型。如果將要檢查重復刪除約束,且如果通過比較CDR-k的重復刪除簽名與請求事務而發(fā)現(xiàn)重復(元素2510),那么還可拒絕/中止所述事務(元素2531)。如果所述約束為重復刪除約束且未發(fā)現(xiàn)重復(也如元素2510中所檢測),且如果較多邏輯約束保持被分析,那么可檢查下一邏輯約束描述符且可針對下一邏輯描述符重復對應于元素2507繼續(xù)向前的操作。
如果約束描述符指示順序約束(其指示提交事務的一個或多個所需簽名),那么可檢查用于順序約束的CRS-k以確保實際上已存儲所需簽名用于已完成提交的事務。如果未發(fā)現(xiàn)所需事務的提交記錄(如在元素2513中所檢測),那么還可中止/拒絕所述請求事務(元素2531)。如果發(fā)現(xiàn)所需事務的提交記錄(也在對應于元素2513的操作中),那么可完成順序約束處理。如在讀取寫入沖突檢測的情況下,在至少一些實施方案中,還可使用用于所述比較的散列函數(shù)來執(zhí)行邏輯約束檢查,因此避免掃描提交記錄集的開銷。如果剩余任何邏輯約束描述符(元素2516),那么可繼而對其進行檢查。如果沒有邏輯約束描述符剩余(如也在元素2516中所檢測),那么可接受所述事務用于提交。可在所描繪實施方案(元素2519)中起始用以將事務的提交記錄保存在持久性存儲器中的程序,例如在復制DAG的若干節(jié)點處。如果復制成功(例如,如果將提交記錄的足夠數(shù)目的副本成功地存儲在各自存儲裝置處)(如元素2522中所檢測),那么所述事務的提交可被視為完成。如果由于某種原因而未存儲所需數(shù)目的副本,那么仍可拒絕/中止所述事務(元素2531)。在一些實施方案中,可將事務已被成功提交的通知傳輸?shù)秸埱罂蛻舳?元素2525)。
在一些實施方案中,用以檢查一個以上邏輯約束的操作可代替并行執(zhí)行。在一個實施方案中,讀取寫入沖突檢查和邏輯約束檢查的任何組合可并行執(zhí)行。在一些實施方案中,可將關(guān)于所指示邏輯約束中的每一者的響應提供到請求客戶端,即使所述約束中的一者或多者并未滿足。例如,在具有重復刪除約束和順序約束的事務請求的情況下,可檢查順序約束,即使重復刪除約束并未滿足,且可將兩約束的評估結(jié)果提供到客戶端。在一些實施中,客戶端可能夠顯式地請求給定事務請求的邏輯約束的指定子集或全部將被檢查。
應注意,在各種實施方案中,與圖6、圖7、圖8、圖9、圖10、圖12、圖13、圖14、圖19、圖20和圖25的流程圖中所示的那些操作不同的操作可用以實施上文所描述的應用狀態(tài)管理、協(xié)調(diào)暫停、并發(fā)控制和邏輯約束管理的技術(shù)中的至少一些。在一些實施方案中,所展示的一些操作可未實施,或者可按不同次序?qū)嵤?,或者并行而不是順序地實?如上文關(guān)于圖25所指示)。
使用案例
上文所描述的使用復制DAG來管理應用狀態(tài)變化的包含基于日志的事務管理的技術(shù)可在多種實施方案中有用。隨著越來越多的組織將其計算移往提供商網(wǎng)絡(luò)環(huán)境,已開發(fā)出具有各自一致性語義和各自接口的多種分布式存儲應用。一些較大應用可跨越多個數(shù)據(jù)存儲區(qū)實例,且復制DAG和基于日志的事務管理技術(shù)可表示用以分布式存儲應用管理的統(tǒng)一、靈活、可擴展且高度可用的方法。復制DAG節(jié)點即使在DAG配置的各自視圖可至少臨時分歧的情況下而在應用狀態(tài)轉(zhuǎn)變方面取得進展的能力可減少或消除可能在使用較少動態(tài)復制技術(shù)的情況下出現(xiàn)的處理應用請求中的至少一些“停止一切”暫停?;谌罩镜氖聞展芾砜赡懿粌H允許跨數(shù)據(jù)存儲區(qū)事務(以及用于可能不支持原子多寫入事務的數(shù)據(jù)存儲區(qū)的多項目事務),而且可有助于諸如自動查詢響應產(chǎn)生、快照產(chǎn)生及其類似者的特征??墒褂萌罩居涗浄盏淖陨碜x取接口來啟用跨越多個數(shù)據(jù)存儲區(qū)執(zhí)行數(shù)據(jù)分析的全新方式。
在一些提供商網(wǎng)絡(luò)環(huán)境中,通過復制DAG進行的基于日志的事務管理可用以存儲實施在提供商網(wǎng)絡(luò)處的另一網(wǎng)絡(luò)可訪問服務的控制平面配置信息,諸如虛擬化計算服務、存儲服務或數(shù)據(jù)庫服務。在此類情形中,使用日志來管理的事務可表示網(wǎng)絡(luò)可訪問服務的各個資源的配置的改變(諸如在虛擬計算服務情況下的計算實例或虛擬化主機)。
說明性計算機系統(tǒng)
在至少一些實施方案中,實施本文所述技術(shù)(包含用以實施復制DAG的各個部件和/或用于事務管理的日志記錄服務的技術(shù))中的一者或多者的一部分或全部的服務器可包含通用計算機系統(tǒng),所述通用計算機系統(tǒng)包含一個或多個計算機可訪問介質(zhì)或被配置來訪問一個或多個計算機可訪問介質(zhì)。圖26示出此類通用計算裝置9000。在所說明實施方案中,計算裝置9000包含通過輸入/輸出(I/O)接口9030耦接到系統(tǒng)存儲器9020(其可包括非易失性存儲器模塊和易失性存儲器模塊兩者)的一個或多個處理器9010。計算裝置9000還包含耦接到I/O接口9030的網(wǎng)絡(luò)接口9040。
在各種實施方案中,計算裝置9000可以是包含一個處理器9010的單處理器系統(tǒng),或包含若干處理器9010(例如兩個、四個、八個或另一合適數(shù)目)的多處理器系統(tǒng)。處理器9010可以是能夠執(zhí)行指令的任何合適處理器。例如,在各種實施方案中,處理器9010可以是實施多種指令集架構(gòu)(ISA)中任一架構(gòu)的通用或嵌入式處理器,諸如x86、PowerPC、SPARC或MIPS ISA或者任何其他合適的ISA。在多處理器系統(tǒng)中,每一處理器9010可通常但并非必須實施同一ISA。在一些實施中,可代替或者除了常規(guī)處理器使用圖形處理單元(GPU)。
系統(tǒng)存儲器9020可被配置來存儲可由處理器9010訪問的指令和數(shù)據(jù)。在至少一些實施方案中,系統(tǒng)存儲器9020可包括易失性部分和非易失性部分兩者;在其他實施方案中,可僅使用易失性存儲器。在各種實施方案中,系統(tǒng)存儲器9020的易失性部分可使用任何合適的存儲器技術(shù)來實施,所述存儲器技術(shù)諸如靜態(tài)隨機存取存儲器(SRAM)、同步動態(tài)RAM或任何其他類型的存儲器。對于系統(tǒng)存儲器的非易失性部分(例如其可包括一個或多個NVDIMM),在一些實施方案中可使用基于閃存的存儲器裝置,包含NAND閃存裝置。在至少一些實施方案中,系統(tǒng)存儲器的非易失性部分可包含電源,諸如超級電容器或其他電力存儲裝置(例如,電池)。在各種實施方案中,基于憶阻器的電阻性隨機存取存儲器(ReRAM)、三維NAND技術(shù)、鐵電RAM、磁阻RAM(MRAM)或者各種類型的相變存儲器(PCM)中的任一種可至少用于系統(tǒng)存儲器的非易失性部分。在所說明實施方案中,實施一個或多個期望功能的程序指令和數(shù)據(jù)(諸如上文所述的那些方法、技術(shù)和數(shù)據(jù))被展示為作為代碼9025和數(shù)據(jù)9026存儲在系統(tǒng)存儲器9020內(nèi)。
在一個實施方案中,I/O接口9030可被配置成協(xié)調(diào)處理器9010、系統(tǒng)存儲器9020以及裝置中的任何外圍裝置之間的I/O業(yè)務,所述外圍裝置包含網(wǎng)絡(luò)接口9040或其他外圍接口,諸如各種類型的持久性和/或易失性存儲裝置。在一些實施方案中,I/O接口9030可執(zhí)行任何必要的協(xié)議、時序或其他數(shù)據(jù)變換,以便將來自一個部件(例如,系統(tǒng)存儲器9020)的數(shù)據(jù)信號轉(zhuǎn)換成適合于由另一部件(例如,處理器9010)使用的格式。在一些實施方案中,I/O接口9030可包含對于通過各種類型外圍總線附接的裝置的支持,諸如外圍部件互連(PCI)總線標準或通用串行總線(USB)標準的變體,例如。在一些實施方案中,I/O接口9030的功能可劃分到兩個或多個單獨部件中,諸如北橋和南橋,例如。而且,在一些實施方案中,I/O接口9030的功能性中的一些或全部(諸如通向系統(tǒng)存儲器9020的接口)可直接并入到處理器9010中。
網(wǎng)絡(luò)接口9040可被配置成允許數(shù)據(jù)在計算裝置9000與附接到一個或多個網(wǎng)絡(luò)9050的其他裝置9060(例如如圖1至圖25中所示出的其他計算機系統(tǒng)或裝置)之間進行交換。在各種實施方案中,網(wǎng)絡(luò)接口9040可支持通過任何合適的有線或無線通用數(shù)據(jù)網(wǎng)絡(luò)(諸如各類以太網(wǎng)網(wǎng)絡(luò))進行通信,例如。另外,網(wǎng)絡(luò)接口9040可支持通過電信/電話網(wǎng)絡(luò)(諸如模擬語音網(wǎng)絡(luò)或數(shù)字光纖通信網(wǎng)絡(luò))、通過存儲區(qū)域網(wǎng)絡(luò)(諸如光纖信道SAN)或者通過任何其他合適類型的網(wǎng)絡(luò)和/或協(xié)議進行通信。
在一些實施方案中,系統(tǒng)存儲器9020可以是計算機可訪問介質(zhì)的一個實施方案,所述計算機可訪問介質(zhì)被配置成存儲如上文針對圖1至圖25所描述用于實施對應方法和設(shè)備的實施方案的程序指令和數(shù)據(jù)。然而,在其他實施方案中,可在不同類型的計算機可訪問介質(zhì)上接收、發(fā)送或存儲程序指令和/或數(shù)據(jù)。一般來說,計算機可訪問介質(zhì)可包含非暫時性存儲介質(zhì)或存儲器介質(zhì),諸如磁性或光學介質(zhì),例如通過I/O接口9030耦接到計算裝置9000的磁盤或DVD/CD。非暫時性計算機可訪問存儲介質(zhì)還可包含可作為系統(tǒng)存儲器9020或另一類型的存儲器被包含在計算裝置9000的一些實施方案中的任何易失性或非易失性介質(zhì),諸如RAM(例如,SDRAM、DDR SDRAM、RDRAM、SRAM等)、ROM等。此外,計算機可訪問介質(zhì)可包含經(jīng)由通信介質(zhì)(諸如網(wǎng)絡(luò)和/或無線鏈路)傳遞的傳輸介質(zhì)或信號,諸如電信號、電磁信號或數(shù)字信號,諸如可通過網(wǎng)絡(luò)接口9040來實施。多個計算裝置中的部分或全部(諸如圖26中所示出的那些)可用于實施各種實施方案中的所描述功能性;例如,在多種不同的裝置和服務器上運行的軟件部件可合作來提供功能性。在一些實施方案中,除了或者代替使用通用計算機系統(tǒng)來實施,所描述功能性的部分可使用存儲裝置、網(wǎng)絡(luò)裝置或?qū)S糜嬎銠C系統(tǒng)來實施。如本文所使用的術(shù)語“計算裝置”是指至少所有這些類型的裝置,并且不限于這些類型的裝置。
鑒于以下條款,上述實施方案可更好地理解:
1.一種系統(tǒng),其包括:
一個或多個計算裝置,其被配置來:
響應于通過實施在提供商網(wǎng)絡(luò)處的多數(shù)據(jù)庫日志記錄服務來注冊多個數(shù)據(jù)存儲區(qū)用于事務管理的請求,包含實施第一組數(shù)據(jù)訪問接口的第一數(shù)據(jù)存儲區(qū)和實施第二組數(shù)據(jù)訪問接口的第二數(shù)據(jù)存儲區(qū),指定所述日志記錄服務的特定持久性改變?nèi)罩緛泶鎯︶槍λ龆鄠€數(shù)據(jù)存儲區(qū)的一個或多個數(shù)據(jù)存儲區(qū)的寫入的表示;
在所述多數(shù)據(jù)庫日志記錄服務的沖突檢測器處接收由客戶端請求的事務的表示,其中所述事務包含針對所述第一數(shù)據(jù)存儲區(qū)的至少第一寫入操作以及針對所述第二數(shù)據(jù)存儲區(qū)的至少第二寫入操作;
在所述沖突檢測器處至少部分基于所述表示的內(nèi)容和至少部分基于所述特定持久性改變?nèi)罩镜膬?nèi)容來確定所述事務將被提交;
將指示所述事務的一個或多個日志記錄添加到所述多數(shù)據(jù)庫日志記錄服務的所述特定持久性改變?nèi)罩荆?/p>
將所述第一寫入操作應用到所述第一數(shù)據(jù)存儲區(qū),且將所述第二寫入操作應用到所述第二數(shù)據(jù)存儲區(qū);
響應于使用所述第一組數(shù)據(jù)訪問接口的針對所述第一數(shù)據(jù)存儲區(qū)的第一查詢,提供包含所述第一寫入操作的結(jié)果的第一響應;
響應于使用所述第二組數(shù)據(jù)訪問接口的針對所述第二數(shù)據(jù)存儲區(qū)的第二查詢,提供包含所述第二寫入操作的結(jié)果的第二響應;以及
響應于通過由所述多數(shù)據(jù)庫日志記錄服務所界定的編程查詢接口的針對所述日志記錄服務的第三查詢,提供第三響應,所述第三響應包含所述第一寫入操作和所述第二寫入操作中的一者或多者的結(jié)果。
2.如條款1所述的系統(tǒng),其中所述第一數(shù)據(jù)存儲區(qū)和所述第二數(shù)據(jù)存儲區(qū)中的每一數(shù)據(jù)存儲區(qū)包括以下各項中的一者:非關(guān)系數(shù)據(jù)庫系統(tǒng)、關(guān)系數(shù)據(jù)庫系統(tǒng)、實施允許訪問非結(jié)構(gòu)化數(shù)據(jù)對象的web服務接口的存儲服務、存儲器內(nèi)數(shù)據(jù)庫或分布式高速緩沖存儲器的實例。
3.如條款1所述的系統(tǒng),其中所述特定持久性改變?nèi)罩景ǘ鄠€副本節(jié)點,其中所述多個副本節(jié)點中的每一節(jié)點將所述一個或多個日志記錄的日志記錄的副本存儲在各自存儲裝置處。
4.如條款1所述的系統(tǒng),其中所述一個或多個計算裝置經(jīng)進一步配置來:
根據(jù)至少所述第一寫入操作的所述結(jié)果來更新物化視圖。
5.如條款1所述的系統(tǒng),其中所述一個或多個計算裝置經(jīng)進一步配置來:
至少部分基于至少所述第一寫入操作的所述結(jié)果來產(chǎn)生用于第四查詢的預計算結(jié)果;以及
響應于接收到所述第四查詢,提供所述預計算結(jié)果。
6.一種方法,其包括:
通過一個或多個計算裝置執(zhí)行:
實例化特定持久性改變?nèi)罩緛泶鎯︶槍σ粋€或多個數(shù)據(jù)存儲區(qū)的寫入的表示,所述數(shù)據(jù)存儲區(qū)包含實施第一組數(shù)據(jù)訪問接口的第一數(shù)據(jù)存儲區(qū);
接收由所述第一數(shù)據(jù)存儲區(qū)的客戶端請求的事務的表示,其中所述事務包含針對存儲在所述第一數(shù)據(jù)存儲區(qū)處的數(shù)據(jù)對象的至少第一寫入;
至少部分基于所述表示的內(nèi)容和至少部分基于所述特定持久性改變?nèi)罩镜膬?nèi)容來確定所述請求事務將被提交;
將指示所述第一寫入的日志記錄添加到所述特定持久性改變?nèi)罩?;以?/p>
將所述第一寫入的指示從所述特定持久性改變?nèi)罩緜鞑サ剿龅谝粩?shù)據(jù)存儲區(qū)。
7.如條款6所述的方法,其中所述第一數(shù)據(jù)存儲區(qū)不支持用于包含一個以上寫入的操作集的原子性,其中由所述客戶端請求的所述事務包含針對第二數(shù)據(jù)對象的第二寫入,進一步包括通過所述一個或多個計算裝置來執(zhí)行:
繼確定所述請求事務將被提交之后,
將所述第二寫入的指示添加到所述特定持久性改變?nèi)罩?;以?/p>
將所述第二寫入的指示傳播到所述第一數(shù)據(jù)存儲區(qū)。
8.如條款6所述的方法,其中所述特定持久性改變?nèi)罩景ǘ鄠€副本節(jié)點,其中所述多個副本節(jié)點中的每一節(jié)點將所述日志記錄的副本存儲在各自存儲裝置處。
9.如條款8所述的方法,其中所述多個副本節(jié)點的每一副本節(jié)點為有向非循環(huán)圖(DAG)的成員,其具有相關(guān)聯(lián)的DAG配置管理器負責將DAG成員改變消息傳播到所述多個副本節(jié)點。
10.如條款8所述的方法,其中所述多個副本節(jié)點包含在提供商網(wǎng)絡(luò)的第一數(shù)據(jù)中心處的第一副本節(jié)點和在所述提供商網(wǎng)絡(luò)的第二數(shù)據(jù)中心處的第二副本節(jié)點。
11.如條款6所述的方法,其進一步包括通過所述一個或多個計算裝置來執(zhí)行:
根據(jù)所述第一寫入的所述結(jié)果來更新物化視圖。
12.如條款6所述的方法,其進一步包括通過所述一個或多個計算裝置來執(zhí)行:
至少部分基于所述第一寫入的所述結(jié)果來產(chǎn)生用于查詢的預計算結(jié)果;以及
響應于接收到所述查詢,提供所述預計算結(jié)果。
13.如條款6所述的方法,其進一步包括通過所述一個或多個計算裝置來執(zhí)行:
接收通過日志記錄服務注冊所述一個或多個數(shù)據(jù)存儲區(qū)用于事務管理的請求,其中所述實例化所述特定持久性改變?nèi)罩臼琼憫谧运鲆粋€或多個數(shù)據(jù)存儲區(qū)的所述請求。
14.如條款6所述的方法,其進一步包括通過所述一個或多個計算裝置來執(zhí)行:
響應于使用所述第一組數(shù)據(jù)訪問接口的針對所述第一數(shù)據(jù)存儲區(qū)的第一查詢,提供包含所述第一寫入的結(jié)果的響應;以及
響應于通過日志記錄服務的編程查詢接口的針對所述特定持久性改變?nèi)罩镜牡诙樵儯峁┌龅谝粚懭氲慕Y(jié)果的第二響應。
15.如條款6所述的方法,其中所述第一數(shù)據(jù)存儲區(qū)包括實施在提供商網(wǎng)絡(luò)處的網(wǎng)絡(luò)可訪問服務的控制平面配置信息,且其中所述事務包括所述網(wǎng)絡(luò)可訪問服務的特定資源的配置的改變。
16.如條款6所述的方法,其進一步包括通過所述一個或多個計算裝置來執(zhí)行:
通過與所述特定持久性改變?nèi)罩鞠嚓P(guān)聯(lián)的快照管理器來存儲所述特定持久性改變?nèi)罩镜闹辽僖徊糠值膬?nèi)容的時間點快照。
17.一種存儲程序指令的非暫時性計算機可訪問存儲介質(zhì),所述程序指令在被執(zhí)行于一個或多個處理器上時:
在日志記錄服務處接收客戶端所請求的事務的表示,其中所述事務包含針對存儲在第一數(shù)據(jù)存儲區(qū)處的數(shù)據(jù)對象的至少第一寫入;
至少部分基于所述表示的內(nèi)容至少部分基于特定持久性改變?nèi)罩镜膬?nèi)容來確定所述請求事務將被提交;
起始指示所述第一寫入的日志記錄到所述特定持久性改變?nèi)罩局械牟迦?;以?/p>
將所述第一寫入傳播到所述第一數(shù)據(jù)存儲區(qū)。
18.如條款17所述的存儲程序指令的非暫時性計算機可訪問存儲介質(zhì),其中由所述客戶端請求的所述事務包含針對第二數(shù)據(jù)對象的第二寫入,進一步包括通過所述一個或多個計算裝置來執(zhí)行:
繼確定所述請求事務將被提交之后,
起始所述第二寫入的指示到所述特定持久性改變?nèi)罩镜牟迦?;以?/p>
將所述第二寫入傳播到目的地數(shù)據(jù)存儲區(qū)。
19.如條款18所述的存儲程序指令的非暫時性計算機可訪問存儲介質(zhì),其中所述目的地數(shù)據(jù)存儲區(qū)是所述第一數(shù)據(jù)存儲區(qū),且其中所述第一數(shù)據(jù)存儲區(qū)不支持用于包含一個以上寫入操作的操作集的原子性。
20.如條款18所述的存儲程序指令的非暫時性計算機可訪問存儲介質(zhì),其中所述目的地數(shù)據(jù)存儲區(qū)是具有不同于所述第一數(shù)據(jù)存儲區(qū)的訪問接口的第二數(shù)據(jù)存儲區(qū)。
21.如條款17所述的存儲程序指令的非暫時性計算機可訪問存儲介質(zhì),其中所述特定持久性改變?nèi)罩景ǘ鄠€副本節(jié)點,其中所述多個副本節(jié)點中的每一復本節(jié)點將所述日志記錄的副本存儲在各自存儲裝置處。
22.如條款21所述的存儲程序指令的非暫時性計算機可訪問存儲介質(zhì),其中所述多個副本節(jié)點的每一副本節(jié)點為有向非循環(huán)圖(DAG)的成員,其具有相關(guān)聯(lián)的DAG配置管理器負責將DAG成員改變消息傳播到所述多個副本節(jié)點。
另外,鑒于以下額外條款,上述實施方案也可更好地理解:
1.一種系統(tǒng),其包括:
一個或多個計算裝置,其被配置來:
實例化包括用以復制特定應用的狀態(tài)信息的多個節(jié)點的狀態(tài)復制群組(SRG),其中所述SRG的至少一些節(jié)點存儲所述應用的各自提交記錄集,其中提交記錄集的每一提交記錄包括指示相對于其他狀態(tài)轉(zhuǎn)變來提交所述應用的狀態(tài)轉(zhuǎn)變的次序的提交序號(CSN),且其中所述SRG包括被配置來提交請求狀態(tài)轉(zhuǎn)變的提交者節(jié)點;
響應于已滿足閾值條件的檢測在所述提交者節(jié)點處確定所述SRG的狀態(tài)轉(zhuǎn)變處理操作將被暫停;
從所述提交者節(jié)點將指示存儲在所述提交者節(jié)點處的所述提交記錄集的所述CSN當中的最高提交序號(HCSN)的暫停請求傳輸?shù)剿鯯RG的容錯配置管理器;
將來自所述配置管理器的各自暫停命令傳輸?shù)剿鯯RG的包含第二節(jié)點的一個或多個其他節(jié)點,其中所述暫停命令指示所述HCSN;
響應于接收到來自所述配置管理器的暫停命令而暫停所述第二節(jié)點處的狀態(tài)轉(zhuǎn)變處理操作;
通過所述第二節(jié)點驗證所述第二節(jié)點的提交記錄集包含具有所述HCSN的提交記錄;以及
通過所述提交者節(jié)點和所述第二節(jié)點來延期狀態(tài)轉(zhuǎn)變操作的進一步處理,直到接收到來自所述配置管理器的重新激活消息為止。
2.如條款1所述的系統(tǒng),其中已滿足所述閾值條件的所述檢測包括確定度量在可接受范圍之外,其中所述度量包括以下各項中的一者或多者:(a)所述SRG的活動節(jié)點的數(shù)目;(b)從所述SRG的選定節(jié)點處的所述容錯配置管理器接收的SRG配置德爾塔消息的速率;或(c)與所述SRG的選定節(jié)點的客戶端連接數(shù)目。
3.如條款1所述的系統(tǒng),其中所述一個或多個計算裝置經(jīng)進一步配置來:
響應于接收到來自所述容錯配置管理器的所述暫停命令而通過所述第二節(jié)點確定在所述第二節(jié)點處的所述提交記錄集不包含包括HCSN的提交記錄;以及
通過所述第二節(jié)點從所述提交者節(jié)點請求包含包括所述HCSN的提交記錄的一個或多個提交記錄。
4.如條款1所述的系統(tǒng),其中所述第二節(jié)點包括在特定主機處的第一執(zhí)行線程,其中所述一個或多個計算裝置經(jīng)進一步配置來:
在驗證包括所述HCSN的所述提交記錄存儲在所述第二節(jié)點的提交記錄集中之后,重新啟動所述第一執(zhí)行線程。
5.如條款4所述的系統(tǒng),其中所述一個或多個計算裝置經(jīng)進一步配置來:
在已發(fā)送所述暫停命令之后通過所述容錯配置管理器確定,其提交記錄已被更新高達所述HCSN的可用SRG節(jié)點的數(shù)目超過閾值;以及
通過所述容錯配置管理器將包含所述SRG的目標配置的表示的各自重新激活請求傳輸?shù)狡涮峤挥涗浖驯桓赂哌_所述HCSN的每一節(jié)點。
6.一種方法,其包括:
通過一個或多個計算裝置執(zhí)行:
確定包括多個節(jié)點的狀態(tài)復制群組(SRG)的狀態(tài)轉(zhuǎn)變處理操作將被暫停,其中指定所述SRG復制包括應用的各自提交記錄集的狀態(tài)信息,其中所述提交記錄集的每一提交記錄具有指示在所述SRG處提交所述應用的對應狀態(tài)轉(zhuǎn)變的次序的相關(guān)聯(lián)提交序號(CSN);
識別所述SRG的一個或多個節(jié)點的提交記錄集將被同步高達的目標CSN;
將來自所述SRG的配置管理器的各自暫停命令傳輸?shù)剿鯯RG的所述一個或多個其他節(jié)點,其中所述暫停命令指示所述目標CSN;
通過所述一個或多個其他節(jié)點的特定節(jié)點驗證,對應于所述目標CSN的提交記錄存儲在所述特定節(jié)點的提交記錄集中;以及
通過所述特定節(jié)點暫停狀態(tài)轉(zhuǎn)變處理操作。
7.如條款6所述的方法,其中所述SRG的所述狀態(tài)轉(zhuǎn)變處理操作將被暫停的所述確定是響應于度量在可接受范圍之外的檢測,其中所述度量包括以下各項中的一者或多者:(a)所述SRG的活動節(jié)點的數(shù)目;(b)從所述SRG的選定節(jié)點處的所述配置管理器接收的SRG配置德爾塔消息的速率;或(c)與所述SRG的選定節(jié)點的客戶端連接數(shù)目。
8.如條款6所述的方法,其中在所述SRG的提交者節(jié)點處執(zhí)行所述SRG的所述狀態(tài)轉(zhuǎn)變處理操作將被暫停的所述確定,其中所述提交者節(jié)點負責提交所述應用的一個或多個請求狀態(tài)轉(zhuǎn)變,且其中所述目標CSN是所述提交者節(jié)點的所述提交記錄集的所述CSN當中的所述最高CSN。
9.如條款6所述的方法,其進一步包括在所述驗證之前通過所述一個或多個計算裝置來執(zhí)行:
響應于接收到來自所述配置管理器的暫停命令,通過所述特定節(jié)點確定在所述第二節(jié)點處的所述提交記錄集不包含對應于所述目標CSN的提交記錄;以及
通過所述特定節(jié)點從所述SRG的不同節(jié)點請求包含對應于所述目標CSN的提交記錄的一個或多個提交記錄。
10.如條款6所述的方法,其中所述特定節(jié)點包括在特定主機處的第一執(zhí)行線程,進一步包括通過所述一個或多個計算裝置來執(zhí)行:
繼所述暫停之后重新啟動所述第一執(zhí)行線程。
11.如條款6所述的方法,其進一步包括通過所述一個或多個計算裝置來執(zhí)行:
繼所述驗證之后在所述配置管理器處接收來自所述特定節(jié)點的所述特定節(jié)點已使其提交記錄集更新高達所述目標CSN的確認;以及
通過所述配置管理器將所述特定節(jié)點包含在所述SRG的最新節(jié)點的集合中。
12.如條款11所述的方法,其進一步包括通過所述一個或多個計算裝置來執(zhí)行:
繼所述暫停之后在所述配置管理器處接收來自所述SRG的第二多個節(jié)點的指示所述各自節(jié)點可用于服務的各自消息,其中所述第二多個節(jié)點包含提交者節(jié)點、所述特定節(jié)點和第三節(jié)點,;
通過所述配置管理器使用所述最新節(jié)點集合來確定所述第三節(jié)點的提交記錄集不包含對應于所述目標CSN的提交記錄;以及
通過所述配置管理器將所述目標CSN的指示傳輸?shù)剿龅谌?jié)點。
13.如條款12所述的方法,其進一步包括通過所述一個或多個計算裝置來執(zhí)行:
在所述配置管理器處接收所述第三節(jié)點的提交記錄集已被更新高達所述目標CSN的確認;
通過所述配置管理器確定,其提交記錄已被更新高達所述目標CSN的可用SRG節(jié)點的數(shù)目超過閾值;以及
通過所述配置管理器將包含所述SRG的目標配置的表示的各自重新激活請求傳輸?shù)狡涮峤挥涗浖驯桓赂哌_所述目標CSN的每一節(jié)點。
14.如條款6所述的方法,其中所述SRG的所述多個節(jié)點包括包含從接受器節(jié)點到提交者節(jié)點的復制路徑的有向非循環(huán)圖,進一步包括通過所述一個或多個計算裝置來執(zhí)行:
在所述狀態(tài)轉(zhuǎn)變處理操作將被暫停的所述確定之前在所述接受器節(jié)點處接收來自客戶端的提交所述應用的特定狀態(tài)轉(zhuǎn)變的請求;
在所述接受器節(jié)點處存儲指示已接受所述特定狀態(tài)轉(zhuǎn)變用于復制的記錄;
通過所述復制路徑將提交所述特定狀態(tài)轉(zhuǎn)變的所述請求從所述第二節(jié)點傳播到所述提交者節(jié)點;
通過所述提交者節(jié)點確定,指示所述特定狀態(tài)轉(zhuǎn)變已被存儲的各自記錄所在的所述SRG的節(jié)點數(shù)目高于復制閾值,以及
在所述提交者節(jié)點處存儲對應于所述特定狀態(tài)轉(zhuǎn)變的提交記錄。
15.如條款6所述的方法,其中所述應用包括以下各項中的一者:數(shù)據(jù)庫服務、日志記錄服務、或提供商網(wǎng)絡(luò)服務的控制平面部件。
16.一種存儲程序指令的非暫時性計算機可訪問存儲介質(zhì),所述程序指令在被執(zhí)行于一個或多個處理器上時:
確定目標提交序號(CSN),所述CSN將用以在狀態(tài)復制群組(SRG)處的應用狀態(tài)轉(zhuǎn)變處理操作的暫停之前使與所述SRG的多個節(jié)點當中的特定應用相關(guān)的狀態(tài)信息同步,其中所述多個節(jié)點包含第一節(jié)點和第二節(jié)點,其中所述第一節(jié)點和第二節(jié)點的每一節(jié)點存儲所述特定應用的各自提交記錄集,且其中所述集的每一提交記錄具有指示在所述SRG處提交所述對應狀態(tài)轉(zhuǎn)變的次序的相關(guān)聯(lián)的各自CSN;
通過所述SRG的配置管理器將所述目標CSN存儲在持久性存儲裝置處;
從所述配置管理器將指示所述目標CSN的各自暫停命令傳輸?shù)剿龅谝还?jié)點和所述第二節(jié)點中的至少一個節(jié)點;以及
響應于在所述配置管理器處接收的指示,繼在所述第一節(jié)點和所述第二節(jié)點處的操作的各自暫停之后,所述第一節(jié)點和所述第二節(jié)點可用于操作的恢復,
驗證其提交記錄集包含對應于所述目標CSN的提交記錄的所述SRG的可用節(jié)點的數(shù)目超過閾值;以及
將重新激活消息傳輸?shù)狡涮峤挥涗浖瑢谒瞿繕薈SN的提交記錄的可用節(jié)點的至少子集。
17.如條款16所述的非暫時性計算機可訪問存儲介質(zhì),其中所述指令在被執(zhí)行于所述一個或多個處理器處時:
從所述第一節(jié)點接收暫停所述應用狀態(tài)轉(zhuǎn)變處理操作的請求,其中所述第一節(jié)點是負責提交請求狀態(tài)轉(zhuǎn)變的提交者節(jié)點,且其中所述請求包括所述目標CSN。
18.如條款16所述的非暫時性計算機可訪問存儲介質(zhì),其中所述指令在被執(zhí)行于所述一個或多個處理器處時:
響應于度量在可接受范圍之外的檢測而確定暫停所述應用狀態(tài)轉(zhuǎn)變處理操作,其中所述度量包括以下各項中的一者或多者:(a)SRG的活動節(jié)點的數(shù)目;(b)從所述SRG的選定節(jié)點處的所述配置管理器接收的SRG配置德爾塔消息的速率;或(c)與所述SRG的選定節(jié)點的客戶端連接數(shù)目
19.如條款16所述的非暫時性計算機可訪問存儲介質(zhì),其中所述SRG的所述多個節(jié)點包括有向非循環(huán)圖。
20.如條款16所述的非暫時性計算機可訪問存儲介質(zhì),其中所述指令在被執(zhí)行于所述一個或多個處理器時利用共識協(xié)議來確定所述SRG的所述狀態(tài)轉(zhuǎn)變處理操作將被暫停。
另外,鑒于以下條款,上述實施方案可更好地理解:
1.一種系統(tǒng),其包括:
一個或多個計算裝置,其被配置來:
在經(jīng)實例化用于一個或多個數(shù)據(jù)存儲區(qū)的基于日志的事務管理器處接收來自客戶端的請求事務的事務描述符,其中對應于將被檢查而確定是否提交所述請求事務的第一邏輯約束,所述事務描述符指示(a)約束類型和(b)一個或多個數(shù)據(jù)簽名;
通過所述基于日志的事務管理器使用對應于存儲在特定持久性日志中的提交事務的至少一些事務記錄來確定,所述請求事務關(guān)于并發(fā)控制要求集是可提交的;
通過所述基于日志的事務管理器來識別存儲在所述特定持久性日志中的將被檢查而用于檢查所述第一邏輯約束的事務記錄的子集,
通過所述基于日志的事務管理器來比較所述一個或多個數(shù)據(jù)簽名的內(nèi)容與存儲在事務記錄的所述子集中的其他數(shù)據(jù)簽名;
通過所述基于日志的事務管理器至少部分基于一個或多個比較的結(jié)果來確定所述第一邏輯約束被所述請求事務滿足;以及
通過所述基于日志的事務管理器來提交所述請求事務。
2.如條款1所述的系統(tǒng),其中所述第一邏輯約束的所述約束類型是重復刪除,且其中為了確定所述第一邏輯約束被滿足,所述一個或多個計算裝置經(jīng)進一步配置來驗證所述事務描述符中所指示的所述一個或多個數(shù)據(jù)簽名的特定數(shù)據(jù)簽名與事務記錄的所述子集中存儲的數(shù)據(jù)簽名不匹配。
3.如條款1所述的系統(tǒng),其中所述第一邏輯約束的所述約束類型是提交順序,且其中為了確定所述第一邏輯約束被滿足,所述一個或多個計算裝置經(jīng)進一步配置來驗證所述事務描述符中所指示的所述一個或多個數(shù)據(jù)簽名的特定數(shù)據(jù)簽名與事務記錄的所述子集中存儲的數(shù)據(jù)簽名匹配。
4.如條款1所述的系統(tǒng),其中對應于將被檢查以確定是否提交所述請求事務的第二邏輯約束,所述事務描述符指示不同于所述第一邏輯約束的所述約束類型的第二約束類型。
5.如條款1所述的系統(tǒng),其中所述事務描述符至少包含第一定界符,所述第一定界符將用以識別將被檢查以檢查所述第一邏輯約束的事務記錄的所述子集。
6.一種方法,其包括:
通過一個或多個計算裝置執(zhí)行:
在基于日志的事務管理器處接收指示對請求事務的第一邏輯約束的事務描述符;
識別將被檢查而用于檢查所述第一邏輯約束的存儲在特定持久性日志中的事務記錄的子集,
比較所述事務描述符中所指示的一個或多個數(shù)據(jù)簽名的內(nèi)容與存儲在事務記錄的所述子集中的一個或多個數(shù)據(jù)簽名;
至少部分基于所述比較的結(jié)果來確定所述第一邏輯約束被所述請求事務滿足;以及
響應于確定已滿足所述請求事務的一個或多個提交要求,包含滿足所述第一邏輯約束的要求,提交所述請求事務。
7.如條款6所述的方法,其中所述第一邏輯約束包括重復刪除約束,其中所述事務描述符中所指示的所述一個或多個數(shù)據(jù)簽名包含表示所述請求事務的寫入操作所針對的位置的特定重復刪除簽名,且其中所述第一邏輯約束被所述請求事務滿足的所述確定包含驗證所述特定重復刪除簽名與存儲在事務記錄的所述子集中的另一重復刪除簽名不匹配。
8.如條款6所述的方法,其中所述第一邏輯約束包括提交順序約束,其中所述事務描述符中所指示的所述一個或多個數(shù)據(jù)簽名包括順序簽名,且其中所述邏輯約束被所述請求事務滿足的所述確定包括驗證所述特定順序簽名與存儲在事務記錄的所述子集中的另一順序簽名匹配。
9.如條款6所述的方法,其中所述事務描述符指示對所述請求事務的第二邏輯約束。
10.如條款9所述的方法,其中所述第一邏輯約束包括重復刪除約束,且所述第二邏輯約束包括提交順序約束。
11.如條款6所述的方法,其中所述一個或多個提交要求包括并發(fā)控制要求。
12.如條款6所述的方法,其中所述事務描述符至少包含第一定界符,所述第一定界符將用以識別將被檢查以檢查所述第一邏輯約束的事務記錄的所述子集。
13.如條款12所述的方法,其中所述第一定界符包括對應于特定事務的提交的邏輯時間戳,其中在所述接收所述事務描述符之前提交所述特定事務。
14.如條款12所述的方法,其中所述事務描述符指示第二邏輯約束,且其中所述事務描述符包括不同的定界符,所述不同的定界符將用以識別將被檢查以檢查所述第二邏輯約束的事務記錄的不同子集。
15.如條款6所述的方法,其中所述事務描述符包括指示所述請求事務的目標寫入位置的特定寫入簽名,其中所述一個或多個數(shù)據(jù)簽名包括對應于所述目標寫入位置的特定重復刪除簽名,其中所述特定重復刪除簽名不同于所述特定寫入簽名。
16.如條款6所述的方法,其中所述請求事務包含來自數(shù)據(jù)存儲區(qū)的一個或多個讀取,包括以下各項中的一者:(a)關(guān)系數(shù)據(jù)庫;(b)非關(guān)系數(shù)據(jù)庫;(c)存儲器內(nèi)數(shù)據(jù)庫;(d)實施web服務接口的存儲服務;(e)文件系統(tǒng);或(f)分布式高速緩沖存儲器的實例。
17.一種存儲程序指令的非暫時性計算機可訪問存儲介質(zhì),所述程序指令在被執(zhí)行于一個或多個處理器上時:
在基于日志的事務管理器處接收指示對請求事務的第一邏輯約束的事務描述符;
識別將被檢查而用于檢查所述第一邏輯約束的存儲在特定持久性日志中的事務記錄的子集,
比較所述事務描述符中所指示的一個或多個數(shù)據(jù)簽名的內(nèi)容與存儲在事務記錄的所述子集中的一個或多個數(shù)據(jù)簽名;
至少部分基于比較所述一個或多個數(shù)據(jù)簽名的所述內(nèi)容的結(jié)果來確定所述第一邏輯約束被所述請求事務滿足;以及
響應于已滿足所述請求事務的一個或多個提交要求的確定,包含滿足所述第一邏輯約束的要求,提交所述請求事務。
18.如條款17所述的存儲程序指令的非暫時性計算機可訪問存儲介質(zhì),其中所述第一邏輯約束包括以下各項中的一者:重復刪除約束或提交順序約束。。
19.如條款17所述的存儲程序指令的非暫時性計算機可訪問存儲介質(zhì),其中所述一個或多個一個或多個提交要求包括并發(fā)控制要求。
20.如條款17所述的存儲程序指令的非暫時性計算機可訪問存儲介質(zhì),其中所述事務描述符至少包含第一定界符,所述第一定界符將用以識別將被檢查以檢查所述提交順序約束的事務記錄的所述子集。
另外,鑒于以下條款,上述實施方案可更好地理解:
1.一種系統(tǒng),其包括:
一個或多個計算裝置,其被配置來:
至少部分基于從容錯有向非循環(huán)圖(DAG)配置管理器接收的配置德爾塔消息的第一序列而在指定復制應用的狀態(tài)的節(jié)點的DAG的第一非提交者節(jié)點處識別通往所述DAG的第一提交者節(jié)點的第一復制路徑的至少一部分,其中所述DAG的至少一個其他節(jié)點已接收來自所述容錯DAG配置管理器的配置德爾塔消息的不同序列;
從所述第一非提交者節(jié)點來傳輸用于在沿著所述第一復制路徑的一個或多個節(jié)點的各自本地存儲裝置處進行復制的狀態(tài)轉(zhuǎn)變消息,所述狀態(tài)轉(zhuǎn)變消息指示(a)通過客戶端請求的第一候選狀態(tài)轉(zhuǎn)變的批準,和(b)指示在所述第一非提交者節(jié)點處相對于其他候選狀態(tài)轉(zhuǎn)變而處理所述第一候選狀態(tài)轉(zhuǎn)變的次序的序號;
響應于通過所述容錯DAG配置管理器進行的所述第一復制路徑的特定節(jié)點將從所述DAG移除的確定,
起始指示所述特定節(jié)點從所述DAG的移除的各自配置德爾塔消息從所述容錯DAG配置管理器到所述DAG的一個或多個剩余節(jié)點的傳輸,無需指導所述一個或多個剩余節(jié)點暫停狀態(tài)轉(zhuǎn)變的處理。
2.如條款1所述的系統(tǒng),其中由所述一個或多個剩余節(jié)點中的第一剩余節(jié)點接收的特定配置德爾塔消息并不指示所述DAG的完整成員。
3.如條款1所述的系統(tǒng),其中所述容錯DAG配置管理器包括使用基于共識的協(xié)議來確定所述特定節(jié)點將從所述DAG移除的多個配置節(jié)點。
4.如條款1所述的系統(tǒng),其中所述一個或多個計算裝置經(jīng)進一步配置來:
響應于已創(chuàng)建所述候選狀態(tài)轉(zhuǎn)變的記錄的閾值數(shù)目的副本的確定而在所述第一提交者節(jié)點處存儲已提交所述候選狀態(tài)轉(zhuǎn)變的指示;
向至少所述第一非提交者節(jié)點通知已提交所述候選狀態(tài)轉(zhuǎn)變;以及
向所述客戶端通知已提交所述候選狀態(tài)轉(zhuǎn)變。
5.如條款1所述的系統(tǒng),其中配置德爾塔消息的所述第一序列包括第一配置德爾塔消息其后接著第二配置德爾塔消息,且其中配置德爾塔消息的所述第二序列包括所述第二配置德爾塔消息其后接著所述第一配置德爾塔消息。
6.一種方法,其包括:
通過一個或多個計算裝置執(zhí)行:
將對應于請求狀態(tài)轉(zhuǎn)變的狀態(tài)轉(zhuǎn)變消息從復制節(jié)點的有向非循環(huán)圖(DAG)的第一非提交者節(jié)點傳播到所述DAG的第一提交者節(jié)點,,其中所述狀態(tài)轉(zhuǎn)變消息包含指示相對于其他請求狀態(tài)轉(zhuǎn)變而批準所述請求狀態(tài)轉(zhuǎn)變的次序的序號;
響應于通過DAG配置管理器確定特定節(jié)點將被添加到所述DAG,起始指示所述特定節(jié)點到所述DAG的所述添加的配置德爾塔消息從所述DAG配置管理器到所述DAG的一個或多個其他節(jié)點的傳播,無需指導所述一個或多個其他節(jié)點暫停狀態(tài)轉(zhuǎn)變消息的處理。
7.如條款6所述的方法,其中所述配置德爾塔消息并不指示所述DAG的完整成員。
8.如條款6所述的方法,其進一步包括通過所述一個或多個計算裝置來執(zhí)行:
響應于通過所述DAG配置管理器確定將從所述DAG移除不同的節(jié)點,將指示所述不同節(jié)點從所述DAG的所述移除的第二配置德爾塔消息從所述DAG配置管理器傳播到所述DAG的至少第一剩余節(jié)點,無需指導所述第一剩余節(jié)點暫停狀態(tài)轉(zhuǎn)變消息的處理。
9.如條款8所述的方法,其中所述不同節(jié)點是所述第一剩余節(jié)點的直接前趨,其進一步包括:
在所述第一剩余節(jié)點處確定指示從所述不同節(jié)點接收的最近狀態(tài)轉(zhuǎn)變消息的最高接收序號;以及
至少部分基于所述最高接收序號來將傳輸具有在范圍內(nèi)的序號的狀態(tài)轉(zhuǎn)變消息的請求從所述第一剩余節(jié)點傳輸?shù)剿鯠AG的第二剩余節(jié)點,其中所述第二剩余節(jié)點在所述不同節(jié)點的移除之前是所述不同節(jié)點的直接前趨。
10.如條款6所述的方法,其中所述請求狀態(tài)轉(zhuǎn)變包括針對存儲在數(shù)據(jù)庫服務處的數(shù)據(jù)對象的寫入操作。
11.如條款6所述的方法,其中所述請求狀態(tài)轉(zhuǎn)變包括日志消息到日志記錄服務的特定日志中的插入。
12.如條款6所述的方法,其中所述DAG配置管理器包括多個配置節(jié)點,其中所述特定節(jié)點將被添加的所述確定包括通過所述多個配置節(jié)點來使用基于共識的協(xié)議。
13.如條款6所述的方法,其中所述一個或多個其他節(jié)點包含第一節(jié)點和第二節(jié)點,進一步包括通過所述一個或多個計算裝置來執(zhí)行:
在于所述第一節(jié)點處接收指示所述DAG的不同節(jié)點的移除的配置德爾塔消息之前,以及繼于所述第二節(jié)點處接收指示所述不同節(jié)點的所述移除的配置德爾塔消息之后:
通過所述不同節(jié)點接收來自所述第二節(jié)點的不同狀態(tài)轉(zhuǎn)變消息;
在所述不同節(jié)點處復制對應于所述不同狀態(tài)轉(zhuǎn)變消息的記錄;以及
通過所述不同節(jié)點將所述不同狀態(tài)轉(zhuǎn)變消息傳輸?shù)剿龅谝还?jié)點。
14.如條款6所述的方法,其進一步包括通過所述一個或多個計算裝置來執(zhí)行:
響應于已創(chuàng)建所述請求狀態(tài)轉(zhuǎn)變的表示的閾值數(shù)目的副本的確定而在所述第一提交者節(jié)點處存儲已提交所述請求狀態(tài)轉(zhuǎn)變的指示;
向至少所述第一非提交者節(jié)點通知已提交所述請求狀態(tài)轉(zhuǎn)變;以及
向從其接收實施所述狀態(tài)轉(zhuǎn)變的請求的客戶端通知已提交所述狀態(tài)轉(zhuǎn)變。
15如條款6所述的方法,其進一步包括通過所述一個或多個計算裝置來執(zhí)行:
實例化所述DAG的一個或多個備用節(jié)點;
在已于閾值數(shù)目的DAG節(jié)點處復制所述請求狀態(tài)轉(zhuǎn)變的各自表示之后,將所述狀態(tài)轉(zhuǎn)變消息傳輸?shù)剿鲆粋€或多個備用節(jié)點的特定備用節(jié)點;
在所述特定備用節(jié)點處存儲所述請求狀態(tài)轉(zhuǎn)變的記錄;以及
選擇所述特定備用節(jié)點作為用于以下各項中的一者的替代者:(a)所述DAG的失效非提交者節(jié)點;或(b)所述DAG的失效提交者節(jié)點。
16.如條款6所述的方法,其中所述第一非提交者節(jié)點包括在提供商網(wǎng)絡(luò)的第一數(shù)據(jù)中心處的第一主機處執(zhí)行的處理程序,且其中所述第一提交者節(jié)點包括在所述提供商網(wǎng)絡(luò)的不同數(shù)據(jù)中心處的不同主機處執(zhí)行的不同處理程序。
17.一種存儲程序指令的非暫時性計算機可訪問存儲介質(zhì),所述程序指令在被執(zhí)行于一個或多個處理器上時實施經(jīng)建立以復制狀態(tài)信息的DAG的特定節(jié)點,其中所述特定節(jié)點被配置來:
從DAG配置管理器接收多個配置德爾塔消息,其中所述多個配置德爾塔消息的特定配置德爾塔消息指示以下各項中的一者或多者:(a)節(jié)點到所述DAG的添加;或(b)節(jié)點從所述DAG的移除;
繼接收來自所述DAG配置管理器的特定配置德爾塔消息之后,指示已從所述DAG移除在所述特定節(jié)點處從其接收狀態(tài)轉(zhuǎn)變消息的直接前趨節(jié)點,
使用至少所述特定配置德爾塔消息來識別不同的直接前趨節(jié)點,以及
將用于狀態(tài)轉(zhuǎn)變消息的請求傳輸?shù)剿霾煌苯忧摆吂?jié)點。
18.如條款17所述的非暫時性計算機可訪問存儲介質(zhì),其中所述特定節(jié)點被配置來:
繼接收所述特定配置德爾塔消息之后且在接收用于狀態(tài)轉(zhuǎn)變消息的所述請求的響應之前,將特定狀態(tài)轉(zhuǎn)變消息傳輸?shù)剿鎏囟ü?jié)點的直接后繼節(jié)點。
19.如條款17所述的非暫時性計算機可訪問存儲介質(zhì),其中所述特定節(jié)點被配置來:
繼接收來自所述DAG配置管理器的不同配置德爾塔消息之后,指示已從所述DAG移除直接后繼節(jié)點,
使用至少所述不同配置德爾塔消息來識別不同的直接后繼節(jié)點,狀態(tài)轉(zhuǎn)變消息將從所述特定節(jié)點被發(fā)送到所述后繼節(jié)點,以及
起始與所述不同直接后繼節(jié)點的網(wǎng)絡(luò)連接的建立。
20.一種存儲程序指令的非暫時性計算機可訪問存儲介質(zhì),所述程序指令在被執(zhí)行于一個或多個處理器上時實施經(jīng)建立以復制狀態(tài)信息的節(jié)點的DAG的配置管理器,其中所述配置管理器被配置來:
至少部分基于共識協(xié)議來確定將從所述DAG移除所述DAG的特定節(jié)點,其中所述特定節(jié)點占據(jù)所述DAG內(nèi)的特定位置;
從存儲在所述配置管理器處的所述DAG的配置的持久性表示移除所述特定節(jié)點;以及
將指示所述特定節(jié)點已從所述DAG移除的配置德爾塔消息傳輸?shù)剿鯠AG的一個或多個剩余節(jié)點,無需請求所述一個或多個剩余節(jié)點暫停與所述應用的狀態(tài)轉(zhuǎn)變相關(guān)的處理。
21.如條款20所述的存儲程序指令的非暫時性計算機可訪問存儲介質(zhì),其中所述配置管理器被配置來:
響應于所述特定節(jié)點可用于服務作為所述DAG的成員的確定,
識別用于所述特定節(jié)點的所述DAG內(nèi)的不同位置;以及
將指示所述特定節(jié)點在所述DAG內(nèi)的所述不同位置處已被添加到所述DAG的另一配置德爾塔消息傳輸?shù)剿鯠AG的所述一個或多個剩余節(jié)點,無需請求所述一個或多個剩余節(jié)點暫停與所述應用的狀態(tài)轉(zhuǎn)變相關(guān)的處理。
22.如條款20所述的非暫時性計算機可訪問存儲介質(zhì),其中所述配置德爾塔消息并不指示所述DAG的完整成員。
23.如條款20所述的非暫時性計算機可訪問存儲介質(zhì),其中所述配置管理器被配置來:
識別在所述特定節(jié)點從所述DAG移除之前指派到所述特定節(jié)點的特定角色,其中所述角色包括以下各項中的一者:接受器節(jié)點、中間節(jié)點或提交者節(jié)點;以及
將所述特定角色指派到所述DAG的不同節(jié)點,其中所述不同節(jié)點包括以下各項中的一者:(a)所述特定節(jié)點在所述移除之前的后繼節(jié)點;或(b)所述DAG的備用節(jié)點。
另外,鑒于以下條款,上述實施方案可更好地理解:
1.一種存儲程序指令的非暫時性計算機可訪問存儲介質(zhì),所述程序指令在被執(zhí)行于一個或多個處理器上時:
在基于日志的事務管理器處接收來自客戶端的請求事務的事務描述符,其中所述事務描述符至少包括:(a)在所述請求事務期間從其讀取數(shù)據(jù)的源數(shù)據(jù)存儲區(qū)的第一提交狀態(tài)識別符(CSI);(b)指示在所述請求事務期間從其讀取數(shù)據(jù)的一個或多個對象的各自讀取簽名;以及(c)指示響應于所述請求事務的提交而將數(shù)據(jù)寫入到的一個或多個對象的各自寫入簽名;
通過所述基于日志的事務管理器使用所述第一CSI來識別存儲在特定持久性日志中的事務記錄的子集,所述特定持久性日志在提交所述請求事務之前將被檢查用于沖突,其中所述特定持久性日志包括對應于與包含所述源數(shù)據(jù)存儲區(qū)的一個或多個數(shù)據(jù)存儲區(qū)相關(guān)聯(lián)的先前提交事務的事務記錄,
響應于通過所述基于日志的事務管理器進行的所述請求事務的所述讀取簽名所指示的所述對象中沒有一者已被事務記錄的所述子集中所指示的寫入操作修改的確定,接受所述請求事務用于提交。
2.如條款1所述的非暫時性計算機可訪問存儲介質(zhì),其中包含在所述事務描述符中的特定讀取簽名包括從對應于從其讀取數(shù)據(jù)的所述一個或多個對象的一個或多個讀取位置的特定讀取位置產(chǎn)生的第一散列值,且其中包含在所述事務描述符中的特定寫入簽名包括從對應于將數(shù)據(jù)寫入到的一個或多個對象的一個或多個寫入位置的特定寫入位置產(chǎn)生的第二散列值。
3.如條款1所述的非暫時性計算機可訪問存儲介質(zhì),其中所述讀取簽名中所指示的所述一個或多個對象包括第一數(shù)據(jù)存儲區(qū)處的第一對象,其中所述CSI包括對應于所述第一數(shù)據(jù)存儲區(qū)處的先前提交事務的第一邏輯時間戳。
4.如條款1所述的非暫時性計算機可訪問存儲介質(zhì),其中所述讀取簽名中所指示的所述一個或多個對象包括第一數(shù)據(jù)存儲區(qū)處的第一對象和第二數(shù)據(jù)存儲區(qū)處的第二對象,其中所述CSI是至少部分基于以下各項來確定的:(a)對應于所述第一數(shù)據(jù)存儲區(qū)處的第一先前提交事務的第一邏輯時間戳;和(b)對應于所述第二數(shù)據(jù)存儲區(qū)處的第二先前提交事務的第二邏輯時間戳。
5.如條款1所述的非暫時性計算機可訪問存儲介質(zhì),其中所述事務描述符包括將被寫入到第一寫入位置的數(shù)據(jù)有效負載,其中所述指令在被執(zhí)行于所述一個或多個處理器處時:
繼用于提交的所述請求事務的接受之后,存儲對應于所述事務請求的事務記錄的一個或多個副本;
提供已提交所述請求事務的指示;以及
相對于已提交所述請求事務的所述指示異步地起始將所述數(shù)據(jù)有效負載傳播到所述第一寫入位置的操作。
6.一種方法,其包括:
通過一個或多個計算裝置執(zhí)行:
接收請求事務的事務描述符,其中所述事務描述符至少包括:(a)沖突檢查定界符;(b)指示在所述請求事務期間從其讀取數(shù)據(jù)的一個或多個對象的讀取集描述符;以及(c)指示響應于所述請求事務的提交而將數(shù)據(jù)寫入到的一個或多個對象的寫入集描述符;
使用所述沖突檢查定界符來識別存儲在特定持久性日志中的事務記錄的子集,所述特定持久性日志在提交所述請求事務之前將被檢查用于沖突,
響應于確定所述讀取集描述符中所指示的所述對象中沒有一者已被事務記錄的所述子集中所指示的寫入操作修改,接受所述請求事務用于提交。
7.如條款6所述的方法,其中所述讀取集描述符包括從對應于從其讀取數(shù)據(jù)的所述一個或多個對象的一個或多個讀取位置的特定讀取位置產(chǎn)生的第一散列值,且其中所述寫入集描述符包括從對應于將數(shù)據(jù)寫入到的所述一個或多個對象的一個或多個寫入位置的特定寫入位置產(chǎn)生的第二散列值。
8.如條款6所述的方法,其中所述沖突檢查定界符包括對應于特定事務的提交的邏輯時間戳,其中在所述接收所述事務描述符之前提交所述特定事務。
9.如條款6所述的方法,其中所述讀取集描述符中所指示的所述一個或多個對象包括在第一數(shù)據(jù)存儲區(qū)處的第一對象,進一步包括通過所述一個或多個計算裝置來執(zhí)行:
通過基于日志的事務管理器的客戶端側(cè)部件將對第一邏輯時間戳的第一請求遞交到所述第一數(shù)據(jù)存儲區(qū),所述第一邏輯時間戳對應于包含在所述第一數(shù)據(jù)存儲區(qū)處的所述第一請求的接收之前已應用到所述第一數(shù)據(jù)存儲區(qū)的最近寫入的先前提交事務;以及
通過所述客戶端側(cè)部件選擇所述第一邏輯時間戳作為所述沖突檢查定界符。
10.如條款9所述的方法,其中所述讀取集描述符中所指示的所述一個或多個對象包括在第二數(shù)據(jù)存儲區(qū)處的第二對象,進一步包括通過所述一個或多個計算裝置來執(zhí)行:
在所述客戶端側(cè)部件處從所述第二數(shù)據(jù)存儲區(qū)獲得第二邏輯時間戳,所述第二邏輯時間戳對應于包含已被應用到所述第二數(shù)據(jù)存儲區(qū)的不同寫入的不同的先前提交事務,其中所述不同寫入是在將所述第二邏輯時間戳提供到所述客戶端側(cè)部件之前已應用到所述第二數(shù)據(jù)存儲區(qū)的最近寫入;
其中所述選擇所述第一邏輯時間戳作為所述沖突檢查定界符包括確定所述第一邏輯時間戳小于所述第二邏輯時間戳。
11.如條款6所述的方法,其中所述事務描述符包括將被寫入到所述寫入集描述符中所指示的第一寫入位置的數(shù)據(jù)有效負載,進一步包括通過所述一個或多個計算裝置來執(zhí)行:
繼接受所述請求事務用于提交之后,存儲對應于所述事務請求的事務記錄的一個或多個副本;
提供已提交所述請求事務的指示;以及
相對于所述提供指示異步地計劃將所述數(shù)據(jù)有效負載寫入到所述第一寫入位置的操作。
12.如條款6所述的方法,其中所述讀取集描述符中所指示的所述一個或多個對象包括位于第一數(shù)據(jù)存儲區(qū)處的對象,且其中所述寫入集描述符中所指示的所述一個或多個對象包括位于不同數(shù)據(jù)存儲區(qū)處的另一對象。
13.如條款6所述的方法,其進一步包括:
接收請求只讀事務的第二事務描述符,其中所述第二事務描述符包括:(a)第二沖突檢查定界符;以及(b)指示在所述只讀事務期間從其讀取數(shù)據(jù)的一個或多個讀取位置的第二讀取集描述符;以及
響應于確定所述請求只讀事務的至少一個讀取位置對應于繼所述第二沖突檢查定界符所指示的操作之后而更新的寫入位置,提供已拒絕所述只讀事務的指示。
14.如條款6所述的方法,其進一步包括:
接收請求只寫事務的第二事務描述符,其中所述第二事務描述符包括指示將數(shù)據(jù)寫入到的特定寫入位置的第二寫入集描述符;
產(chǎn)生對應于所述只寫事務的提交的邏輯時間戳;
確定對應于在所述只寫事務尚未被計劃之前提交的特定事務中請求的寫入的至少一個寫入操作,以及
計劃所述至少一個寫入操作。
15.如條款6所述的方法,其中所述讀取集描述符和所述寫入集描述符中的至少一個描述符指示存儲在以下各項中的一者中的對象:非關(guān)系數(shù)據(jù)庫系統(tǒng)、關(guān)系數(shù)據(jù)庫系統(tǒng)、實施允許訪問非結(jié)構(gòu)化數(shù)據(jù)對象的web服務接口的存儲服務、存儲器內(nèi)數(shù)據(jù)庫或分布式高速緩沖存儲器的實例。
16.一種系統(tǒng),其包括:
一個或多個計算裝置,其被配置來:
接收來自客戶端的請求事務的事務描述符,其中所述事務描述符至少包括:(a)沖突檢查定界符;以及(b)指示在所述請求事務期間從其讀取數(shù)據(jù)的一個或多個讀取位置的讀取集描述符;
使用所述沖突檢查定界符來識別存儲在特定持久性日志中的事務記錄的子集,所述特定持久性日志在提交所述請求事務之前將被檢查用于沖突;以及
響應于確定所述請求事務的所述讀取位置沒有一者對應于事務記錄的所述子集中所指示的寫入位置,將新的事務記錄存儲在所述特定持久性日志中,從而指示已提交所述請求事務。
17.如條款16所述的系統(tǒng),其中所述事務描述符包括指示繼所述事務的提交之后將數(shù)據(jù)寫入到的一個或多個位置的寫入集描述符,其中所述新的事務記錄包括所述寫入集描述符的指示。
18.如條款17所述的系統(tǒng),其中所述一個或多個計算裝置經(jīng)進一步配置來:
相對于所述特定持久性日志中的所述新的事務記錄的插入異步地計劃將所述事務描述符中所指示的寫入有效負載傳播到所述寫入集描述符的所述一個或多個位置的第一寫入位置的操作。
19.如條款16所述的系統(tǒng),其中所述讀取集描述符包括從所述一個或多個讀取位置的特定讀取位置產(chǎn)生的第一散列值。
20.如條款16所述的系統(tǒng),其中所述沖突檢查定界符包括對應于特定事務的提交的邏輯時間戳。
總結(jié)
各個實施方案可進一步包含在計算機可訪問介質(zhì)上接收、發(fā)送或存儲根據(jù)前面的描述實施的指令和/或數(shù)據(jù)。一般來說,計算機可訪問介質(zhì)可包含存儲介質(zhì)或存儲器介質(zhì),諸如磁性或光學介質(zhì)(例如磁盤或DVD/CD-ROM)、易失性或非易失性介質(zhì)(諸如RAM(例如,SDRAM、DDR、RDRAM、SRAM等)、ROM等),以及經(jīng)由通信介質(zhì)(諸如網(wǎng)絡(luò)和/或無線鏈路)傳遞的傳輸介質(zhì)或信號,諸如電信號、電磁信號或數(shù)字信號。
如圖中所示出并且在本文中描述的各種方法表示方法的示例性實施方案。所述方法可在軟件、硬件或其組合中實施。方法的次序可改變,并且各種元素可添加、重新排序、組合、省略、修改等。
受益于本公開的本領(lǐng)域技術(shù)人員將清楚地知曉可做出各種修改和改變。本文旨在包含所有此類修改和改變,且因此,以上描述應視為具有說明性而非限制性意義。