国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      容錯分布式鎖定管理的制作方法

      文檔序號:6567587閱讀:237來源:國知局
      專利名稱:容錯分布式鎖定管理的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及分布式系統(tǒng),且更具體來說,涉及分布式互斥協(xié)議。
      技術(shù)背景現(xiàn)代計算機系統(tǒng)通常由處理數(shù)據(jù)的CPU、與其他計算機系統(tǒng)通信的聯(lián)網(wǎng)接口、及 -個或多個持久性存儲單元組成。所述系統(tǒng)可(例如)因電源故障、程序錯誤或硬件 故障等原因而停止處理。這種故障一般稱為進(jìn)程故障。持久性存儲單元能夠在修理所 述故障時保持?jǐn)?shù)據(jù)完整。一組所述計算機系統(tǒng)可經(jīng)聯(lián)網(wǎng)以形成群集。盡管網(wǎng)絡(luò)一般是可靠的,但偶然故障 可能出現(xiàn)而中斷某些節(jié)點或節(jié)點組之間的通信。這種通信中斷一般稱為網(wǎng)絡(luò)分割。每個節(jié)點均運行進(jìn)行讀取及寫入數(shù)據(jù)二者的事務(wù)性存儲系統(tǒng)(數(shù)據(jù)管理系統(tǒng))。 某些這種數(shù)據(jù)由在不同節(jié)點上操作的應(yīng)用程序同吋存取。為保證數(shù)據(jù)一致性,分布式 事務(wù)與鎖定管理技術(shù)用于管理及調(diào)節(jié)對所述數(shù)據(jù)的存取。然而,常規(guī)的分布式事務(wù)與 鎖定管理技術(shù)與多個問題相關(guān)聯(lián)。例如,常規(guī)系統(tǒng)通常會帶來差的鎖定轉(zhuǎn)移性能。更詳細(xì)地說,在數(shù)個程序爭奪相 同的共享資源時,必須盡可能快地將存取授權(quán)從一個程序及/或節(jié)點轉(zhuǎn)移到下一個。存 取授權(quán)必須保證公平度,以便所有程序均最終具有存取所述資源的機會,從而從活鎖 提供自由度。現(xiàn)有的分布式存儲器鎖定算法假設(shè)有序單播(也稱為點對點)消息接發(fā) 層(例如TCP/IP)的原始性,且通常通過跨越所述節(jié)點對通信路徑施加虛擬分級樹拓 撲來嘗試優(yōu)化對消息業(yè)務(wù)的使用。盡管在所屬技術(shù)領(lǐng)域已實現(xiàn)改進(jìn),但隨群集中的節(jié) 點數(shù)量增加,消息業(yè)務(wù)與相關(guān)聯(lián)處理成本及延時的增加會導(dǎo)致所有這些算法的性能隨節(jié)點數(shù)增加超過相對小的數(shù)量而急劇降級。常規(guī)系統(tǒng)還容易受到網(wǎng)絡(luò)或進(jìn)程故障的影響。網(wǎng)絡(luò)、計算機系統(tǒng)和運行于所述計 算機系統(tǒng)上的進(jìn)程會偶爾發(fā)生故障。在這種情形中,常規(guī)算法或停止工作(例如停止 對所有節(jié)點授予鎖定)或不正確地工作(例如,算法不能提供與其在無故障環(huán)境中所 提供的相同保證或語義,例如,在尚未釋放鎖定時將所述鎖定授予相同的節(jié)點)。常規(guī)系統(tǒng)還會為資源所有權(quán)轉(zhuǎn)移帶來差的可縮放性。在多數(shù)常規(guī)算法中,N個資 源的獲取及釋放會要求大量消息(最壞的情形是N*M,其中M是節(jié)點數(shù),但最好的 情形通常是log(N)或log(M))以將鎖定的所有權(quán)從一個節(jié)點成功轉(zhuǎn)移到另一個。另外, 分級鎖定所有權(quán)轉(zhuǎn)移會要求許多消息。在多數(shù)常規(guī)算法中,對分級鎖定(還稱為多顆 粒鎖定)的支持對每次獲取分布式資源所有權(quán)均要求多個消息。因此,需要更好的分布式事務(wù)與鎖定管理技術(shù)。發(fā)明內(nèi)容本發(fā)明的一個實施例提供一種具有多個節(jié)點的分布式鎖定管理系統(tǒng),所述節(jié)點分 別以通信方式耦合到網(wǎng)絡(luò)。所述系統(tǒng)在每個節(jié)點處均包含數(shù)據(jù)庫,其用于存儲由在一 個或多個所述節(jié)點處操作的應(yīng)用程序使用的資源。所述系統(tǒng)還在每個節(jié)點處包含容錯分布式鎖定管理器(FTDLM)模塊,其用于調(diào)節(jié)所述應(yīng)用程序?qū)Y源的存取。FTDLM 模塊針對每個資源具有1人列,所述隊列用于識別擁有所述資源的分布式鎖定的節(jié)點。 跨越所述節(jié)點復(fù)制每個隊列。系統(tǒng)還在每個節(jié)點處包含全序輸送裝置模塊,其用于以 通信方式將所述節(jié)點耦合到網(wǎng)絡(luò)并對節(jié)點之間的消息接發(fā)施加全排序協(xié)議。全序輸送 裝置模塊可集成到FTDLM模塊中,或單獨存在。在一個特定情形中,存儲于任一數(shù)據(jù)庫中的資源可由在不同節(jié)點上操作的應(yīng)用程序同時存取,且在甚至面臨進(jìn)程故障或 網(wǎng)絡(luò)分割時仍維持?jǐn)?shù)據(jù)一致性。FTDLM模塊中的隊列可以是(例如)FIFO隊列,且 每個對應(yīng)資源的分布式鎖定所有權(quán)被轉(zhuǎn)移到所述隊列中以FIFO次序識別的等待節(jié)點。 全序輸送裝置模塊可實施為(例如)擴(kuò)展虛擬同步輸送裝置。在一個特定情形中,全 序輸送裝置模塊利用網(wǎng)絡(luò)的多播能力,以便以排序保證傳遞消息。在另一特定情形中, 如果節(jié)點擁有資源的分布式鎖定,且無其他節(jié)點等待所述資源,則FTDLM模塊允許 所述資源上的無限量事務(wù)同時或連續(xù)運行。在另一特定情形中,如果節(jié)點X擁有資源 的分布式鎖定,且其他節(jié)點正等待所述資源,則FTDLM模塊允許所述資源上的預(yù)定 數(shù)量的未決事務(wù)運行及提交,且隨后釋放對分布式鎖定的所有權(quán)。在一個這種情形中, 一旦FTDLM模塊釋放對分布式鎖定的所有權(quán)則將節(jié)點X放置在所述隊列中,且在其 他節(jié)點完成對所述資源的使用后,節(jié)點X即刻重新獲取對所述分布式鎖定的所有權(quán)。 在將對資源的分布式鎖定所有權(quán)轉(zhuǎn)移到節(jié)點時,F(xiàn)TDLM模塊可允許正等待所述資源 的所有事務(wù)同時執(zhí)行。在提交在正使用分布式鎖定的節(jié)點處的所有事務(wù)后,F(xiàn)TDLM 模塊可保持對所述節(jié)點處所述鎖定的所有權(quán),直到或除非另一節(jié)點請求所述分布式鎖定。FTDLM模塊可使用調(diào)度來確保以一定的公平度將資源存取分布在所述節(jié)點上。 在正常的正向處理期間,可在瞬時存儲器中更新所述隊列。在一個這種情形中,所述 隊列是FIFO隊列,且在檢測到故障或從故障中恢復(fù)時將每個隊列的頂部要素復(fù)制到 持久性存儲裝置中及從持久性存儲裝置中讀取。FTDLM模塊可經(jīng)配置以通過單個多 播消息中數(shù)個分布式鎖定的分批入隊及出隊而在一個安全的全有序廣播中跨越各節(jié)點 獲取及釋放多個分布式鎖定。在一個這種情形中,使用單個多播消息進(jìn)行分級鎖定所 有權(quán)轉(zhuǎn)移。所述系統(tǒng)可利用全序輸送裝置的擴(kuò)展虛擬同步語義以實施基于成員關(guān)系定 額的故障恢復(fù)系統(tǒng),其中在每個節(jié)點處本地保留達(dá)成一致的成員關(guān)系。本發(fā)明的另一實施例提供-種用于調(diào)節(jié)具有多個節(jié)點的系統(tǒng)中的應(yīng)用程序?qū)Y 源的存取的分布式鎖定管理器模塊,其中所述多個節(jié)點分別以通信方式耦合到網(wǎng)絡(luò)。 所述模塊針對每個資源包含一隊列,所述隊列識別擁有所述資源的分布式鎖定的節(jié)點。 可跨越所述節(jié)點復(fù)制每個隊列。所述模塊還包含(或以操作方式耦合到)全序輸送裝 置模塊,其用于以通信方式將其節(jié)點耦合到網(wǎng)絡(luò),及對各節(jié)點之間的消息接發(fā)施加全 排序協(xié)議?;诒镜乇A舻某蓡T關(guān)系,所述模塊還可包含定額計算狀態(tài)機,其耦合到 所述全序輸送裝置模塊以在甚至面臨網(wǎng)絡(luò)分割及進(jìn)程故障時仍保證互斥。所述模塊還 可包含n個鎖定隊列狀態(tài)機,其中n是資源數(shù),每個鎖定隊列狀態(tài)機均用于維持所述 隊列并起始分布式鎖定的所有權(quán)轉(zhuǎn)移。所述模塊還可包含鎖定管理器狀態(tài)機,其用于 為請求存取一個或多個資源的應(yīng)用程序獲取分布式鎖定,并通知適合的鎖定隊列狀態(tài) 機處理所述請求。所述模塊可包含持久性存儲裝置,其用于在檢測到故障或從故障中 恢復(fù)時存儲指示當(dāng)前的鎖定所有權(quán)的隊列要素。在一個這種實施例中,且在其中所有 節(jié)點同時失效的情況下,所述模塊進(jìn)一步配置具有FPMS (正向處理成員組)能力, 借此每個進(jìn)入及退出定額狀態(tài)的節(jié)點保留一組可達(dá)到的節(jié)點,因此盡管完全丟失瞬時 狀態(tài)仍能實現(xiàn)故障恢復(fù)。在一個這種情形中,初始的先前定額是完全成員關(guān)系(所有 節(jié)點),且如果檢測到一組當(dāng)前可達(dá)到的節(jié)點已達(dá)到先前定額的大部分,則建立定額狀 態(tài)。如果其中發(fā)生故障的節(jié)點恢復(fù)并再附著到可操作群組,則模塊可通過使最新節(jié)點 向恢復(fù)節(jié)點發(fā)送必要數(shù)據(jù)來更新恢復(fù)節(jié)點的數(shù)據(jù)。在一個特定情形中,如果模塊的節(jié) 點擁有對資源的分布式鎖定,且無其他節(jié)點等待所述資源,則所述模塊允許所述資源 上的不限量事務(wù)同時或連續(xù)運行。在另一特定情形中,如果所述模塊的節(jié)點擁有對資 源的分布式鎖定,且其他節(jié)點正等待所述資源,則所述模塊允許所述資源上的預(yù)定數(shù) 量的未決事務(wù)運行及提交,且隨后釋放對所述分布式鎖定的所有權(quán)。在一個這種情形 中, 一旦所述模塊釋放對分布式鎖定的所有權(quán)則將模塊的節(jié)點放置在隊列中,且在其 他節(jié)點完成對所述資源的使用后,所述模塊的節(jié)點即刻重新獲取對所述分布式鎖定的 所有權(quán)。在將對資源的分布式鎖定所有權(quán)轉(zhuǎn)移到模塊的節(jié)點時,所述模塊可允許等待 所述資源的所有事務(wù)同時執(zhí)行。在提交正使用分布式鎖定的節(jié)點處的所有事務(wù)之后, 所述模塊可將對所述鎖定的所有權(quán)保持在所述節(jié)點處,直到或除非另一節(jié)點請求所述 分布式鎖定。所述模塊可允許在釋放分布式鎖定之前運行N個事務(wù)。根據(jù)本揭示內(nèi)容,所述模塊的其他結(jié)構(gòu)及功能將顯而易見(例如,類似于先前描述于分布式鎖定管理系 統(tǒng)中的模塊)。本發(fā)明的另一實施例提供一種用于調(diào)節(jié)具有多個節(jié)點的分布式數(shù)據(jù)庫系統(tǒng)中的 應(yīng)用程序?qū)Y源的存取的分布式鎖定管理器方法,其中所述多個節(jié)點分別以通信方式 耦合到網(wǎng)絡(luò)。所述方法包含針對每個資源提供一隊列,且基于隊列內(nèi)容識別擁有對 應(yīng)于所述隊列的資源的分布式鎖定的節(jié)點。所述方法進(jìn)一步包含跨越所述節(jié)點復(fù)制每 個隊列。所述方法進(jìn)一步包含對各節(jié)點之間的消息接發(fā)施加全排序協(xié)議。所述方法可 進(jìn)一步包含下列的一個或多個基于本地保留的成員關(guān)系,在甚至面臨網(wǎng)絡(luò)分割及進(jìn) 程故障時仍保證互斥;維持隊列并起始分布式鎖定的所有權(quán)轉(zhuǎn)移;及為請求存儲一個 或多個資源的應(yīng)用程序獲取分布式鎖定,并處理所述請求。本文所述特征及優(yōu)勢并非完全包含性的,且更確切地說,在參考所述圖示及說明 時,所屬技術(shù)領(lǐng)域的技術(shù)人員將對許多其他特征及優(yōu)勢顯而易見。此外,應(yīng)注意,本 說明書中使用的語言原則上是出于可讀性和指導(dǎo)性目的來選擇,而非是為限定本發(fā)明 性主題的范圍來選擇。


      圖1圖解說明一種用于根據(jù)本發(fā)明的一個實施例確定對分布式資源的鎖定是否適 合的方法。圖2是根據(jù)本發(fā)明的一個實施例配置的容錯分布式鎖定管理系統(tǒng)的框圖。 圖3是根據(jù)本發(fā)明的一個實施例配置的圖2所示容錯分布式鎖定管理器 (FTDLM)模塊的框圖。圖4是根據(jù)本發(fā)明的一個實施例配置的圖3所示鎖定管理器控制模塊的框圖。 圖5圖解說明根據(jù)本發(fā)明的一個實施例配置的圖4所示鎖定隊列狀態(tài)機。 圖6圖解說明根據(jù)本發(fā)明的一個實施例配置的圖4所示定額計算狀態(tài)機。 圖7圖解說明根據(jù)本發(fā)明的一個實施例配置的圖4所示鎖定管理器狀態(tài)機。
      具體實施方式
      本文揭示用以管理及調(diào)節(jié)對分布式數(shù)據(jù)的存取的分布式事務(wù)與鎖定管理技術(shù)。通 過本發(fā)明的一個或多個實施例,可分別消除或另外改進(jìn)關(guān)于鎖定轉(zhuǎn)移的低性能、對網(wǎng) 絡(luò)或進(jìn)程故障的敏感性、對資源所有權(quán)轉(zhuǎn)移的較差可縮放性、及分級鎖定所有權(quán)轉(zhuǎn)移 所需要的許多消息的前述問題。總述本發(fā)明實施例提供分布式及容錯事務(wù)與鎖定管理系統(tǒng)(在本文中一般稱為 FTDLM)的獨立設(shè)計。FTDLM可實施為(例如)決策支持系統(tǒng)(DSS)復(fù)制技術(shù)的 組件。在這種實施方案中,如根據(jù)本揭示內(nèi)容所了解,F(xiàn)TDLM能夠與系統(tǒng)的其他組件交互作用。本文揭示大量這種實施方案,其中移除對其他組件的所有依賴。所揭示 的設(shè)計及技術(shù)實現(xiàn)了分布式及容錯事務(wù)與鎖定管理系統(tǒng)的獨立實施方案。在一個實例性配置中,F(xiàn)TDLM實施分布式事務(wù)管理及資源的雙相鎖定(一般稱 為2PL),其中從分布且連接在網(wǎng)絡(luò)上的多個節(jié)點同時存取所述資源。每個節(jié)點均稱為 "成員",且一組節(jié)點稱為"協(xié)調(diào)群組"。本實例性配置假設(shè)所述節(jié)點中的每一者先前 已就構(gòu)成協(xié)調(diào)群組的成員關(guān)系的完整節(jié)點組達(dá)成一致。每個節(jié)點(或成員)均在持久 存儲裝置(可耐受進(jìn)程及功率故障)上本地存儲成員關(guān)系。多個應(yīng)用程序可同時使用 每個節(jié)點上的FTDLM。FTDLM的實例性配置實施標(biāo)準(zhǔn)的事務(wù)性雙相鎖定語義,且行為類似于典型的鎖 定管理器及事務(wù)管理器。這種組件的客戶端調(diào)用BeginTransaction()、經(jīng)由Lock()請求 對所述事務(wù)上下文內(nèi)的資源的專有存取、及經(jīng)由對TransactionCompleted()的調(diào)用來提 交所述交易。所述分布式鎖定可供在提交之后釋放。然而,不同于這些組件的常規(guī)實 施方案,F(xiàn)TDLM并不直接與類似于存取方法(其實施類似于B樹等設(shè)備以操縱數(shù)據(jù)) 或記錄管理器(用于以事務(wù)處理方式保留更新)等組件交互作用。如根據(jù)本揭示內(nèi)容 將顯而易見,可結(jié)合這些傳統(tǒng)組件以各種方式使用FTDLM。FTDLM設(shè)計用于正確操作以在甚至面臨進(jìn)程及網(wǎng)絡(luò)故障時仍保證互斥及2PL。 安全得到保證。另外,如果在殘存成員中可達(dá)到定額則FTDLM維持活性(繼續(xù)處理 的能力)在甚至發(fā)生故障時,在多數(shù)情況下仍能繼續(xù)獲取或釋放鎖定并開始及提交事 務(wù)。在修理這些硬件或軟件故障后,系統(tǒng)能夠?qū)⒒謴?fù)節(jié)點自動并入在線群組中而不必 使系統(tǒng)離線。FTDLM經(jīng)設(shè)計以盡可能地快,且利用例如有效的多播消息傳遞等基木 聯(lián)網(wǎng)硬件特性。應(yīng)注意,鎖定管理器的功能可經(jīng)隔離或另外獨立存在。例如,在一個特定實施例 中,如果需要則可在無容錯的情況下實施鎖定管理器。同樣,根據(jù)另一實施例配置的 容錯鎖定管理器可實施于非分布式系統(tǒng)中。鎖定的用戶模型及決策樹FTDLM的用戶模型可以多種方式實施,如根據(jù)本揭示內(nèi)容將顯而易見。在一個 特定實施例中,F(xiàn)TDLM經(jīng)由包含下列3個函數(shù)的簡明API向客戶端展示其所有功能 TransactionID BeginTransaction() 、 Lock(TmnsactionID, NameOfResource) 及 TransactionCompleted(TransactionID)。TransactionID BeginTransaction():本函數(shù)調(diào)用不涉及網(wǎng)絡(luò)操作艮因此有效執(zhí)行。 甚至在本地節(jié)點不是定額的一部分時,也允許對本函數(shù)的調(diào)用成功。這個邏輯在(例 如)其屮客戶端在更新數(shù)據(jù)而非在讀取數(shù)據(jù)時獲取專有鎖定的使用情形中是便利的。在這種情形中,所述邏輯在甚至未連接到定額時仍允許客戶端開始及提交只讀事務(wù)。Lock(TransactioniU, NameOfResource): FTDLM保證如果這個函數(shù)成功返回則專 有地獲得所述鎖定。圖1圖解說明根據(jù)本發(fā)明的一個實施例指定這個調(diào)用的精確行為 的決策樹圖。所述邏輯經(jīng)設(shè)計以便l)重復(fù)獲取同一鎖定不會要求網(wǎng)絡(luò)消息,2)中止在本地實例并不具有定額時更新數(shù)據(jù)的事務(wù),3)允許要求相同資源的多個事務(wù)同時本 地執(zhí)行(其中正確性由單獨的非分布式鎖定管理系統(tǒng)保證),4)甚至在貪心的節(jié)點絕不 放走資源時仍保證公平度;及5)通過實施借以允許針對每個鎖定轉(zhuǎn)移執(zhí)行N個事務(wù)的 "定額"來改進(jìn)性能。在圖l所示圖示中,采用統(tǒng)一制模語言(UML)準(zhǔn)則,其中圓圈表示決策問題, 箭頭是答案,而矩形是所產(chǎn)生的動作。如果函數(shù)拋出異常,則這個函數(shù)的用戶可(例 如)通過調(diào)用用戶的數(shù)據(jù)庫事務(wù)上的Rollback()而取消任何動作。如在圖中可見,所述 樹的第一個決策是本地節(jié)點是否在定額內(nèi)。如果否,則所產(chǎn)生的動作包含拋出異常以 使得客戶端退回所述事務(wù)。然而,如果本地節(jié)點在定額內(nèi),則下一決策包含確定所述 本地實例(例如,例如電子表格或字處理器等應(yīng)用程序)是否擁有分布式鎖定。如果 否,則所產(chǎn)生的動作包含請求分布式鎖定并進(jìn)行阻塞直到獲得鎖定。 一旦獲得鎖定, 則所產(chǎn)生的動作進(jìn)一步包含更新事務(wù)列表,且將控制返回到函數(shù)的用戶。然而,如果 所述本地實例確實擁有分布式鎖定,則下個決策包含確定是否存在對這個資源的"等 待者"(另一個本地/遠(yuǎn)程實例)。如果否,則所產(chǎn)生的動作包含更新所述事務(wù)列表,并 將控制返回到函數(shù)的用戶。然而,如果存在對所述資源的等待者,則下個決策包含確 定是否已達(dá)到定額。如果否,則所產(chǎn)生的動作包含更新事務(wù)列表,并將控制返回到所 述函數(shù)的用戶。然而,如果已達(dá)到定額,則所產(chǎn)生的動作包含放棄分布式鎖定、請求 鎖定、及進(jìn)行阻塞直到獲取鎖定。 一旦獲取鎖定,則所產(chǎn)生的動作進(jìn)一步包含更新事 務(wù)列表、及將控制返回到函數(shù)的用戶。TmnsactionCompleted(TransactionID):調(diào)用這個函數(shù)會通知FTDLM以便使其可釋放在事務(wù)中獲取的所有鎖定。在一個特定情形中,F(xiàn)TDLM并不協(xié)助用戶執(zhí)行或保留操作。相反'FTDLM實施 雙相鎖定語義,以便獲取并保證在從調(diào)用Lock()的時間返回到調(diào)用 TransactionCompleted()的時間內(nèi)維持資源的專有所有權(quán)。這些語義經(jīng)設(shè)計以便FTDLM 組件可與例如記錄管理器及存取方法等其他組件組合以實施分布式數(shù)據(jù)庫系統(tǒng)、分布 式復(fù)制系統(tǒng)及其他要求與高可靠性、可用性及性能互斥的應(yīng)用程序。系統(tǒng)架構(gòu)圖2是根據(jù)本發(fā)明的一個實施例配置的分布式鎖定管理系統(tǒng)的框圖。 如圖中可見,所述系統(tǒng)包含多個(N個)節(jié)點,所述節(jié)點分別以通信方式經(jīng)由全 序輸送裝置模塊耦合到網(wǎng)絡(luò)。每個節(jié)點均包含能夠執(zhí)行一個或多個可存取所述節(jié)點的 本地數(shù)據(jù)庫的應(yīng)用程序的處理系統(tǒng)。另外,來自一個特定節(jié)點的應(yīng)用程序可存取其他 節(jié)點的數(shù)據(jù)庫。因此,存儲于任一數(shù)據(jù)庫內(nèi)的資源可由在不同節(jié)點上操作的應(yīng)用程序 同時存取。每個數(shù)據(jù)庫本地的容錯分布式鎖定管理器(FTDLM)模塊經(jīng)編程或另外配 置以管理及調(diào)節(jié)對存儲于其中的資源的存取。甚至在面臨進(jìn)程故障或網(wǎng)絡(luò)分割時仍維 持?jǐn)?shù)據(jù)一致性?;仡櫼唤M包含數(shù)據(jù)庫復(fù)制品的節(jié)點在本文稱為一協(xié)調(diào)群組。每個節(jié)點的處理系統(tǒng)可以是任一類型的計算系統(tǒng),例如服務(wù)器、工作站、膝上型電腦或個人數(shù)字助理。盡管FTDLM模塊、應(yīng)用程序及每個節(jié)點的數(shù)據(jù)庫的每一者均 在本實例性實施例中顯示為離散組件,但也可使用其他配置。例如,這些組件的任一 者或全部均可經(jīng)編程或另外集成到所述處理系統(tǒng)中。同樣,全序輸送裝置模塊可集成 到FTDLM模塊中(例如,如圖4中顯示)。常規(guī)或定制的聯(lián)網(wǎng)及/或進(jìn)程間協(xié)議及技 術(shù)可用于實現(xiàn)任一節(jié)點內(nèi)的各組件之間以及各節(jié)點之間的通信。另外,可為節(jié)點內(nèi)及 節(jié)點間通信使用有線及/或無線技術(shù)。任一節(jié)點內(nèi)的每個應(yīng)用程序均存取其本地數(shù)據(jù)庫以及存取其他節(jié)點的數(shù)據(jù)庫。一 般來說,應(yīng)用程序是可以讀取、添加、刪除、修改、更新或另外操縱存儲在包含于分 布式系統(tǒng)內(nèi)的一個或多個數(shù)據(jù)庫中的數(shù)據(jù)的任--程序或系統(tǒng)。應(yīng)用程序可以是(例如) 由用戶激活(例如銀行業(yè)或會計學(xué)軟件)或由系統(tǒng)(例如經(jīng)編程而每天自動運行的存 貨控制軟件)自動激活的。每個節(jié)點的數(shù)據(jù)庫存儲由一個或多個應(yīng)用程序使用的資源。數(shù)據(jù)庫的組織可以是 相同(例如,所有相關(guān)數(shù)據(jù)庫)或不同(例如,某些相關(guān)及某些面向?qū)ο蟮臄?shù)據(jù)庫) 的。本文可使用數(shù)據(jù)存儲設(shè)備的任一類型或組合。全序輸送裝置模塊對全局模型內(nèi)的所有數(shù)據(jù)項目施加排序,且可使用常規(guī)的全序 技術(shù)來實施。在一個特定實施例中,根據(jù)約翰斯'霍普金斯大學(xué)(Johns II叩kins University)計算機科學(xué)學(xué)院的YairAmir禾口 Ciprian Tutu的"從全序到數(shù)據(jù)庫復(fù)制(From Total Order to Database Replication)"所描述來實施全序輸送裝置模塊。同樣,可根據(jù) 加利福尼亞大學(xué)圣芭芭拉分校(University of California at Santa Barbara)電子與計算機 工程系的L. E. Moser、 Y. Amir、 P. M. Mdliar-Sm池和D. A. Agarwal的"擴(kuò)展虛擬同 步(Extended Virtual Synchrony)"所描述來實施全序輸送裝置模塊。應(yīng)注意,這些論 文均可在線獲得,且還包含于先前并入的第60/671,373號美國臨時申請案的附錄B中。 進(jìn)一步應(yīng)注意,擴(kuò)展虛擬同步輸送裝置是全序輸送裝置模塊的一個具體實施方案。不同于常規(guī)的分布式鎖定管理技術(shù),本發(fā)明的一個實施例利用多播通信協(xié)議,因 此實現(xiàn)顯著性能及可縮放性優(yōu)勢,且改進(jìn)鎖定轉(zhuǎn)移問題的較差性能。與使用多播協(xié)議 將消息傳遞到N個節(jié)點相關(guān)聯(lián)的成本(成本是O(l))明顯小于使用單播勸、議將同一消 息傳遞到N個節(jié)點的成本(成本是O(n))。已發(fā)展虛擬同步全有序輸送裝置,其使用 常用聯(lián)網(wǎng)硬件(例如以太網(wǎng))的多播能力以某種排序保證及以在出現(xiàn)進(jìn)程或網(wǎng)絡(luò)故障 時良好定義的語義來有效及可縮放地傳遞消息。在本發(fā)明的一個特定實施例中,Leslie Lamport的分布式鎖定算法(一般稱為Bakery算法)經(jīng)修改以利用全有序輸送裝置的 功率,因此實施穩(wěn)健的分布式鎖定與事務(wù)管理。此外,本發(fā)明實施例可經(jīng)配置以通過利用由虛擬同步輸送裝置提供的故障語義來 實施基于定額(加權(quán)的多數(shù)表決合意)的故障恢復(fù)系統(tǒng)而消除或另外減少對網(wǎng)絡(luò)或進(jìn) 程故障問題的敏感性。另外,在許多情形中,僅要求l個多播消息傳輸以在M個成員 間轉(zhuǎn)移N個資源的所有權(quán)。這種實施例會解決資源所有權(quán)轉(zhuǎn)移的較差可縮放性問題。 這種單個多播消息技術(shù)可經(jīng)擴(kuò)展以還解決分級鎖定所有權(quán)轉(zhuǎn)移問題所需要的許多消息。
      如先前解釋,每個數(shù)據(jù)庫本地的FTDLM模塊操作以管理及調(diào)節(jié)對存儲于其中的 資源的存取。下文將參照圖3-7而更詳細(xì)地論述FTDLM模塊及其結(jié)合全有序輸送裝 置模塊的使用。
      容錯分布式鎖定管理器(FTDLM)
      圖3是根據(jù)本發(fā)明的一個實施例配置的圖2所示容錯分布式鎖定管理器 (FTDLM)模塊的框圖。如圖中可見,F(xiàn)TDLM模塊包含多個FIFO隊列(針對M個 資源的每一者存在一個隊列)及一鎖定管理器控制模塊。如下文參照圖4-7詳細(xì)論述, 所述鎖定管理器控制模塊一般控制FTDLM模塊的功能。在一個這種實施例中,F(xiàn)TDLM 與軟件(例如,在處理器上執(zhí)行或在處理器可讀媒體上進(jìn)行編碼的指令組) 一起實施。 另一選擇為,F(xiàn)TDLM可實施于(例如)硬件(例如,門級邏輯)或硬件與軟件的組 合(例如,具有多個用于實施本文所述功能的嵌入式例程的微控制器)。
      在協(xié)調(diào)群組(或節(jié)點組)中,每個成員(或節(jié)點)均具有對與其相關(guān)聯(lián)的唯一識 別符的持久記錄。另外,每個成員還具有對所述協(xié)調(diào)群組中其他成員的唯一識別符的 持久記錄。這些唯-識別符被指定為圖3所示"請求節(jié)點ID"。應(yīng)注意,這個成員關(guān) 系信息可使用常規(guī)技術(shù)來分布及保留。因此,在執(zhí)行FTDLM時,假設(shè)唯一識別的成 員列表的內(nèi)容在l辦調(diào)群組的所有成員上是相同的。
      圖2所示實例性實施例的FTDLM是點對點設(shè)計,其中不存在擁有鎖定所有權(quán)的 權(quán)威記錄的群集的集中式組件。每個成員均執(zhí)行包含于圖3所示(且參照圖4-7更詳 細(xì)論述)FTDLM模塊中的狀態(tài)機的對稱實例。在每個成員處執(zhí)行的邏輯均相同,但 提供與單權(quán)限鎖定管理器設(shè)計所提供的互斥保證相同的互斥保證,而在性能及容錯方 面具有某些優(yōu)勢。在一個特定實施例中,且為了確保卨性能,在正常操作期間的所有 數(shù)據(jù)結(jié)構(gòu)均駐留于瞬時存儲器中。在發(fā)生故障或從故障中恢復(fù)時,保留瞬時數(shù)據(jù)結(jié)構(gòu) 的一部分以確保在發(fā)生故障時的高度可靠性。
      如參照圖3可見,每個分布式鎖定(也就是可由所述系統(tǒng)存取的每個數(shù)據(jù)源)均 與FIFO隊列相關(guān)聯(lián)。所述隊列的每個要素均含有節(jié)點的唯一識別符("請求節(jié)點ID")。 隊列頂部的節(jié)點("第一位置")擁有分布式鎖定。所述隊列中列出的其他成員(第二 位置、第三位置、第四位置等)正等待所述鎖定。以FIFO次序轉(zhuǎn)移所述鎖定??山?jīng) 由本文所述算法而跨越所述協(xié)調(diào)群組的各節(jié)點復(fù)制每個隊列。
      在一個實施例中,F(xiàn)TDLM會影響虛擬同步輸送裝置的能力。在進(jìn)程或網(wǎng)絡(luò)失敗 的情形中,F(xiàn)TDLM適合地起反應(yīng)以保證與無故障操作相同的語義。FTDLM可經(jīng)配置 以實施數(shù)個性能優(yōu)化。例如,如果節(jié)點"3"在隊列頂部且隊列尺寸為1 (也就是在隊 列屮僅有一個要素),則允許無限量的事務(wù)同時或連續(xù)運行。如果節(jié)點"3"在隊列頂 部且隊列大小大于l (也就是說,在隊列的后續(xù)要素中存在等待者),則允許在阻塞剩 余事務(wù)時運行及提交預(yù)定數(shù)量的"n"個未決事務(wù)。在所述"n"個事務(wù)均提交后,釋 放所述分布式鎖定。這個功能實現(xiàn)了多個所需特性,例如通過增加針對每次逐節(jié)點的分布式鎖定轉(zhuǎn)移 而完成的工作量來實現(xiàn)性能提高。同樣,通過確保極主動的成員釋放所述鎖定以便其 他節(jié)點可使用所述鎖定來提高公平度。在一個特定實施例中,出丁-性能的原因(例如, 提供更快的存取)而在瞬時存儲器中存儲及更新所述隊列。出于可靠性的原因,如依 次將論述,隊列的頂部要素可被復(fù)制到持久性存儲裝置,并在檢測到故障或從故障進(jìn) 行恢復(fù)時從持久性裝置讀取。
      如根據(jù)本揭示內(nèi)容將理解,F(xiàn)TDLM無需了解正被同步的資源類型,或用于保留 數(shù)據(jù)的存儲格式。FTDLM的客戶端會看到獨立的具有客戶端可在適當(dāng)時使用的簡單 API及清晰語義的分布式事務(wù)與鎖定管理組件。在不存在故障時,F(xiàn)TDLM的行為是典 型針對實施全雙相鎖定的保守型鎖定管理器。然而,鎖定管理器中的容錯并非微不足 道,且因此將更詳細(xì)描述FTDLM在故障下的行為。
      一般來說,且參照FTDLM的一個實施例的進(jìn)程故障語義,如果應(yīng)用程序進(jìn)程繼 續(xù)但FTDLM狀態(tài)機發(fā)生故障,則應(yīng)用程序塊等待直到FTDLM狀態(tài)機終止及重啟。 在重啟后,F(xiàn)TDLM狀態(tài)機包含邏輯,所述邏輯使用持久本地存儲裝置及來自其他操 作成員的信息的組合恢復(fù)其正確的內(nèi)部狀態(tài)。在恢復(fù)后,F(xiàn)TDLM狀態(tài)機再繼續(xù)正確 的操作。在某些情形中,未決事務(wù)將終止,且期望應(yīng)用程序重試所述事務(wù)。因此,在 這種故障類型中,應(yīng)用程序一般會看到來自Lock()的極慢響應(yīng)、逾時、或拋出異常(所 述應(yīng)用程序?qū)⒒诖水惓6卦嚻涫聞?wù))。如果應(yīng)用程序和FTDLM均突然終止,則在 這兩個組件都重啟時操作將再繼續(xù)。
      參照FTDLM的一個實施例的網(wǎng)絡(luò)分割語義,當(dāng)網(wǎng)絡(luò)分割和本地成員(對應(yīng)用程 序來說)均具有定額時,正執(zhí)行事務(wù)的應(yīng)用程序可在FTDLM重新建立定額并從故障 中恢復(fù)時的輕微暫停(例如,Lock()調(diào)用將造成比iH常情況更長的阻塞)之后繼續(xù)執(zhí) 行。如果FTDLM狀態(tài)機不能建立定額,則所有APT均將拋出異常。這個行為繼續(xù), 直到本地成員能夠重新建立定額(通常是因為分割已結(jié)束)。
      根據(jù)本發(fā)明實施例配置的FTDLM具有下列8個屬性的一個或多個。
      屬性#1: FTDLM與數(shù)據(jù)庫系統(tǒng)的其他要素的分離-在一個實施例中,F(xiàn)TDLM與 數(shù)據(jù)庫系統(tǒng)的其他要素(例如存取方法及記錄管理器)分離以提高應(yīng)用程序通用性、 接口模塊度、及FTDLM與本地鎖定管理器之間的協(xié)同,以實現(xiàn)高的集合系統(tǒng)性能及 吞吐量。
      屬性#2:全有序輸送裝置的使用-FTDLM實施例使用全有序輸送裝置來影響高性 能全排序協(xié)議,所述高性能全排序協(xié)議在各成員之間分布消息確認(rèn)負(fù)載以獲得更大的 可縮放性,且實施流水線式消息全排序以獲得更大吞吐量。此外,F(xiàn)TDLM可利用基 本硬件(例如實現(xiàn)多播的以太網(wǎng)或其他網(wǎng)絡(luò)特性)的多播能力以獲得更大的可縮放性 及性能。
      屬性#3:單分布式鎖定轉(zhuǎn)移-FTDLM實施例經(jīng)配置以便在向本地成員轉(zhuǎn)移適合的 分布式鎖定時,在每個成員上,準(zhǔn)許所有等待所述資源的事務(wù)同時執(zhí)行。這允許單個分布式鎖定轉(zhuǎn)移實現(xiàn)許多同時事務(wù)的執(zhí)行。執(zhí)行在同一節(jié)點上的所有這些事務(wù)可能潛 在地需要由常規(guī)的本地鎖定管理器串行化。這種邏輯封裝在鎖定隊列狀態(tài)機(圖4及 5)和鎖定管理器狀態(tài)機(圖4及7)中。
      屬性#4:粘附鎖定-如果假設(shè)其中已使用某種資源的成員比其他成員更可能再次使 用所述同一資源,貝IJFTDLM的一個實施例會實施"粘附鎖定"。更詳細(xì)地,在提交所 有正使用鎖定的事務(wù)后,F(xiàn)TDLM使所有權(quán)保持在所述成員處直到(或除非)另一成 員請求所述鎖定(或已請求所述鎖定)。這允許一個成員重復(fù)獲取鎖定以快速執(zhí)行而無 網(wǎng)絡(luò)開銷。FTDLM通過將事務(wù)的鎖定所有權(quán)和成員的鎖定所有權(quán)去耦并分別以不同 方式進(jìn)行優(yōu)化來實現(xiàn)這一目的。這種邏輯封裝在鎖定隊列狀態(tài)機(圖4及5)中。
      屬性#5:用于分布公平的調(diào)度算法-還可以將調(diào)度算法并入FTDLM的實施例以確 保甚至在節(jié)點重復(fù)地及持續(xù)不斷地請求資源時,仍出于分布公平目的而將專有存取正 確分布給其他成員(以FIFO次序)。可根據(jù)需要設(shè)定公平度。這種邏輯封裝在鎖定隊 列狀態(tài)機(圖4及5)中。
      屬性#6:出于公平目的而對定額的使用-FTDLM實施例允許在出于公平目的而放 棄鎖定之前運行許多("定額")交易。更詳細(xì)地,在多個參與方爭奪同一鎖定時,許 多常規(guī)設(shè)計會因為恒定的鎖定轉(zhuǎn)移而出現(xiàn)性能降級,且每個鎖定轉(zhuǎn)移均會導(dǎo)致少量計 算。這種邏輯封裝在鎖定隊列狀態(tài)機(圖4及5)中。
      屬性#7:瞬時存儲器的使用-FTDLM在正常的正向處理(例如,獲取及釋放鎖定; 開始及提夂事務(wù))期間僅存取瞬時存儲器。常規(guī)的容錯系統(tǒng)使用持久存儲裝置以在出 現(xiàn)進(jìn)程故障的情況下提供可靠性。然而,由于對持久存儲裝置的存取明顯慢于對瞬時 存儲器的存取,則FTDLM實施例經(jīng)設(shè)計以將對持久存儲裝置的存取最小化。這允許 FTDLM以比典型的持久型設(shè)計高得多的性能來操作。參照定額計算狀態(tài)機(圖4及6) 和鎖定管理器狀態(tài)機(圖4及7)來提供如何在甚至沒有恒定的持久存儲裝置存取時 仍維持容錯的說明。
      屬性#8:使用全有序廣播來獲取/釋放成員間的多個分布式鎖定-FTDLM實施例能 夠通過將一個消息中的數(shù)個鎖定成批入隊及出隊來獲取及釋放安全全有序廣播中各成 員間的多個分布式鎖定。這種設(shè)計捕獲于鎖定隊列狀態(tài)機(圖4及5)中,其使用分 布式鎖定的所有權(quán)移動算法的分離及鎖定對事務(wù)的關(guān)聯(lián)性。
      容錯-進(jìn)程及網(wǎng)絡(luò)故障
      除上文列舉的關(guān)于性能的屬性外,F(xiàn)TDLM實施例經(jīng)配置以具有容忍進(jìn)程及網(wǎng)絡(luò) 故障二者的能力。在這里,術(shù)語"容忍"涉及在面臨故障時繼續(xù)處理的能力以及在故 障結(jié)束后執(zhí)行在線恢復(fù)的能力。出于概念清晰的目的,所述故障可分為兩類因單點 進(jìn)程故障導(dǎo)致的故障(例如進(jìn)程失效、電源故障等),及因其中某些成員不能與其他成 員通信的網(wǎng)絡(luò)故障導(dǎo)致的故障(例如網(wǎng)絡(luò)分割)。
      參照進(jìn)程故障容錯,且根據(jù)一個實施例,在準(zhǔn)許Lock()或TransactionCompleted() 成功之前必須建立定額。實例性定額邏輯封裝于定額計算狀態(tài)機(圖4及6)中。在一個特定實例中,如果檢測到當(dāng)前可達(dá)到的成員組占先前定額的大多數(shù),則建立定額。 這允許更易于定額建立。初始的"先前定額"是完整的成員關(guān)系。如果其中發(fā)生故障 的成員恢復(fù)并重附著到在線的可操作群組,則鎖定管理器狀態(tài)機(圖4及7)中的邏 輯通過使最新成員向恢復(fù)成員發(fā)送必要的狀態(tài)信息來更新恢復(fù)成員的數(shù)據(jù)結(jié)構(gòu)。這種 恢復(fù)算法有效且利用擴(kuò)展虛擬同步輸送裝置的性質(zhì)。為避免在其中所有成員同時失效 的相對稀有情形中出現(xiàn)忘記鎖定隊列的情況,鎖定管理器狀態(tài)機(圖4及7)可配置 有FPMS (正向處理成員組)邏輯,借此每個成員在進(jìn)入及退出定額狀態(tài)時保留可達(dá) 到的成員組。
      關(guān)于網(wǎng)絡(luò)分割容錯,且根據(jù)一個實施例,在將成員群組(稱為"配置")劃分為 較小配置時,定額可再次用于確保僅一個配置具有進(jìn)行更新的能力。甚至在某些成員 不能與其他成員通信時,這仍確?;コ獗WC。為確保在進(jìn)程故障與網(wǎng)絡(luò)分割故障的組 合期間不忘記鎖定狀態(tài),F(xiàn)TDLM實施例包含分片保留邏輯,其實施于定額計算狀態(tài) 機(圖4及6)中,借以在故障及恢復(fù)期間于某些點處保留鎖定隊列的所有者。
      鎖定管理器控制
      圖4是根據(jù)本發(fā)明的-個實施例配置的圖3所示鎖定管理器控制模塊的框圖。如 圖中可見,F(xiàn)TDLM使用3個交互作用的狀態(tài)機(定額計算狀態(tài)機、鎖定管理器狀態(tài) 機及鎖定隊列狀態(tài)機)、持久性存儲裝置和全序輸送裝置模塊(例如,擴(kuò)展虛擬同步輸 送裝置或其他適合的全序輸送裝置)來實施鎖定管理器控制功能。還顯示鎖定管理器 控制模塊的數(shù)據(jù)流。根據(jù)本揭示內(nèi)容,各種變化形式將顯而易見。例如,擴(kuò)展虛擬同 步輸送裝置可在鎖定管理器控制模塊外部實施(例如,如圖2中顯示),如可為持久性 存儲裝置。
      FTDLM的每個實例均具有鎖定管理器狀態(tài)機的一個實例、擴(kuò)展虛擬同步輸送裝 置的一個實例、定額計算狀態(tài)機的一個實例、及鎖定隊列狀態(tài)機的n個實例(要求分 布式鎖定問步化的n個資源的每一者對應(yīng)一個)。這些狀態(tài)機使用在圖4所示數(shù)據(jù)流中
      指定的接口互相通信。這些狀態(tài)機的集合行為實施在本專利中主張的功能。
      同樣描繪于圖4中的數(shù)據(jù)流圖示范各種狀態(tài)機組件之間的關(guān)系。組件均以方框標(biāo) 記,且數(shù)據(jù)流均以箭頭標(biāo)記。箭頭方向指示數(shù)據(jù)流而非控制流。箭頭的標(biāo)簽顯示在各 組件之間流動的消息類型。盡管所述圖式描繪僅一個應(yīng)用程序及一個鎖定隊列狀態(tài)機, 但可以存在同時運行的許多應(yīng)用程序?qū)嵗霸S多鎖定隊列狀態(tài)機實例。
      擴(kuò)展虛擬同步輸送裝置(其還可稱為全序輸送裝置,或在本文中簡稱為輸送裝置) 以良好定義的排序保證來檢測當(dāng)前可達(dá)到的成員組(例如,如先前并入的約翰斯'霍普 金斯大學(xué)(Johns Hopkins University )計算機科學(xué)學(xué)院的Yair Amir和Ciprian Tutu的"從 全序到數(shù)據(jù)庫復(fù)制(From Total Order to Database Replication)"中描述),并經(jīng)由規(guī)則 配置及過渡配置通告來通知定額計算狀態(tài)機。另外,所述輸送裝置用于以"安全"的 全有序傳遞保證在各狀態(tài)機之間發(fā)送及接收消息。所述輸送裝置以圖4所示各種 OnRcv+通告來通知這些狀態(tài)機。FTDLM的這個實施例利用擴(kuò)展虛擬同步(EVS)的熟知語義,如先前并入的加 利福尼亞大學(xué)圣芭芭拉分校(University of California at Santa Barbara)電子與計算機工 程系的L. E. Moser、 Y. Amir、 P. M. Mdliar-Sm池和D. A. Agarwal的"擴(kuò)展虛擬同步 (Extended Virtual Synchrony)"所詳細(xì)描述。為簡便起見,本文描述FTDLM根據(jù)所 述輸送裝置假設(shè)的各種語義要求所述輸送裝置提供配置變化的應(yīng)用程序通告。配置 是本地進(jìn)程當(dāng)前可存取的有序進(jìn)程列表,是與容錯合意算法相一致的。存在兩種配置 類型規(guī)則和傳統(tǒng)。所有消息均以傳統(tǒng)或規(guī)則配置傳遞。如果以規(guī)則配置中傳遞消息, 則所述進(jìn)程知道所述消息也以所述配置傳遞到所有其他成員,除非遠(yuǎn)程成員失效。這 些消息相對于規(guī)則配置是全有序(無間隙)的。不滿足這個要求(在故障情形中)的 消息則以傳統(tǒng)配置傳遞或不傳遞。接收且處于2個規(guī)則配置中的進(jìn)程會接收相同的消 息組(有時稱為故障可分性)。
      定額計算狀態(tài)機(QCSM)經(jīng)由兩種類型的配置消息及規(guī)則(全有序)消息從所 述輸送裝置接收輸入。所述輸送裝置產(chǎn)生的配置消息向QCSM通知節(jié)點的故障或新 生。QCSM使用這個信息與本地保留的成員關(guān)系組合以實施持久定額計算算法,以甚 至在面臨網(wǎng)絡(luò)分割及進(jìn)程故障時仍保證互斥。同樣,在QCSM確定要求故障恢復(fù)(例 如,作為所述成員關(guān)系一部分的節(jié)點先前發(fā)生故障目-現(xiàn)在恢復(fù)并附著到網(wǎng)絡(luò))時, QCSM使用SendLockMgrState以使用輸送裝置將狀態(tài)信息與FTDLM的其他正在操作 的實例同步。文中參照圖6更詳細(xì)論述QCSM。
      鎖定管理器狀態(tài)機(LMSM)從三個源接收輸入應(yīng)用程序、QCSM及輸送裝置。 應(yīng)用程序向LMSM通知每個事務(wù)開始及事務(wù)完成(例如,提交或退回)。應(yīng)用程序使 用LMSM獲取分布式鎖定。LMSM阻塞鎖定請求直到已獲得分布式鎖定??纱嬖? 到n個應(yīng)用程序?qū)嵗CSM在其達(dá)到定額時經(jīng)由OnEnteringPrimary通告來通知 LMSM,以便LMSM可確保在其己知這個實例屬于具有定額的群組時Lock()可操作。 QCSM還在因為進(jìn)程或網(wǎng)絡(luò)故障而使其不能實現(xiàn)定額時經(jīng)由OnEnteringNonPrimary通 知LMSM。輸送裝置在其檢測到可達(dá)到的成員組中的變化時經(jīng)由OnRcvRegCorif及 OnRcvTransConf通告來通知LMSM,以便LMSM可確保在其已知當(dāng)前由亍故障或恢 復(fù)成員而未建立定額時Lock()變得不可操作(例如,阻塞或拋出異常)。在LMSM已 根據(jù)其三個輸入確定鎖定活動可繼續(xù)時,其通知適合的鎖定隊列狀態(tài)機處理Lock或 TransactionComplete請求文中參照圖7更詳細(xì)論述LMSM。
      鎖定隊列狀態(tài)機(LQSM)封裝為維持(例如,同步化)分布式隊列以及喚醒被 阻塞的線程所必需的邏輯。其從LMSM及輸送裝置接收輸入并輸出到輸送裝置。在從 LMSM接收到OnLock通告時,LQSM確定Lock調(diào)用是否可立即返回(例如,因為所 述鎖定已由本地成員擁有)。如果否,則LQSM向輸送裝置發(fā)送適合的消息(例如經(jīng) 由SendEnqueue和SendEnqueueAnclDequeue消息)以起始鎖定所有權(quán)的分布式轉(zhuǎn)移。 在從LMSM接收到OnCommit通告時,LQSM確定將任何鎖定釋放給其他成員是否是 必需的。如果是,則其在輸送裝置上發(fā)送出隊消息(例如經(jīng)由SendDequeue)。在從輸送裝置接收到出隊消息(例如經(jīng)由OnRcvDequeue通告)時,LQSM確定這是否能使 任何正在等待的事務(wù)繼續(xù)(例如,因為遠(yuǎn)程成員的出隊會使本地成員處于隊列的頂部) 并在適合的時候通知正在等待的事務(wù)。文中參照圖5更詳細(xì)論述LQSM。在圖4所示的這個實施例中,持久性存儲裝置用于在檢測到故障或從故障中恢復(fù) 時存儲鎖定隊列的頂部要素,如根據(jù)本揭示內(nèi)容將顯而易見。持久性存儲裝置可以是 (例如)ROM、閃存、或其他非易失性存儲器。鎖定隊列狀態(tài)機(LOSM)圖5圖解說明根據(jù)本發(fā)明的一個實施例配置的圖4所示鎖定隊列狀態(tài)機。LQSM 可使用(例如)軟件(例如C十+)、硬件(例如,門級邏輯)或硬件與軟件的組合(例 如,具有多個用于實施與LQSM相關(guān)聯(lián)的功能的嵌入式例程)來實施。本實施例的 LQSM實施單資源互斥算法,以出于性能及實施容錯的目的利用擴(kuò)展虛擬同步輸送裝置。更詳細(xì)地說,本實施例的LQSM修改Leslie Lamport Bakery算法(見先前并入的 第60/671,373號美國臨時申請案附錄A的34-35頁對Lamport的原始算法的簡明及實 際實現(xiàn)),以通過利用擴(kuò)展虛擬同步輸送裝置來提供顯著改進(jìn)的性能。對這種用于跨越 影響擴(kuò)展虛擬同步的分布式節(jié)點復(fù)制狀態(tài)機的算法的實現(xiàn)已提供于先前并入的第 60/671,373號美國臨時申請案中(在其附錄A的37頁上),且還在這里再現(xiàn)(并在本 文中稱為算法1):〃復(fù)制的狀態(tài)機。〃利用安全的全有序廣播原始性的功率(安全僅在所有接收機已被確認(rèn)時 〃傳輸消息)。〃用戶對狀態(tài)機進(jìn)行變化且在變化完成時等待調(diào)回(及在所有機器上 〃重復(fù))?!ň€程安全、分布式復(fù)制的狀態(tài)機。 〃方法具有無誤差返回代碼以確??煽啃??!丁ㄟ@個狀態(tài)機類存儲數(shù)據(jù)且具有執(zhí)行變化的方法,〃ChangeState(Change ch)。//這個RSM的正確性無需是線程安全的。 StateMacMne state;〃來自用戶的改變狀態(tài)的請求。 ChangeS加eRe.cpst(Cliange cli)《〃對堆棧使用鎖定類以在異常的情況下處理對破壞的鎖定退出。 LocalLock lck(m—!ock》m」ock.LockO;//向包含自身的所有成員廣播變化請求。SafeTcrta0yOrd鵬dBroadcjast(c^ g—LocalProcegsID);》;〃已從網(wǎng)絡(luò)接收到狀態(tài)變化請求。OriRec:dveChange(Chaiige成ProeessID MSourceProcess, LTS ltsSource)〃對堆棧使用鎖定類以在異常的情況下處理對破壞的鎖定退出。 JLocdLock lck(艮lcN:k);m—幽te.ChangeState(ch);TellUserAbout Stat^ha,Compldioii();creturn;}算法l用于復(fù)制實施互斥的狀態(tài)機,因此產(chǎn)生分布式互斥算法(其使用擴(kuò)展虛擬 同步輸送裝置)。這種使用擴(kuò)展虛擬同步輸送裝置的分布式互斥算法的實現(xiàn)提供于先前 并入的第60/671,373號美國臨時申請案(在其附錄A的39頁上)中,且還在這里再 現(xiàn)(并在本文中稱為算法2):〃這里的狀態(tài)機是進(jìn)程索引的FIFO隊列。對協(xié)調(diào)群組中的所有處理復(fù) 〃制所述隊列。關(guān)于Lock(),將所述請求插入隊列中, 〃等待復(fù)制所述請求,隨后返回。在這里應(yīng)注意RSM代碼所完成的及 〃在鎖定管理器代碼中完成的。 〃每個資源均需要這類實例。 〃這種實施方案是線程安全的。eJass Singl汰esourceLodk〃這個隊列是從上文的基類ReplicatedStateMachine導(dǎo)出的?!ɑ怰SM將對協(xié)調(diào)群組中的所有成員復(fù)制這個隊列且確保隊列具有〃相同的操作序列。 QueueOfProceases m一rsra;LockO{〃對堆棧使用鎖定類以在異常的情況下處理對破壞的鎖定退出。 Loca!Locfc tek(nlock);ni一loc'lc,Lock();m—rsmChangeStatdleciufet(RLMCtenge(rlm—ADD, o rooessIDLocal);〃在這個處理ID達(dá)到隊列頂部時等待以信號通知事件。 WaitFoiThisRcqxiestToReachFrontOfQueue();》Unlock0LocalLock lck(m—todc); m—lock.Loclc();m—r犯LCliangeStateRequesl(RLMChang《rlmJlEMOVE, g_j>rocessIDLocal);》〃在每次狀態(tài)變化時由m—rsm調(diào)用。 OnStatsChange(Change ch)JLoealLoclc kk(徵—lock);if(gjjmcessMLocal = m—rsra,Toplteni().ProccssIDO) {SignalLocalWaiterO;在FTDLM的一個特定實施例中,算法2具有下列功能(l)在不存在故障時保證 單個資源的互斥的安全及活性(例如,"未做錯事(does nothing wrong)"和"終于做對某事(does something right eventually)"); (2)為了對單個資源的專有存取(例如,保證 某種等級的公平度)而對請求者的所有權(quán)FIFO授權(quán);及(3)不要求頭/主節(jié)點(以適合 針對容錯群集來擴(kuò)展所述算法)。算法2可經(jīng)優(yōu)化以用于同一節(jié)點的連續(xù)鎖定請求的有效授權(quán)。更具體地說,且參 照算法2的鎖定實施方案,鎖定的每次獲取或釋放均要求1個廣播及N個廣播確認(rèn)。 這是其中甚至同一進(jìn)程反復(fù)請求同一鎖定也不會有任何其他進(jìn)程爭奪所述鎖定的情 形。在某些情形中,可能需要將網(wǎng)絡(luò)業(yè)務(wù)和同一進(jìn)程重復(fù)獲取同一資源所產(chǎn)生的延時 成本最優(yōu)化。例如,在算法2中,資源的每次釋放均涉及更新共享的FIFO隊列。更 新FIFO隊列涉及向FIFO隊列的其他復(fù)本發(fā)送消息,這是可以簡化的業(yè)務(wù)。因此,在 一個實施例中,將本地旗標(biāo)(例如IsRdeased旗標(biāo))添加到尚未被復(fù)制的類(且因此 不應(yīng)在狀態(tài)機類中)中。在釋放時,確定所述FIFO隊列中是否存在正等待所述資源 的進(jìn)程。如果是,則通過更新共享的FIFO隊列向所述進(jìn)程賦予鎖定。如果否,則不 更新FIFO隊列。而是,將本地旗標(biāo)設(shè)定或另外標(biāo)記為真(TRUE)。現(xiàn)在,可僅通過 檢査這個本地旗標(biāo)而立即返回來自本地進(jìn)程的下一Lock()(而不更新FIFO隊列)。如果 在OnReceive()調(diào)回中從另一進(jìn)程接到對這個資源的請求,則執(zhí)行對HFO隊列的更新。 隨后,如果本地旗標(biāo)為真,則通過最后更新FIFO隊列而放棄所述資源。這種優(yōu)化的單資源鎖定算法的實現(xiàn)提供于先前并入的第60/671,373號美國臨時申 請案中(在其附錄A的40頁上),且還在這里再現(xiàn)(并在本文中稱為算法3):《QueueOfProc^sses mj鵬 naloek丄ock();if( IsThisProeessAkead;yliiFrontOfQiieuc()) return;elsemJblsRdeasedBtttStilInQu, = FALSE;mjsni,Clia零'StateRequ(Sst(RLMChange(rim—ADD'g_p'rocessIDLocal); WaitiPorThisRequ.estToReachFrontOfQueue();LocalLock lck(m」ock);m—WsRd標(biāo)sedBut.St孤tiQueue - TRUE; 〃在每次狀態(tài)變化時由m—rsm調(diào)用。OnStatcOiaoge(aiange eh)LocalLock 1dc(m—lock); m—lodcLockQ;SignalLwalWaiter();》else i《m WsR(2leasedB敏SU!ltoQueue)〃放棄令牌的時間。ra i'sm,ChangeStateR岡uest(RLIVlChaiige(rliii—REMOVE, g_processEDLocal);〃否則,將是某一其他人的鎖定請求及授權(quán),且我們保持其以用于容 〃錯可用性?!罚粓D5所示LQSM具有6個輸入OnEnqueue、OriDequeue、OnEnqueueAndDequeue、 OnLock、 OnReset及OnTransactionComplete。每個事件的語義如下OnEnqueue:這個成員或遠(yuǎn)程成員先前己發(fā)送入隊消息(因為所述成員已請求鎖 定),且輸送裝置現(xiàn)在正向LQSM傳遞所述消息;OnDequeue:這個成員或遠(yuǎn)程成員先前已發(fā)送出隊消息(先前擁有鎖定的成員已 不再需要所述鎖定且釋放所述鎖定以允許隊列上的下一成員使用所述鎖定),且輸送裝 置現(xiàn)在正向LQSM傳遞所述消息;OnEnq腿eAndDequeue:這個成員或遠(yuǎn)程成員先前已發(fā)送EnqueueAndDequeue 消息(成員仍需要所述鎖定但暫時釋放所述鎖定以允許公平度),且輸送裝置現(xiàn)在正向 LQSM傳遞所述消息;OnLock: LMSM經(jīng)由這個事件向LQSM通知應(yīng)用程序?qū)︽i定的請求;OnReset: LMSM通過這個消息向LQSM通知存在先前故障且系統(tǒng)已從故障中恢 復(fù);及OnTransactionComplete: LMSM通過這個事件向LQSM通知關(guān)于應(yīng)用程序的事務(wù) 的完成。參照圖5 (以及圖6及7),應(yīng)注意橢圓代表狀態(tài)機的狀態(tài)。每個箭頭均具有分別 標(biāo)記為"E"或"A"的事件及動作。事件會觸發(fā)轉(zhuǎn)換以及箭頭中的動作。在本實例性 實施例的圖式中未明確描繪的事件是不可能的或被忽略的(例如,既不會導(dǎo)致發(fā)生狀態(tài)轉(zhuǎn)換也不會執(zhí)行任何動作)。如圖5中可見,LQSM算法實施數(shù)個性能優(yōu)化。如果節(jié)點"A"在隊列頂部且隊 列大小為1,則允許同時或連續(xù)運行無限量的事務(wù)。如果"A"在隊列頂部且隊列大小 大于1,則允許在其他事務(wù)被阻塞時運行及提交預(yù)定數(shù)量的"n"個未決事務(wù)。在提交 這"n"個事務(wù)后,釋放所述分布式鎖定。完成這一步以實現(xiàn)兩個特性(1)通過增加 針對每次逐節(jié)點的分布式鎖定轉(zhuǎn)移而完成的工作量來提高性能,及(2)通過確保極主 動的成員釋放所述鎖定以便其他節(jié)點可使用所述鎖定來提高公平度。出于性能的原因, 根據(jù)本發(fā)明的一個實施例在瞬時存儲器中存儲/更新所述隊列(然而,應(yīng)注意,假設(shè)可 容忍相關(guān)聯(lián)的延時,則可使用持久化數(shù)據(jù)結(jié)構(gòu))。出于可靠性的原因,將隊列的頂部要 素復(fù)制到持久性存儲裝置處,并在檢測到故障或從故障恢復(fù)時從持久性存儲裝置讀取。圖5所示LQSM的實施例的此瞬時數(shù)據(jù)結(jié)構(gòu)如下。GrantedTransactions -已授予(當(dāng)前持有)這個鎖定的事務(wù)組。這些事務(wù)正執(zhí)行 或等待其他鎖定。虔欲..bGrantedTransactions()、 bQuantumTransactionsRunning()。 寫 A , ClearTransactionState() 、 ProcessTransactionCompleted() 、 UnblockTransaction()、 UpdateTransactionTLists(tme)。LockQueueQuantumSize -在這個成員處構(gòu)成量程的事務(wù)數(shù)。只讀。z,耽, bQuantumReached() 、 bQuantumTransactionsRunning()。Queue-持有正等待鎖定的成員的隊列。這個隊列的頭部的成員持有鎖定。度攻 bMemberWaiting() 、 OnReset()。 寫人'OnReset、 ProcessDequeue()、 ProcessEnqueue()。TotalTransactionsGrantedForThisQuantum -在這個量程期間已執(zhí)行的事務(wù)數(shù)。如 果存在等待者,且已達(dá)到這個量程,則所述成員將釋放鎖定。變攻:bQuantimiReached()。 寫乂 , ResetTotalTransactionsGrantedForThisQuantum() 、 UnblockTransaction()、 UpdateTransactionLists(true)。Waiting Transactions -正等待這個鎖定的事務(wù)組。z賣欲,UnblockTransactions()、 bWaitingTransactions()。 寫/\ ; ClearTransactionState() 、 UnblockTransaction()、 UpdateTransactionLists(false)。圖5所示LQSM的實施例的功能定義如下。bCanUnblockTransaction()—如果不滿足bQuantumTransactionsRunning()且(不滿 足bMemberWaiting()或不滿足bQuantumReached()),則返回真。否貝lj,返回假。 ClearTransac;tioriStateO-清除持有等待及授予的事務(wù)組的數(shù)據(jù)結(jié)構(gòu)。 Dispatch()-發(fā)送準(zhǔn)備調(diào)度的入隊及出隊消息組。bGrantedTransactions()-是否存在任何已授權(quán)的事務(wù)? 如果是,則返回 GrantedTransactions.size()〉0 。bMemberWaiting()-如果隊列大小大于1 ,則存在正等待的成員。返回 Queue.size()〉1 oOnReset(Configuration)-所傳遞的配置已輸入"正向進(jìn)程",意指LMSM已從配置變化中"恢復(fù)"。然而,這個新配置可能不包含所有出現(xiàn)在前一配置中的成員;移除 所述鎖定隊列中未出現(xiàn)在新配置中的任何成員;從這個進(jìn)程中排除頭部鎖定,必須考 慮由消失的成員持有的鎖定。新的鎖定隊列可能己安裝;LQSM需要重設(shè)。確定在(調(diào) 用DetermineState())時重設(shè)應(yīng)以哪種狀態(tài)開始。隨后,假設(shè)給出開始狀態(tài),則處理重設(shè) (調(diào)用ProcessReset(state))。DeteraiineState()-如果這個成員不在隊列中,則將狀態(tài)設(shè)為"這個成員不在隊列 巾"。否則將狀態(tài)設(shè)為"這個成員在隊列中但不持有鎖定"。OnLock(XactID, LockSet) -重申所述事務(wù)要求的鎖定組。針對所述鎖定組中的每 個鎖定,調(diào)用OnLock(XactID, LockID)(這可能使得準(zhǔn)備入隊消息),且調(diào)用Dispatch()(這 將導(dǎo)致發(fā)送任何準(zhǔn)備好的入隊及出隊消息)。OnTransactionCompleted(XactID, LockSet)-重申所述事務(wù)持有的鎖定組。針對鎖 定組中的每個鎖定,調(diào)用OnTransactionCompleted(XactID, LockID)(這可能導(dǎo)致準(zhǔn)備入 隊及出隊消息),及調(diào)用Dispatch()(這將導(dǎo)致發(fā)送任何準(zhǔn)備好的消息)。PrepareDequeueMessage(ThisMcmber, LockID)-例示出隊消息,其包含正被釋放 的鎖定(這個鎖定)及請求將所述鎖定釋放的成員(這個成員)。將這個出隊消息添加 到將要調(diào)度的消息組。PrepareDequeueAndEnqueueMessage(ThisMember, LockID) —例示出隊及入隊消 息,其包含被釋放及重請求的鎖定(這個鎖定)及請求所述出隊及入隊的成員(這個 成員)。將這個出隊及入隊消息添加到將要調(diào)度的消息組。PrepareEnqueueMessage(ThisMember, LockID)-例示入隊消息,其包含正請求的 鎖定(這個鎖定)及正請求所述入隊的成員(這個成員)。將這個入隊消息添加到將要 調(diào)度的消息組。ProcessDequeue(Member)-從隊列頭部移除所述成員。ProcessEnqueue(Member)—將所述成員添加到隊列尾部。ProcessLock(XactID, LockID)-調(diào)用UpdateTransactionLists(false)。向鎖定管理器 狀態(tài)機返回假,這將阻塞正調(diào)用的線程。ProcessLockWhenInThisMemberHoldsTheLock(XactID, LockID)—如果滿足 bCanUnblockTransaction(),則調(diào)用UpdateTransactionLists(true)并返回真。否則,調(diào)用 UpdateTmnsactionLists(false),并向鎖定管理器狀態(tài)機返回假,這將阻塞正調(diào)用的線程。ProcessReset(State)女口下If State = - 'This member加t in queue, IfbWaitin^TrsnsactionsOSend an enq卿e mmage (not a tiatch message)ReturnElse if the state is *TMs member in queue but does not hold lock' If Queue-Top = = TbisMberSet state to 'This Member Holds Lock'ElseReturnElse if the state is 'This Member Holds the Lock' IfbSkmldRdease()Set state to 'Waiting for transactions to complete'ElseReturaElse if the state is 'Waiting for transactions to complete'If NOT bGrantedTran&actionsO AND bWaitingTVansactionsSet state to 'Enqueue and Dequeue message requested'Send an enqueue and dequeue message (not a batch message) If NOT bGrantedTramactionsO AND NOT b^WaitingTrausactwiisSet站ate to Dequeue message requested'Send a d,eue message (加t a batett message)ProcessLockWhenInThisMemberNotlnQueue(XactID, LockID) — 調(diào) 用 PrepareEnqueue()以創(chuàng)建這個鎖定的入隊消息,且將其添加到將要調(diào)度的消息組。調(diào)用 UpdateTransactionLists(false)。向鎖定管理器狀態(tài)機返回假,這將阻塞正調(diào)用的線程。ProcessTransactionCompletedWhenInThisMemberHoldsTheLock(XactID)—如果事 務(wù)完成,且不存在正在等待的成員,則另一事務(wù)可在量程中代替所述已完成的事務(wù)。 ProcessTransactionCompleted(XactID)。如果不滿足 bMemberWaiting() 及 bWaitingTmnsactions(), 貝U滿足UnblockTransaction()。ProcessTransactionCompleted(XactID)-從所授予的事務(wù)組中移除所述事務(wù)。bQuantumReached()-如果這個成員已將鎖定授予LockQueueQuantumSize事務(wù) 貝U為真。返回TotalTransactionsGrantedForThisQuantum >= LockQueueQuantumSize。bQuantumTmnsactionsRunning()-如果存在當(dāng)前執(zhí)行的LockQueueQuantumSize事 務(wù)則為真。如果滿足GrantedTransactions.size()>= LockQueueQuantumSize,則返回真。 否則,返回假。ResetTotalTransactionsGranted() - 4每TotalTransactionsGrantedForThisQuanrum設(shè)為0。bShouldRdease()-假設(shè)存在等待成員且無運行的事務(wù),則如果不存在等待的事務(wù) 或這個成員己開始其事務(wù)共享(量程)就應(yīng)釋放。如果不滿足bWaitingTransactionsO 或bQuantumReached(),則返回真。否則,返回假。UnblockTransaction()-從正在等待的事務(wù)組移除下一事務(wù)。將所述事務(wù)添加到授 權(quán)事務(wù)組。TotalTransactionsGrantedForThisQuantum遞增。為所述事務(wù)消除阻塞。UnblockTransactions()- 重申所述正在等待的事務(wù)組。在 (bCanUnblockTransaction())為真時,調(diào)用UnblockTransaction()。UpdateTransactionLists(transactionlsGranted)—如果滿足transactionlsGranted,貝U將 所述事務(wù)添加到授權(quán)事務(wù)組,且TotalTransactionsGrantedForThisQuantum遞增。如果 不滿足transactionlsGranted,則將所述事務(wù)添加到正在等待的事務(wù)組。bWaitingTnmsactions()-如果存在等待的事務(wù),也就是說如果正在等待的事務(wù)組 不為空則為真。定額計算狀態(tài)機(OCSM)圖6圖解說明根據(jù)本發(fā)明的一個實施例配置的圖4所示定額計算狀態(tài)機。QCSM 可使用(例如)軟件(例如0++)、硬件(例如門級邏輯)或硬件與軟件的組合(例如具有 多個用于實施與QCSM相關(guān)聯(lián)的功能的咴入式例程的微控制器)來實施。本實施例的 QCSM保證在面臨網(wǎng)絡(luò)分割及進(jìn)程故障時的互斥。更詳細(xì)地說,無論何時出現(xiàn)網(wǎng)絡(luò)分割,則每個成員處的擴(kuò)展虛擬同步輸送裝置(或 其他適合的全序輸送裝置)均能夠確定所述特定成員可達(dá)到的遠(yuǎn)程成員組。這個組稱 為當(dāng)前配置。輸送裝置經(jīng)由規(guī)則/傳統(tǒng)配置消息向QCSM提供這個信息。假設(shè)給定當(dāng) 前配置及總成員關(guān)系,則每個成員能夠計算當(dāng)前配置是否構(gòu)成總成員關(guān)系的大部分。 如果是,則當(dāng)前配置被稱為具有定額。具有定額的配置稱為基本組件(每標(biāo)準(zhǔn)命名法)。 其他配置稱為二級組件。正式地(及可查證地),假設(shè)成員關(guān)系有任何分割,則可存在 最多一個基本組件。圖6所示QCSM的實施例以下列方式將經(jīng)修改的定額用于更大的容錯。每次 QCSM確定本地成員是基本組件的一部分(轉(zhuǎn)換到"在基本組件中"狀態(tài)),QCSM 就保留基本組件(使用動作PersistPrimaryComponent)。在當(dāng)前配置主要滿足薪一^:才 邀伴時達(dá)到定額條件(與在當(dāng)前配置主要滿足^^ ^關(guān)系時相反)。這個條件使得達(dá)到 定額變得更簡單,且繼續(xù)維持在成員關(guān)系的仟一分割中均僅有一個基本組件。QCSM可被理解為想要獲得當(dāng)前成員的邏輯,其以"不在基本組件中"狀態(tài)開始, 通過廣播各種全有序安全消息且通過大量狀態(tài)進(jìn)行轉(zhuǎn)換而進(jìn)入基本組件,如圖6中顯 示。在QCSM進(jìn)入"在基本組件中"狀態(tài)時實現(xiàn)目標(biāo)。FTDLM使用QCSM計算當(dāng)前成員是否屬于基本組件。經(jīng)由 ForwardEnteringPrimary通告向鎖定管理器狀態(tài)機(LMSM)通知這個QCSM轉(zhuǎn)換。 LMSM確保僅在當(dāng)前成員在基本組件中時才允許所述成員在Lock()調(diào)用中成功。結(jié)合其中一次可僅有一個基本組件的條件,這會確保甚至在出現(xiàn)網(wǎng)絡(luò)分割時也不會向兩個 成員授予同一鎖定的所有權(quán)。以根據(jù)本揭示內(nèi)容將顯而易見的在某些點處保留某些數(shù)據(jù)結(jié)構(gòu)作為補充,這個鎖 定算法還足以用于容忍進(jìn)程故障。每個成員均具有其成員名稱的保留記錄(例如不變 的唯一識別符)及成員關(guān)系(例如成員名稱的不變列表)?;謴?fù)-當(dāng)先前發(fā)生故障的成員重新連接到群組時,需要更新所述恢復(fù)成員的 FTDLM的內(nèi)部狀態(tài)。QCSM實施這個邏輯。更詳細(xì)地說,這個拓?fù)渥兓怯奢斔脱b 置檢測且經(jīng)由配置消息(例如,OnRcvRegConf或OnRcvTransConf)報告給QCSM的。 這將最終導(dǎo)致對SendQuorumState的調(diào)用。這個信息足以使每個成員確定其是否具有 權(quán)威(例如,最新)數(shù)據(jù)(例如,通過在已接收到所有定額狀態(tài)消息之后檢查其是否 具有最大基本組件數(shù))。如果是,則所述成員使用SendLockMgrState廣播其鎖定狀態(tài) (例如鎖定隊列)。容忍所有成員同時發(fā)生故障-存在兩種可能要求額外邏輯的故障情形。兩種情形 均涉及基本組件中所有進(jìn)程的同時故障。出于性能的原因,且在一個特定實施例屮, 僅在無故障正向處理期間在瞬時存儲器中更新所復(fù)制的鎖定隊列。如果針對每次鎖定 轉(zhuǎn)移更新鎖定隊列,則這個部分描述的邏輯是多余的。然而,可能需要具有在無故障 處理期問僅在瞬時處理中操作的性能以及容錯的能力一者;因此在此處描述所述邏輯。如果-一個成員發(fā)生故障且其他成員殘存,則所恢復(fù)的成員可經(jīng)由狀態(tài)交換協(xié)議從 殘存成員獲取最新隊列(如圖6中顯示,所述狀態(tài)以等待開始以接收所有定額消息)。 在所有成員同時發(fā)生故障時,不存在從中獲取權(quán)威隊列的殘存成員。這種類型的故障 可被廣義劃分為兩類,因為其要求不同的解決方案所有成員故障情形,及帶分割的 所有成員故障情形。在所有成員發(fā)生故障的情形中,在所有成員均發(fā)生故障時基本組件的成員正處理 事務(wù)及在各成員之間交換鎖定所有權(quán)。不從基本組件中分割任何成員?;窘M件中的 成員可能因為已授予鎖定而正使用資源(例如,寫入共享數(shù)據(jù)段)。此外,在發(fā)生故障 時鎖定隊列的狀態(tài)是未知的。從這種類型的故障中恢復(fù)的一個實施方案相依于下列觀測為正確恢復(fù),QCSM 僅需要確保在發(fā)生故障時出現(xiàn)的所有成員在恢復(fù)(例如,基本組件的形成)期間必須 出現(xiàn)。具體來說,安裝(或恢復(fù))在發(fā)生故障時出現(xiàn)的鎖定隊列不是必需的。這種洞 察允許導(dǎo)出算法,借以使鎖定隊列在無故障處理期間無需持續(xù)更新。在所述成員已恢復(fù)時,其可以空鎖定隊列開始。在惡性故障之前出現(xiàn)的活動可能 尚未完成。在恢復(fù)時,如果所有成員同時恢復(fù),則這個FTDLM的客戶端實施其中查 看恢復(fù)成員的狀態(tài)且將所述狀態(tài)同步以便所述狀態(tài)保持一致的算法。由于先前有效的 所有成員一起恢復(fù),則這個同步所必需的所有信息均可用。假設(shè)先前的基本組件中的 成員在這個所有成員發(fā)生故障的情形中并未一起恢復(fù),則不保證安全恢復(fù)。例如,如 果丟失的成員本來持有鎖定且已提交數(shù)據(jù)更新,則在恢復(fù)時,其他成員在沒有首先獲得所有先前提交的變化時應(yīng)不能獲得那些鎖定及提交的變化。為保證所有成員一起恢復(fù),QCSM在嚴(yán)格的時間保留正向處理成員組(FPMS) 且進(jìn)行檢査以在報告其已實現(xiàn)定額(例如,本地成員己加入基本組件)之前確保在進(jìn) 行恢復(fù)時至少這組成員會出現(xiàn)。這個實施例的QCSM在三個明確的時間點處處理 FPMS: (1)在形成基本組件時,(2)在由配置變化結(jié)束基本組件時,及(3)在交換 定額狀態(tài)時。FPMS維持在形成基本組件時的活動在形成新的基本組件時(進(jìn)入"在基本組 件中"狀態(tài)),構(gòu)成基本組件的成員組還界定FPMS。所述FPMS由鎖定管理器狀態(tài)機 中的PersistFPMS動作保留(其將參照圖7而更詳細(xì)描述)。對于有效實例,假設(shè)基本 組件由成員A、 B及C形成。在所述基本組件的持久時間內(nèi)且A、 B及C正向處理時, FPMS由A、 B及C組成。每個基木組件的使用壽命由從輸送裝置經(jīng)由OnRcvRegConf 或OnRcvTransConf接收的配置變化消息結(jié)束。配置控制消息還從前一配置移除或添 加成員。在上述有效實例中,如果成員B已發(fā)生故障或被分割則配置變化消息可(例 如)移除成員B。還可以添加已恢復(fù)或再合并的另一成員(例如D)。FPMS維持在接收到配置變化時的活動在接收到配置變化消息時,從FPMS移 除丟失的成員。隨后使用PersistFPMS動作再次保留FPMS。在匕述有效實例中,如果 傳遞新的配置為A、 C、 D,則從FPMS移除成員B。再次保留新的FPMS為A、 C。 在這點未添加成員D。FPMS維持當(dāng)在QSM狀態(tài)期間發(fā)生交換時的活動最后,QCSM在交換定額狀 態(tài)消息時處理FPMS。所述配置中的每個QCSM實例包含F(xiàn)PMS作為其定額狀態(tài)在 SendQuommState動作中的一部分。隨后確定新配置的FPMS,借以作為由新配置中的 每個成員發(fā)送的FPMS的聯(lián)合。這顯示為圖6所示QCSM實施例中的DetermineFPMS 動作。在上述有效實例中,A和C二者均發(fā)送FPMS為A、 C。己加入所述配置的D可 發(fā)送FPMS為D、 E。如果將D和E分割在一起、二者相繼發(fā)生故障且僅D恢復(fù),則 這可能發(fā)生。則在這種情形中,新配置的FPMS將是A、 C、 D、 E。僅在這個新FPMS 存在且隨后實現(xiàn)正向處理(經(jīng)由基本組件的形成)時需要保留這個新FPMS。在形成 新的基本組件為A、 C、 D時,將需要提供A、 C、 D、 E的FPMS以實現(xiàn)正向處理。 由于這不是實際情況,則在成員E恢復(fù)并與基本組件再合并(通過滿足上述不變性來 保證正確性)之前不允許發(fā)生正向處理。容忍與所有成員故障同時發(fā)生的分割故障在一基本組件分割及所產(chǎn)生組件的一 個(或多個)中的所有成員發(fā)生故障、恢復(fù)、隨后再合并時出現(xiàn)其他同時問題。考慮 基本組件為成員A、 B及C。在這個有效實例中,假設(shè)將成員B (其持有某些鎖定) 與A、 C分割開來。如果不存在進(jìn)程故障,就不存在出錯的風(fēng)險A及C維持其瞬時 鎖定狀態(tài)且知道B持有鎖定。A和C將不能改變由B持有的鎖定所提供的數(shù)據(jù)。在B 再合并時,其可持有在分割之前對其持久存儲器做出的變化,但在分割發(fā)生之前不將其復(fù)制到A及C。在B再合并時,其可將這些變化安全發(fā)送到A及C, A及C因為 顧慮到B持有的鎖定而不能持有相矛盾的變化。進(jìn)一步再次考慮基本組件A、B、C,且和前面一樣將B和(A,C)分割開來成為(A,C〉 和{8}?,F(xiàn)在假設(shè)A及C 二者均發(fā)生故障。瞬時狀態(tài)丟失且A及C將不再記得B持 有的鎖定。成員A及C處的FPMS是(A,q。假設(shè)僅有所述FPMS信息,則所述算法 將允許A和C 一起恢復(fù)、進(jìn)入基本組件、及干擾互斥保證(因為A和C可以獲取B 仍持有的鎖定)。本論述示范了在存在分割及所有成員故障時上述FPMS設(shè)備并不滿足需要。因此, 圖6所示QCSM的實施例包含分片保留以處理這種情形。通過介紹這種能力(分片保 留),F(xiàn)TDLM能夠在面臨進(jìn)程或網(wǎng)絡(luò)故障的任意組合時維持互斥。片所述片是(鎖定名稱,鎖定所有者)的有序?qū)M,其中鎖定所有者是對應(yīng)于鎖 定名稱識別的每個鎖定的每個隊列的頂部要素。在配置變化消息結(jié)束基本組件時,保 留所述片。在圖6所示QCSM實施例中,這是由PersistSlice動作代表的。一般根據(jù)基本組件的版本來自動保留所述片。因此,每個成員持有兩個鎖定隊列 狀態(tài)實例,其二者的版本分別是(1)保持在瞬時存儲器中的鎖定狀態(tài)(稱為"瞬時 鎖定狀態(tài)"),及(2)持久鎖定狀態(tài)(稱為片)。出于性能的原因,片有時相對于最近 的瞬時鎖定狀態(tài)是過時的。下列算法的目的可用于確保這些矛盾不會產(chǎn)生錯誤語義(1)在配置變化使基本 組件結(jié)束時保留所述片。(2)在先前所述鎖定狀態(tài)交換中仍包含所述片。在接收到所有 定額狀態(tài)消息時, 一個成員(確定為最新的)經(jīng)由SendLockMgrStateIfNewest()發(fā)送其 鎖定狀態(tài)的最近版本。所發(fā)送的鎖定狀態(tài)可以是瞬時或持久鎖定狀態(tài),無論如何其均 具有最大索引。在正常處理過程中,瞬吋鎖定狀態(tài)將較新。然而,如果進(jìn)程從故障中 恢復(fù),則其將不具有瞬時鎖定狀態(tài)且因此將替代地發(fā)送其片。(3)每個成員使用 OnRcvLockMgrState傳遞鎖定狀態(tài)消息。如果所接收的鎖定狀態(tài)比當(dāng)前的瞬時鎖定狀 態(tài)更新,則遠(yuǎn)程鎖定狀態(tài)覆寫所述本地瞬時鎖定狀態(tài)。如果所傳遞的鎖定狀態(tài)比本地 保留的片更新,則所傳遞的鎖定狀態(tài)及其索引將作為所述片的新版本而安裝。繼續(xù)先前的有效實例,回顧成員A、 B、及C形成基本組件。B與(A,C)分割開來, 且B持有鎖定。這時,A及C將保留其鎖定狀態(tài)作為片。所保留的鎖定狀態(tài)將包含由 B保持的鎖定。隨后A及C一起發(fā)生故障,丟失其瞬時鎖定狀態(tài)。然而,在恢復(fù)時, A和C二者將所保留的片安裝為其瞬時鎖定狀態(tài),因此修復(fù)由B保持的鎖定。在B恢 復(fù)時,其將能夠安全地與A及C再合并。鎖定狀態(tài)的版本化各成員間的鎖定狀態(tài)交換補充有在每個成員處維持的版本 數(shù)。當(dāng)所述成員處的QCSM進(jìn)入基本組件且如圖6所示QCSM的實施例中所述在各 種時間進(jìn)行保留時,增加所述數(shù)字。故障恢復(fù)及鎖定狀態(tài)交換為有效起見,在恢復(fù)期間在各成員間轉(zhuǎn)移最小量的鎖 定狀態(tài)信息。利用版本數(shù)確定最新成員,且所述成員會廣播其狀態(tài)。實現(xiàn)這種優(yōu)化(利用擴(kuò)展虛擬同步的語義)的結(jié)果是當(dāng)前的基本組件中也是先前基本組件的一部分的所 有成員將具有完全一致的鎖定狀態(tài)。因此,僅需這些成員的一個廣播其鎖定狀態(tài)。在操作中,當(dāng)傳遞新配置后,每個成員發(fā)送具有其版本的狀態(tài)消息。每個成員從 所述配置中的所有其他成員處接收所述消息。每個成員均確定具有最大鎖定版本的成 員。如果存在聯(lián)系,則選擇以字典順序的第一個成員ID來發(fā)送其鎖定狀態(tài)。其他與可 變公平度相關(guān)聯(lián)的仲裁技術(shù)也可用于此處。下文是圖6所示QCSM的這個實施例的持久化數(shù)據(jù)結(jié)構(gòu)。正向處理成員組-在所述配置中需要出現(xiàn)以實現(xiàn)正向處理的成員組。度攻.-^M5M.DetermineFPMS()、 gSM.SendQuorumStateMessage()。寫A ,丄MS7kf.PersistFPMS()、 ZMW.PersistConfigurationAsFPMS()。鎖定# -這是鎖定組及其所有者,及指派給這組值的版本。 GSM.SendLockMgrStatelfNewestO 。 寫 A , gSM.OnRcvLockMgrState()、 ,/.PersistSlice()。鎖定^"索引-這是鎖定^f的索引或版本。這和其中寫入鎖定A的基本組件的索 引是匹配的。^攻.'gSM.OnRcvLockMgrState()、 ^SM.SendLockMgrStatelfNewest()、 0SMSendQuommStateMessage() fgSM)。寫乂 , ^S"M.OnRcvLockMgrState()、 ^W.PersistSlice()。成員關(guān)系-這是作為成員關(guān)系的一部分的成員組的持久記錄。虔攻.-gSM.IsQuorum()。寫A:只讀。基本組件-這是這個成員作為其一部分的最近基本組件。這包含配置(一組成 員)及版本,其稱為基本組件索引。虔欲GSM.PersistPrimaryComponent()、 g5"M.SendQuorumStateMessage()。寫A: g57kf.PersistPrimaryComponent()。權(quán)數(shù)—在定額計算中為這個成員指派的權(quán)數(shù)。Z,欲.-g5MSendQuorumStateMessage()。寫入'只讀。下文是圖6所示QCSM的本實施例的瞬時數(shù)據(jù)結(jié)構(gòu)。配置-這個配置包含所述配置中的成員組,且還包含識別所述配置的ID。與擴(kuò) 展虛擬同步輸送裝置發(fā)送的消息相反,由狀態(tài)機發(fā)送的消息是在同一配置中發(fā)送及傳 遞以便于應(yīng)用。如果否,則放棄所述消息。因此,所述配置由狀態(tài)機的發(fā)送及接收功 能定期讀取。攻,HasReceivedAllStateMessages() 、 PersistPrimaryComponent()、 SendLockMgrStatelfNewest()。寫乂, OnRcvRegConf()。正向處理成員組-需要在所述配置中出現(xiàn)以實現(xiàn)正向處理的成員組。在QCSM 交換定額狀態(tài)時確定瞬時FPMS,且隨后由鎖定管理器在其嘗試進(jìn)入"正向處理"時 讀取。瀆欲-.丄M5M.blsFPMSPresent()。DetermineFPMS()。定額狀態(tài)消息-在配置改變時,新配置中的每個成員均使用這些消息交換其定 額狀態(tài)。定額狀態(tài)消息存儲在其中根據(jù)發(fā)送成員的分類次序?qū)⑵浞诸惖臄?shù)據(jù)結(jié)構(gòu)中。 達(dá)教 ..DetermineFPMS() 、HasReceivedAIlStateMessages() 、IsQuorum()、SendLockMgrStatelfNewest()。寫人'OnRcvQuorumStateMessage()、 OnRcvRegConf()。 下文是圖6所示QCSM的本實施例的功能定義。DetermineFPMS()—重申定額狀態(tài)消息組。從每個消息讀取FPMS。聯(lián)合每個 FPMS以便形成包含于定額狀態(tài)消息中的成員超集。將其存儲于瞬時存儲器中,鎖定 管理器狀態(tài)機將在其執(zhí)行bFPMSIsPresent()時讀取所述消息。ForwardEnteringPrimary()-向鎖定管理器狀態(tài)機轉(zhuǎn)發(fā)OnEnteringQuorum通告。 ForwardRegConf(Configuration) -向鎖定管理器狀態(tài)機轉(zhuǎn)發(fā)OnRcvRegConf通告。 ForwardTransConf(Configuration)—向鎖定管理器狀態(tài)機轉(zhuǎn)發(fā)OnRcvTransConf通告HasReceivedAllStateMessages() -如果持有定額狀態(tài)消息的數(shù)據(jù)結(jié)構(gòu)的大小與配 置的大小相同則為真,否則為假。IsQuomm()-重申定額狀態(tài)消息。每個定額狀態(tài)消息均包含發(fā)送成員及在定額計 算中賦予所述成員的權(quán)數(shù)。檢索這些值。每個定額狀態(tài)消息均包含其中發(fā)送成員是其 一部分的先前基本組件。使用基本組件索引為這些組件這個基本組件用于確定這個配 置是否可實現(xiàn)定額。如果系統(tǒng)是第一次工作,則可能在任一定額狀態(tài)消息上均不存在 有效的先前基本組件。如果存在先前基本組件,則新配置必須包含在先前基本組件中 出現(xiàn)的加權(quán)多數(shù)成員。如果不存在先前基本組件,則從持久存儲器讀取成員關(guān)系。在 這里,新配置必須包含持久成員關(guān)系中的加權(quán)多數(shù)成員以實現(xiàn)定額。OnRcvLockMgrState()-從鎖定狀態(tài)消息讀取鎖定索引。如果這個索引大于所保 留片上的索引,則將來自鎖定狀態(tài)消息的鎖定狀態(tài)及索引寫入持久存儲器作為新的保 留鎖定片。如果這個索引大于由鎖定管理器狀態(tài)機保持的瞬時鎖定狀態(tài),則將來自鎖 定狀態(tài)消息的鎖定索引及鎖定狀態(tài)安裝到鎖定管理器狀態(tài)機上作為新的瞬時鎖定狀 態(tài)。OnRcvQuorumStateMessage()-將定額狀態(tài)消息存儲于瞬時存儲器中。 OnRcvRegConf(Configuration)-瞬時存儲所傳遞的配置。起始將保持所傳遞的定額狀態(tài)消息的數(shù)據(jù)結(jié)構(gòu)。調(diào)用ForwardRegConf(Configuration)。OnRcvTransConf(Configuration) -調(diào)用ForwardTransConf(Configuration)。 PersistPrimaryComponentO -從持久存儲器讀取基本組件索引的當(dāng)前值。將這個值遞增;結(jié)果是基本組件索引的新值。保留這個新值,以及這個配置中的成員組作為新的基本組件。將所述基本組件索引的新值寫入鎖定管理器狀態(tài)機作為瞬時鎖定狀態(tài)的新索引。所述瞬時鎖定狀態(tài)的索引反映基本組件索引。PersistSlice()-從鎖定管理器狀態(tài)機的瞬時存儲器獲得鎖定所有者的當(dāng)前組。從鎖定管理器狀態(tài)機的瞬時存儲器獲得當(dāng)前的基本組件索引。持久存儲這些索引作為新的鎖定片。Sendl.ockMgrStatelfNewest()-如果配置大小大于l,則需要發(fā)送鎖定狀態(tài)。如果 所述配置中僅存在一個成員,則無需發(fā)送鎖定狀態(tài)。重申定額狀態(tài)消息組。回顧根據(jù)發(fā)送消息的成員的分類次序來將定額狀態(tài)消息分類。找出具有最高鎖定索引的定額狀 態(tài)消息。僅一個成員需要發(fā)送鎖定狀態(tài)消息。如果多于一個成員具有帶最高索引的鎖 定狀態(tài),則選擇分類次序中的第一成員。如果這個成員是需要發(fā)送鎖定狀態(tài)的成員, 則確定應(yīng)發(fā)送鎖定管理器狀態(tài)機的瞬時鎖定狀態(tài)還是持久鎖定#。在讀取這兩個的索 引后,發(fā)送最新的鎖定狀態(tài)。如果瞬時鎖定狀態(tài)和持久鎖定片二者具有同一索引,則 優(yōu)選瞬時鎖定狀態(tài),因為其包含整個鎖定隊列(包含等待者)而非僅擁有者。SendQuorumStateMessage()-創(chuàng)建新的定額狀態(tài)消息,同時送所述消息。定額狀 態(tài)消息中的數(shù)據(jù)包含下列這個成員所屬的最近基本組件(這是從持久存儲器讀取的, 且包含基本組件中的成員組及基本組件索引);在定額計算中使用的這個成員權(quán)數(shù)(這是從持久存儲器檢索的);這個成員屬于其最后一部分的正向處理成員組(這是從持久 存儲器檢索的);及由鎖定管理器狀態(tài)機保持在瞬時存儲器中的鎖定索引和持久鎖定片 上的鎖定索引的最大值(這些值的較大者是這個成員已知的最新鎖定狀態(tài))。 鎖定管理器狀態(tài)機(LMSM)圖7圖解說明根據(jù)本發(fā)明的一個實施例配置的圖4所示鎖定管理器狀態(tài)機。 LMSM可使用軟件(例如C++)、硬件(例如門級邏輯)或硬件與軟件的組合(例如具有 多個用于實施與LMSM相關(guān)聯(lián)的功能的嵌入式例程的微控制器)來實施。出于論述的 目的,假設(shè)使用FTDLM的在線事務(wù)處理(OLTP)型應(yīng)用程序,其中如果所述事務(wù)退 回則所述應(yīng)用程序再試所述事務(wù)。假設(shè)使用這個模型,則FTDLM使用LMSM實施具 有故障的語義,這會保證互斥及易于應(yīng)用程序正確性。更詳細(xì)地說,圖7所示LMSM的實施例會確保在QCSM離開"在基本組件中" 狀態(tài)時,(l)允許來自未決事務(wù)的TransactionCompleted通告無誤差地完成,及(2)阻塞 或中止新的鎖定請求。這個LMSM還實施FPMS保留及檢杳以確定先前所述容錯。 LMSM的這個實施例還實施事務(wù)性雙相鎖定語義,以確保執(zhí)行事務(wù)所要求的多個資源 的合式鎖定及釋放。下文是圖7所示LMSM的本實施例的瞬時數(shù)據(jù)結(jié)構(gòu)。配置-所述配置由規(guī)則配置消息或傳統(tǒng)配置消息傳遞且由LMSM高速緩存。 LMSM發(fā)送的入隊及出隊消息需要由同一配置發(fā)送及接收,否則將其丟棄。因此,狀 態(tài)機的發(fā)送及接收功能定期讀取所述配置。鍵欲blsFPMSPresent()、 LgSM.OnReset(Configuration)、 PersistConfigurationAsFPMS()、發(fā)送及接收LMSM消 息的功能。寫乂 CacheConfiguration()。InFlightTransactions -當(dāng)前執(zhí)行或未決的事務(wù)組。7荬歡NotifyThreads()、 ProcessLock() 、 ProcessTransactionCompleted()。 寫 乂 CreateXact()、 ProcessTransactionCompleted() 、 RollbackAllXacts()。Locklndex - Locklndex用于解釋說明鎖定狀態(tài)。這個索引對應(yīng)于其中寫入這些鎖 定隊列的基本組件的索引。鍵攻^SM.OnRcvLockMgrState()、 gSMPersistSlice()、 g57l/.SendLockMgrStatelfNewest() 、^S7lf.SendQuorumStateMessage()。寫A :25MOnRcvLockMgrState() 、 05MPersistPrimaryComponent()。LockState -瞬時鎖定隊列。瀆教0SMPersistSlice()、 ^W.SendLoc固grStatel飾west()。寫人Q嵐OnRcvLockMgrState()。NextTransactionID -用作事務(wù)ID的下一個值。單調(diào)遞增。如果進(jìn)程故障則可將這 個值重設(shè)為0;僅在瞬時存儲器中追蹤事務(wù)。誤^砍CreateXact()。 S乂 CreateXact()。下文是圖7所示LMSM的本實施例的功能定義。CacheConfiguration(Configuration)-由傳統(tǒng)或規(guī)則配置消息傳遞配置并將其寫入 瞬時存儲器。CreateXact()—每個事務(wù)由具有唯一 ID-TransactionID-的事務(wù)對象代表。獲得下一 TransactionID,用其為這個事務(wù)例示一事務(wù)對象。將所述新事務(wù)添加到持有未決事務(wù) 組的瞬時數(shù)據(jù)結(jié)構(gòu)。TransactionID遞增。DetermineFPMS()-已將新配置傳遞到LMSM。從持久存儲器讀取當(dāng)前FPMS。 新的FPMS是當(dāng)前FPMS和新傳遞的配置的交集。也就是說,可從所述FPMS移除任 何在所述FPMS中但不在新傳遞的配置中的成員。如果所述新FPMS不同于先前FPMS 則使用PersistFPMS()保留所述新FPMS。blsFPMSPresent() — QCSM己進(jìn)入"在基本組件中"狀態(tài),且LMSM正嘗試進(jìn)入 正向處理狀態(tài)。LMSM讀取FPMS以在QCSM交換定額狀態(tài)時以DetermineFPMS() 將QCSM高速緩存。如果整個這個成員組都出現(xiàn)在當(dāng)前配置中,則LMSM可進(jìn)入正 向處理狀態(tài)中。如果否,則LMSM停留在阻塞新事務(wù)狀態(tài),直到形成在FPMS中包含 所有成員的基本組件。NotifyThreads()-LMSM進(jìn)入正向處理狀態(tài)。重申未決事務(wù)組。通知基于LMSM 的狀態(tài)阻塞的任何線程。不通知因為鎖定不可用而阻塞的線程。PersistFPMS()-獲取DetennineFPMS()的結(jié)果并將其寫入持久存儲器作為 FPMS。PersistConfigurationAsFPMS()-讀取所述配置并將其寫入持久存儲器作為 FPMS。ProcessLock(XactID, LockSet)-從未決事務(wù)組檢索所述事務(wù)。如果所述事務(wù)未出 現(xiàn)則表示其已[大l調(diào)用線程及返回的異常而退回。如果所述成員正進(jìn)行正向處理,則針 對鎖定組中的每個鎖定調(diào)用LQSM.OnLock(XactID,LockID)。否則阻塞正調(diào)用的線程。ProcessTransactionCompleted(XactID)-從未決事務(wù)組中檢索所述事務(wù)。如果所述 事務(wù)未出現(xiàn)則表示其已因正調(diào)用的線程及返回的異常而退回。如果所述事務(wù)是只讀事 務(wù)(不保持鎖定),則將其從未決事務(wù)組中移除并返回。如果所述成員正進(jìn)行正向處理, 則針對所述事務(wù)保持的每個鎖定,使用OnTransactionCompleted(XactID)調(diào)用鎖定隊列 狀態(tài)機。從未決事務(wù)組移除所述事務(wù)并返回。在所述成員未進(jìn)行正向處理時阻塞所述 正調(diào)用的線程。RollbackAllXacts() -清除未決事務(wù)數(shù)據(jù)結(jié)構(gòu)。調(diào)用鎖定隊列狀態(tài)機動作Clear TransactionState()。WaitForNotify()-在配置變化期間,且在所請求鎖定不可用時,阻塞來自LMST 的線程請求服務(wù)。WaifForNotify()阻塞所述正調(diào)用的線程。上述對本發(fā)明實施例的說明是出于例示及說明的目的而提供的。本文不意欲窮盡 或?qū)⒈景l(fā)明限制于所揭示的精確形式。根據(jù)本揭示內(nèi)容還可以做出許多修改及改變。 本發(fā)明的范疇并不意欲由這個詳細(xì)說明限制,而是由隨附權(quán)利要求書限制。
      權(quán)利要求
      1、一種分布式鎖定管理系統(tǒng),其包含多個分別以通信方式耦合到網(wǎng)絡(luò)的節(jié)點,所述系統(tǒng)包括每個節(jié)點處的數(shù)據(jù)庫,其用于存儲由在所述節(jié)點的一者或多者處操作的應(yīng)用程序所使用的資源;每個節(jié)點處的容錯分布式鎖定管理器(FTDLM)模塊,其用于調(diào)節(jié)所述應(yīng)用程序?qū)λ鲑Y源的存取,所述FTDLM模塊針對每個資源均具有一隊列,所述隊列識別擁有所述資源的分布式鎖定的節(jié)點,其中跨越所述節(jié)點復(fù)制每個隊列;及每個節(jié)點處的全序輸送裝置模塊,其用于以通信方式將所述節(jié)點耦合到所述網(wǎng)絡(luò),并對各節(jié)點之間的消息接發(fā)施加全排序協(xié)議。
      2、 如權(quán)利耍求1所述的系統(tǒng),其中所述FTDLM模塊中的所述隊列是FIFO隊歹ij, 且每個對應(yīng)資源的分布式鎖定所有權(quán)被轉(zhuǎn)移到所述隊列中以FIFO次序識別的等待節(jié) 點。
      3、 如權(quán)利要求1所述的系統(tǒng),其中所述全序輸送裝置模塊被實施為擴(kuò)展虛擬同 步輸送裝置。
      4、 如權(quán)利要求1所述的系統(tǒng),其中所述全序輸送裝置模塊利用所述網(wǎng)絡(luò)的多播 能力以確保依序傳遞消息。
      5、 如權(quán)利要求1所述的系統(tǒng),其中如果節(jié)點擁有資源的分布式鎖定,且無其他 節(jié)點正等待所述資源,則所述FTDLM模塊允許所述資源上無限制數(shù)量的事務(wù)同時或 連續(xù)運行。
      6、 如權(quán)利要求l所述的系統(tǒng),其中如果節(jié)點X擁有資源的分布式鎖定,且其他 節(jié)點正等待所述資源,則所述FTDLM模塊允許所述資源上的預(yù)定數(shù)量的未決事務(wù)運 行及提交,且隨后釋放對所述分布式鎖定的所有權(quán)。
      7、 如權(quán)利要求6所述的系統(tǒng),其中一旦所述FTDLM模塊釋放對所述分布式鎖 定的所有權(quán),則將所述節(jié)點X放置在所述隊列中,且在其他節(jié)點完成對所述資源的使 用后,節(jié)點X重新獲取對所述分布式鎖定的所有權(quán)。
      8、 如權(quán)利要求l所述的系統(tǒng),其中在資源的分布式鎖定所有權(quán)被轉(zhuǎn)移到節(jié)點時, 所述FTDLM模塊允許所有等待所述資源的事務(wù)同時執(zhí)行。
      9、 如權(quán)利要求l所述的系統(tǒng),其中將所述全序輸送裝置模塊集成到所述FTDLM 模塊中。
      10、 如權(quán)利要求l所述的系統(tǒng),其中在正使用分布式鎖定的節(jié)點處提交所有事務(wù) 后,所述FTDLM模塊將對所述鎖定的所有權(quán)保持在所述節(jié)點處,直到或除非另一節(jié) 點請求所述分布式鎖定。
      11、 如權(quán)利要求l所述的系統(tǒng),其中所述FTDLM模塊使用調(diào)度以確保以一定的公平度將資源存取分布在所述節(jié)點之間。
      12、 如權(quán)利要求l所述的系統(tǒng),其中所述FTDLM模塊允許N個事務(wù)在釋放分布式鎖定之前運行。
      13、 如權(quán)利要求l所述的系統(tǒng),其中在正常的正向處理期間在瞬時存儲器中更新 所述隊列。
      14、 如權(quán)利要求13所述的系統(tǒng),其中所述隊列是FIFO隊列,且當(dāng)檢測到故障或 從故障中恢復(fù)時,每個隊列的頂部要素被復(fù)制到持久性存儲裝置中及從所述持久性存 儲裝置中讀取。
      15、 如權(quán)利要求l所述的系統(tǒng),其中所述FTDLM模塊能夠通過單個多播消息中 數(shù)個分布式鎖定的分批入隊及出隊而在一個安全的全有序廣播中跨越節(jié)點獲取及釋放 多個分布式鎖定。
      16、 如權(quán)利要求15所述的系統(tǒng),其中所述單個多播消息用于分級鎖定所有權(quán)轉(zhuǎn)移。
      17、 如權(quán)利要求l所述的系統(tǒng),其中存儲于任何一個數(shù)據(jù)庫中的資源可由操作于 不同節(jié)點上的應(yīng)用程序同吋存取,且甚至在面臨進(jìn)程故障或網(wǎng)絡(luò)分割時仍維持?jǐn)?shù)據(jù)一 致性。
      18、 如權(quán)利要求1所述的系統(tǒng),其中所述系統(tǒng)利用所述全序輸送裝置的擴(kuò)展虛擬 同步語義以實施基于成員關(guān)系定額的故障恢復(fù)系統(tǒng),其中達(dá)成一致的成員關(guān)系被本地 保留于每個節(jié)點處。
      19、 如權(quán)利要求l所述的系統(tǒng),其中所述FTDLM模塊進(jìn)一步包括-定額計算狀態(tài)機,其耦合到所述全序輸送裝置模塊,用于基于本地保留的成員關(guān)系在甚至面臨網(wǎng)絡(luò)分割及進(jìn)程故障時仍保證互斥;n個鎖定隊列狀態(tài)機,其中n是資源數(shù)量,每個鎖定隊列狀態(tài)機用于維持所述隊 列并起始分布式鎖定的所有權(quán)轉(zhuǎn)移;及鎖定管理器狀態(tài)機,其用于為請求存取所述資源的一者或多者的應(yīng)用程序獲取分 布式鎖定,及通知適當(dāng)?shù)逆i定隊列狀態(tài)機處理所述請求。
      20、 一種分布式鎖定管理器模塊,其用于調(diào)節(jié)包含多個節(jié)點的系統(tǒng)中的應(yīng)用程序 對資源的存取,所述多個節(jié)點分別以通信方式耦合到網(wǎng)絡(luò),所述模塊包括針對每個資源的隊列,所述隊列識別擁有所述資源的分布式鎖定的節(jié)點,其中跨 越所述節(jié)點復(fù)制每個隊列;及全序輸送裝置模塊,其用于以通信方式將其節(jié)點耦合到所述網(wǎng)絡(luò),且對各節(jié)點之 間的消息接發(fā)施加全排序協(xié)議。
      21、 如權(quán)利要求20所述的模塊,其進(jìn)一步包括-定額計算狀態(tài)機,其耦合到所述全序輸送裝置模塊,用于基于本地保留的成員關(guān) 系在甚至向臨網(wǎng)絡(luò)分割及進(jìn)程故障時仍保證互斥;n個鎖定隊列狀態(tài)機,其中n是資源數(shù)量,每個鎖定隊列狀態(tài)機用于維持所述隊列及起始分布式鎖定的所有權(quán)轉(zhuǎn)移;及鎖定管理器狀態(tài)機,其用于為請求存取所述資源的一者或多者的應(yīng)用程序獲取分 布式鎖定,及通知適當(dāng)?shù)逆i定隊列狀態(tài)機處理所述請求。
      22、 如權(quán)利要求20所述的模塊,其進(jìn)一步包括持久性存儲裝置,其用于存儲在檢測到故障或從故障中恢復(fù)時指示當(dāng)前鎖定所有 權(quán)的隊列要素。
      23、 如權(quán)利要求22所述的模塊,其中在所有節(jié)點同時失效的情況下,所述模塊 進(jìn)步配置有FPMS (正向處理成員組)能力,借此每個節(jié)點在進(jìn)入及退出定額狀態(tài) 時保留一組可達(dá)到的節(jié)點,因此盡管完全丟失瞬時狀態(tài)仍能實現(xiàn)故障恢復(fù)。
      24、 如權(quán)利要求23所述的模塊,其中初始的先前定額是完全成員關(guān)系,且如果 在當(dāng)前的可達(dá)到節(jié)點組中檢測到大部分先前定額,則建立定額狀態(tài)。
      25、 如權(quán)利要求20所述的模塊,其中在發(fā)生故障的節(jié)點恢復(fù)并再附著到操作群 組的情況下,所述模塊通過使最新節(jié)點發(fā)送所述恢復(fù)節(jié)點必需的數(shù)據(jù)來更新所述恢復(fù) 節(jié)點的數(shù)據(jù)。
      26、 如權(quán)利要求20所述的模塊,其中所述隊列是FIFO隊列,且每個對應(yīng)資源的 分布式鎖定所有權(quán)被轉(zhuǎn)移到在所述隊列中以FIFO次序識別的等待節(jié)點。
      27、 如權(quán)利要求20所述的模塊,其中所述全序輸送裝置模塊被實施為擴(kuò)展虛擬 同步輸送裝置。
      28、 如權(quán)利要求20所述的模塊,其中所述全序輸送裝置模塊利用所述網(wǎng)絡(luò)的多 播能力以確保依序傳遞消息。
      29、 如權(quán)利要求20所述的模塊,其中如果其節(jié)點擁有資源的分布式鎖定,且無 其他節(jié)點正等待所述資源,則所述模塊允許所述資源上的無限制數(shù)量的事務(wù)冋時或連 續(xù)運行。
      30、 如權(quán)利要求20所述的模塊,其中如果其節(jié)點擁有資源的分布式鎖定,且其 他節(jié)點正等待所述資源,則所述模塊允許所述資源上的預(yù)定數(shù)量的未決事務(wù)運行及提 交,且隨后釋放對所述分布式鎖定的所有權(quán)。
      31、 如權(quán)利要求30所述的模塊,其中一旦其釋放所述分布式鎖定的所有權(quán),則 將其節(jié)點放置在所述隊列中,且在其他節(jié)點完成對所述資源的使用后,其節(jié)點重新獲取所述分布式鎖定的所有權(quán)。
      32、 如權(quán)利要求20所述的模塊,其中在將資源的分布式鎖定所有權(quán)轉(zhuǎn)移到其節(jié) 點時,所述模塊允許所有等待所述資源的事務(wù)同時執(zhí)行。
      33、 如權(quán)利要求20所述的模塊,其中在提交正使用分布式鎖定的節(jié)點處的所有 事務(wù)后,所述模塊將對所述鎖定的所有權(quán)保持在所述節(jié)點處,直到或除非另一節(jié)點請 求所述分布式鎖定。
      34、 如權(quán)利要求20所述的模塊,其中所述模塊允許N個事務(wù)在釋放分布式鎖定 之前運行。
      35、 如權(quán)利要求20所述的模塊,其中在正常的正向處理期間,于瞬時存儲器中 更新所述隊列。
      36、 如權(quán)利要求20所述的模塊,其中所述模塊能夠通過單個多播消息中數(shù)個分 布式鎖定的分批入隊及出隊而在一個安全的全有序廣播中跨越各節(jié)點獲取及釋放多個 分布式鎖定。
      37、 如權(quán)利要求36所述的模塊,其中所述單個多播消息用于分級鎖定所有權(quán)轉(zhuǎn)移。
      38、 如權(quán)利要求20所述的模塊,其中所述模塊利用所述全序輸送裝置的擴(kuò)展虛擬同步語義以實施基于成員關(guān)系定額的故障恢復(fù)系統(tǒng),其中將達(dá)成一致的成員關(guān)系本 地保留于每個節(jié)點處。
      39、 一種用于調(diào)節(jié)系統(tǒng)中應(yīng)用程序?qū)Y源的存取的分布式鎖定管理器方法,所述 系統(tǒng)包含多個節(jié)點,所述多個節(jié)點分別以通信方式耦合到網(wǎng)絡(luò),所述方法包括針對每個資源提供一隊列;基于隊列內(nèi)容識別擁有對應(yīng)于所述隊列的所述資源的分布式鎖定的節(jié)點; 跨越所述節(jié)點復(fù)制每個隊列;及 對各節(jié)點之間的消息接發(fā)施加全排序協(xié)議。
      40、 如權(quán)利要求39所述的方法,其進(jìn)一步包括基于本地保留的成員關(guān)系,甚至在面臨網(wǎng)絡(luò)分割和進(jìn)程故障時仍保證互斥 維持所述隊列且起始分布式鎖定的所有權(quán)轉(zhuǎn)移;及為請求存取所述資源的一者或多者的應(yīng)用程序獲取分布式鎖定,并處理所述請求。
      全文摘要
      本文揭示管理及調(diào)節(jié)對分布式數(shù)據(jù)的存取的分布式事務(wù)與鎖定管理技術(shù)。提供一種鎖定管理器模塊以調(diào)節(jié)具有多個節(jié)點的系統(tǒng)中的應(yīng)用程序?qū)Y源的存取,所述多個節(jié)點分別以通信方式耦合到網(wǎng)絡(luò)。所述模塊可被配置成容錯式。在一個實施例中,模塊使用全有序輸送裝置對各節(jié)點之間的消息接發(fā)施加全排序協(xié)議。所述模塊可利用所述網(wǎng)絡(luò)的多播能力(例如實現(xiàn)多播的以太網(wǎng)或其他網(wǎng)絡(luò)特性)。所述模塊針對每個資源均包含一隊列,所述隊列識別擁有所述資源的分布式鎖定的節(jié)點??煽缭椒植际脚渲弥械乃龉?jié)點復(fù)制每個隊列。
      文檔編號G06F9/46GK101273333SQ200680018705
      公開日2008年9月24日 申請日期2006年4月12日 優(yōu)先權(quán)日2005年4月13日
      發(fā)明者卡爾·胡, 弗雷德里克·A·小湯普金斯, 邁克爾·泰克塞拉 申請人:普羅格雷斯軟件公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1