專利名稱:應(yīng)用程序?qū)嵗筒樵兇鎯Φ闹谱鞣椒?br>
技術(shù)領(lǐng)域:
本發(fā)明涉及持久保存,尤其涉及應(yīng)用程序?qū)嵗筒樵兇鎯Α?br>
背景技術(shù):
長期運行的應(yīng)用程序?qū)嵗?,諸如例如工作流應(yīng)用程序的實例,通常得益于周期性 地持久保存其工作以允許應(yīng)用程序?qū)嵗阱e誤、崩潰或機(jī)器失效之后恢復(fù)。持久保存工作 還可允許應(yīng)用程序臨時地空閑并且使它們的資源得到重新分配。為了持久保存工作,應(yīng)用 程序主機(jī)可對應(yīng)用程序?qū)嵗某志帽4娴臓顟B(tài)和該實例的運行時狀態(tài)進(jìn)行協(xié)調(diào)以保證一 致的檢查點被創(chuàng)建。例如,實例的持久保存的狀態(tài)可能需要與應(yīng)用程序事務(wù)、消息通知、鎖、 本地狀態(tài)高速緩存等進(jìn)行協(xié)調(diào)。一個或多個實例的持久保存的狀態(tài)的權(quán)威性版本可被存儲 到此處被稱為實例存儲的存儲中。
在持久保存應(yīng)用程序?qū)嵗隣顟B(tài)之后,可在實例存儲中查詢持久保存的實例狀態(tài)的 各方面,例如支持用于系統(tǒng)管理、診斷、健康監(jiān)控、業(yè)務(wù)流程跟蹤、報告、可視化或分析的應(yīng) 用程序工具。如此處使用的,查詢及類似的術(shù)語泛指讀取已存儲的數(shù)據(jù)。獨立于正在執(zhí)行 實例的主應(yīng)用程序來構(gòu)想和實現(xiàn)應(yīng)用程序工具。發(fā)明內(nèi)容
此處描述的工具和技術(shù)通過還將對應(yīng)的表示存儲到一個或多個查詢存儲中可增 強(qiáng)對實例存儲中持久保存的狀態(tài)表示的使用。這可提供好處,諸如允許應(yīng)用程序工具在查 詢存儲中查詢應(yīng)用程序狀態(tài)而無需鎖定實例存儲。
在一個實施例中,工具和技術(shù)可包括發(fā)出用于更新應(yīng)用程序的實例的狀態(tài)的實例 持久保存命令。響應(yīng)于該持久保存命令,可啟動關(guān)于實例存儲的事務(wù)。作為事務(wù)的一部分, 可將更新的第一表示存儲到實例存儲中,并可將更新的第二表示存儲到隊列中。在存儲第 一和第二表示之后可提交該事務(wù)。在提交事務(wù)之后,可處理第二表示以將更新的第三表示 存儲到查詢存儲中。
如此處使用的,術(shù)語隊列是指用于正在等待被處理的數(shù)據(jù)的存儲。例如,它可指用 于正在等待被發(fā)布的數(shù)據(jù)的存儲。隊列可以是各種形式中的任一種,諸如數(shù)據(jù)庫或數(shù)據(jù)庫 的部分。此外,隊列可使用各種隊列處理技術(shù)中的任一種,諸如先進(jìn)先出技術(shù)或某些其他技 術(shù)。
在工具和技術(shù)的另一個實施例中,可從查詢服務(wù)接收對應(yīng)用程序?qū)嵗隣顟B(tài)更新的 結(jié)果的訂閱請求。訂閱請求可包括過濾器??蓮慕Y(jié)果隊列接收一組應(yīng)用程序?qū)嵗隣顟B(tài)更新 的結(jié)果。此外,過濾器可被應(yīng)用于來自結(jié)果隊列的該組結(jié)果。可向查詢服務(wù)發(fā)布滿足過濾 器的一組要求的該組結(jié)果。此外,可將與被發(fā)布到查詢服務(wù)的結(jié)果相對應(yīng)的應(yīng)用程序?qū)嵗隣顟B(tài)更新的表示存儲到查詢存儲中。
如此處使用的,術(shù)語“結(jié)果”及類似的術(shù)語是指對應(yīng)用程序?qū)嵗臓顟B(tài)進(jìn)行的更新 的表示。例如,“結(jié)果”可指示創(chuàng)建或刪除實例、為變量賦予特定的值等。結(jié)果可與實例存 儲中存儲的表示相同,或者它們可以是某些其他形式。例如,結(jié)果可(例如,通過指示變量的 當(dāng)前值)指示當(dāng)前狀態(tài)和/或(例如,通過指示變量被改變之前的值和變量被改變之后的值) 指示所作出的改變。類似地,狀態(tài)更新的表示可指當(dāng)前狀態(tài)的表示和/或已對狀態(tài)所作出 的改變的表示。為方便起見,術(shù)語結(jié)果通常用來指正在被傳輸?shù)谋硎?,而術(shù)語表示通常用來 指正在被存儲的表示。
在工具和技術(shù)的又一個實施例中,應(yīng)用程序主機(jī)可被配置為運行一個或多個應(yīng)用 程序?qū)嵗?。實例存儲可連接到應(yīng)用程序主機(jī),并且結(jié)果隊列可通過實例存儲連接到應(yīng)用程 序主機(jī)。應(yīng)用程序主機(jī)、實例存儲以及結(jié)果隊列可被配置為響應(yīng)于實例持久保存命令而參 與事務(wù),該實例持久保存命令用于更新運行在應(yīng)用程序主機(jī)上的應(yīng)用程序的實例的狀態(tài)。 每個這樣的事務(wù)可包括響應(yīng)于用于更新應(yīng)用程序?qū)嵗臓顟B(tài)的實例持久保存命令啟動事 務(wù);將更新的第一表示存儲到實例存儲中;將更新的第二表示存儲到結(jié)果隊列中;并且提 交事務(wù)。發(fā)布方可連接到隊列,并且查詢服務(wù)可連接到發(fā)布方。發(fā)布方可被配置為處理結(jié)果 隊列中的更新表示,并且向一個或多個查詢服務(wù)發(fā)布來自隊列的結(jié)果。無需鎖定實例存儲 就可實現(xiàn)上述處理和發(fā)布。查詢存儲可連接到查詢服務(wù),并且查詢服務(wù)中的每一個可被配 置為通過將與接收到的結(jié)果相對應(yīng)的更新的表示存儲到查詢存儲中來響應(yīng)接收到的結(jié)果。
提供本發(fā)明內(nèi)容是為了以簡化的形式介紹一些概念。這些概念將在以下具體實施 方式中進(jìn)一步描述。本發(fā)明內(nèi)容并不旨在標(biāo)識所要求保護(hù)主題的關(guān)鍵特征或必要特征,也 不旨在用于限制所要求保護(hù)主題的范圍。類似地,本發(fā)明不限于解決在背景技術(shù)、具體實施 方式、或附圖中討論的特定技術(shù)、工具、環(huán)境、缺點、或優(yōu)點的實現(xiàn)。
圖1是其中可實現(xiàn)所描述的各實施例中的一個或多個的適合的計算環(huán)境的框圖。
圖2是實例和查詢存儲系統(tǒng)的示意圖。
圖3是實例和查詢存儲系統(tǒng)的部分的示意圖。
圖4是實例和查詢存儲系統(tǒng)的部分的示意。
圖5是實例和查詢存儲技術(shù)的流程圖。
圖6是另一個實例和查詢存儲技術(shù)的流程圖。
具體實施方式
此處描述的各實施例涉及用于應(yīng)用程序?qū)嵗隣顟B(tài)信息的改進(jìn)的存儲和/或查詢 的技術(shù)和工具。這樣的改進(jìn)可源于分開或組合地使用各種技術(shù)和工具。
這樣的技術(shù)和工具可包括響應(yīng)于用于更新應(yīng)用程序?qū)嵗臓顟B(tài)的實例持久保存 命令,啟動關(guān)于實例存儲的事務(wù)。事務(wù)可包括將更新的第一表示存儲到實例存儲中,將更新 的第二表示存儲到隊列中,并且隨后提交該事務(wù)。這可包括將命令的結(jié)果傳輸?shù)疥犃?,并?可使用第一表示中沒有的應(yīng)用程序數(shù)據(jù)來補充那些結(jié)果。在提交事務(wù)之后,可處理更新的 第二表示以將更新的第三表示存儲到查詢存儲中。無需鎖定實例存儲就可實現(xiàn)這個處理,并且無需鎖定實例存儲還可對查詢存儲中的信息實現(xiàn)查詢。因此,可實現(xiàn)對查詢存儲的更新和查詢而不會降低實例存儲的性能。這可進(jìn)而改善正被持久保存的應(yīng)用程序的性能,因為這樣的應(yīng)用程序可花費更少的時間等待將在實例存儲中執(zhí)行的操作。
可使用發(fā)布一訂閱技術(shù)來處理隊列中的表示。例如,每個連接到不同的查詢存儲的查詢服務(wù)可向連接到隊列的發(fā)布方進(jìn)行訂閱。查詢服務(wù)可向過濾器提供其訂閱信息。發(fā)布方可根據(jù)訂閱信息將來自隊列的表示作為結(jié)果發(fā)布到查詢服務(wù)。響應(yīng)于這些發(fā)布,查詢服務(wù)使用對應(yīng)用程序?qū)嵗隣顟B(tài)的更新的表示來更新對應(yīng)的查詢存儲。如果查詢存儲不同步 (例如,由于存儲已崩潰、僅最近訂閱、或者其訂閱中已發(fā)生變化),則還可使用將查詢存儲與實例存儲進(jìn)行同步的技術(shù)。
所附權(quán)利要求中定義的主題不必限于本文描述的益處。本發(fā)明的特定實現(xiàn)可提供本文描述的益處的全部、一些、或未提供本文描述的益處。盡管本文出于呈現(xiàn)的目的以特定的順序次序描述了用于各種技術(shù)的操作,但應(yīng)理解除非要求特定的排序,否則這種描述方式涵蓋了操作順序上的重新安排。例如,在某些情況下,可以重新安排或并發(fā)執(zhí)行順序地描述的操作。本文參照流程圖描述的技術(shù)可被用于本文描述的一個或多個系統(tǒng)和/或用于一個或多個其他系統(tǒng)。例如,本文描述的各種過程可用硬件或軟件、或兩者的組合來實現(xiàn)。此外,為了簡單起見,流程圖可能未示出可結(jié)合其他技術(shù)來使用特定技術(shù)的各種方式。
1.示例性計算環(huán)境
圖1示出其中可實現(xiàn)所描述的各實施例中的一個或多個的合適的計算環(huán)境(100) 的通用示例。例如,一個或多個這樣的計算環(huán)境可用于托管此處討論的各種模塊,諸如應(yīng)用程序主機(jī)、持久保存提供方、實例存儲、結(jié)果隊列、發(fā)布方、查詢服務(wù)、查詢存儲、和/或應(yīng)用程序工具。一般而言,可使用各種不同的通用或?qū)S糜嬎阆到y(tǒng)配置。適用于此處所描述的工具和技術(shù)的公知計算系統(tǒng)配置的示例包括,但不限于,服務(wù)器場和服務(wù)器群集、個人計算機(jī)、服務(wù)器計算機(jī)、手持式或膝上型設(shè)備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、可編程消費電子產(chǎn)品、網(wǎng)絡(luò)PC、小型機(jī)、大型計算機(jī)、包括上述系統(tǒng)或設(shè)備中的任一個的分布式計算環(huán)士音坐-1 寸 ο
計算環(huán)境(100)不旨在對本發(fā)明的使用范圍或功能提出任何限制,因為本發(fā)明可以在完全不同的通用或?qū)S糜嬎悱h(huán)境中實現(xiàn)。
參考圖1,計算環(huán)境(100)包括至少一個處理單元(110)和存儲器(120)。在圖1 中,這一最基本的配置(130)被包括在虛線內(nèi)。處理單元(110)執(zhí)行計算機(jī)可執(zhí)行指令,并且可以是真實或虛擬處理器。在多處理系統(tǒng)中,多個處理單元執(zhí)行計算機(jī)可執(zhí)行指令以提高處理能力。存儲器(120)可以是易失性存儲器(例如,寄存器、高速緩存、RAM)、非易失性存儲器(例如,R0M、EEPR0M、閃存)、或兩者的某種組合。存儲器(120)存儲實現(xiàn)應(yīng)用程序?qū)嵗筒樵兇鎯Φ能浖?180 )。
盡管為了清楚起見用線條示出了圖1的各框,但是,實際上,描繪各組件并不是那樣清楚,并且用比喻方法,圖1以及下文討論的其他附圖的線條更精確地將是灰色的和模糊的。例如,可以將諸如顯示設(shè)備等的呈現(xiàn)組件認(rèn)為是I/o組件。而且,處理器具有存儲器。發(fā) 明人關(guān)于此點認(rèn)識到,這是本領(lǐng)域的特性,并且重申,圖1的圖示只是例示可結(jié)合本發(fā)明的一個或多個實施例來使用的示例性計算設(shè)備。諸如“工作站”、“服務(wù)器”、“膝上型計算機(jī)”、“手持式設(shè)備”等分類之間沒有區(qū)別,它們?nèi)慷急徽J(rèn)為是在圖1的范圍之內(nèi)的并且被稱為“計算機(jī)”、“計算環(huán)境”、或“計算設(shè)備”。
計算環(huán)境(100)可具有附加特征。在圖1中,計算環(huán)境(100)包括存儲(140)、一個 或多個輸入設(shè)備(150)、一個或多個輸出設(shè)備(160)以及一個或多個通信連接(170)。諸如 總線、控制器或網(wǎng)絡(luò)等互連機(jī)制(未示出)將計算環(huán)境(100)的各組件互連。通常,操作系統(tǒng) 軟件(未示出)為在計算環(huán)境(100)中執(zhí)行的其它軟件提供操作環(huán)境,并協(xié)調(diào)計算環(huán)境(100) 的各組件的活動。
存儲(140)可以是可移動或不可移動的,并可包括諸如磁盤、磁帶或磁帶盒、 CD-R0M、CD-RW、DVD之類的非瞬態(tài)計算機(jī)可讀存儲介質(zhì),或者可用于儲存信息并可在計算環(huán) 境(100)內(nèi)訪問的任何其它介質(zhì)。存儲(140)存儲用于軟件(180)的指令。
輸入設(shè)備(150)可以是諸如鍵盤、鼠標(biāo)、筆或跟蹤球等觸摸輸入設(shè)備;語音輸入設(shè) 備;掃描設(shè)備;網(wǎng)絡(luò)適配器KD/DVD讀取器;或可向計算環(huán)境(100)提供輸入的另一設(shè)備。 輸出設(shè)備(160)可以是顯示器、打印機(jī)、揚聲器、⑶/DVD刻錄機(jī)、網(wǎng)絡(luò)適配器、或從計算環(huán)境 (100)提供輸出的另一設(shè)備。
通信連接(170)允許通過通信介質(zhì)與另一計算實體進(jìn)行通信。因此,計算環(huán)境 (100)可使用通往諸如個人計算機(jī)、服務(wù)器、路由器、網(wǎng)絡(luò)PC、對等設(shè)備或另一常見網(wǎng)絡(luò)節(jié)點 等一個或多個遠(yuǎn)程計算設(shè)備的邏輯連接而工作在聯(lián)網(wǎng)環(huán)境中。通信介質(zhì)以已調(diào)制數(shù)據(jù)信號 的形式傳達(dá)諸如數(shù)據(jù)或計算機(jī)可執(zhí)行指令或請求等信息。已調(diào)制數(shù)據(jù)信號是以在信號中編 碼信息的方式來設(shè)置或改變其一個或多個特征的信號。作為示例而非限制,通信介質(zhì)包括 利用電、光、射頻(RF)、紅外線、聲音或其他載體實現(xiàn)的有線或無線技術(shù)。
各種工具和技術(shù)可以在計算機(jī)可讀介質(zhì)的一般上下文中描述。計算機(jī)可讀介質(zhì)是 可以在計算環(huán)境內(nèi)被訪問的任何可用介質(zhì)。作為示例而非局限,對于計算環(huán)境(100),計算 機(jī)可讀介質(zhì)包括存儲器(120)、存儲(140)、和以上的組合。
這些工具和技術(shù)可在諸如程序模塊中所包括的在目標(biāo)真實或虛擬處理器上的計 算環(huán)境中執(zhí)行的計算機(jī)可執(zhí)行指令的一般上下文中描述。一般而言,程序模塊包括執(zhí)行特 定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、庫、對象、類、組件、數(shù)據(jù)結(jié)構(gòu)等等。程序模塊 的功能可以按需在各個實施例中進(jìn)行組合或在程序模塊之間拆分。程序模塊的計算機(jī)可執(zhí) 行指令可以在本地或分布式計算環(huán)境內(nèi)執(zhí)行。在分布式計算環(huán)境中,程序模塊可以位于本 地和遠(yuǎn)程計算機(jī)存儲介質(zhì)中。
出于表示的目的,詳細(xì)描述使用了如“確定”、“選擇”、“調(diào)整”和“操作”等術(shù)語來描 述計算環(huán)境中的計算機(jī)操作。這些以及其他類似術(shù)語是對計算機(jī)執(zhí)行的操作的高層抽象, 并且不應(yīng)混淆于人類執(zhí)行的動作,除非明確指出人類(諸如“用戶”)的動作執(zhí)行。對應(yīng)于這 些術(shù)語的實際的計算機(jī)操作取決于實現(xiàn)而不同。
I1.應(yīng)用程序?qū)嵗鎯筒樵兇鎯ο到y(tǒng)和環(huán)境
圖2是結(jié)合可以實現(xiàn)所描述的實施例中的一個或多個的應(yīng)用程序?qū)嵗筒樵兇?儲計算機(jī)環(huán)境或系統(tǒng)(200)的框圖。系統(tǒng)(200)可包括被配置為運行一個或多個應(yīng)用程序 實例的至少一個應(yīng)用程序主機(jī)(210)。系統(tǒng)(200)還可包括可單獨地查詢應(yīng)用程序?qū)嵗?狀態(tài)信息的一個或多個應(yīng)用程序工具(212)。這些應(yīng)用程序工具(212)可支持諸如系統(tǒng)管 理、診斷、健康監(jiān)控、業(yè)務(wù)流程跟蹤、報告、可視化或分析的特征。
應(yīng)用程序主機(jī)(210)是模塊,諸如可執(zhí)行應(yīng)用程序?qū)嵗⑶铱刹倏卮鎯υ趯嵗鎯?220)中的實例狀態(tài)以反映實例執(zhí)行結(jié)果的執(zhí)行工作流程序?qū)嵗鎯?220)可以是持久 存儲的形式,諸如持久數(shù)據(jù)庫。應(yīng)用程序主機(jī)(210)可通過持久保存提供方(224)向?qū)嵗?存儲(220 )提交實例持久保存命令(222 )。持久保存提供方(224)可連接到實例存儲(220 ) 以及應(yīng)用程序主機(jī)(210)(實際上,持久保存提供方可以是應(yīng)用程序主機(jī)(220)的部分),以 將命令傳遞給實例存儲(220),并且可響應(yīng)于所發(fā)出的命令(222),跟蹤由實例存儲所返回 的應(yīng)用程序狀態(tài)結(jié)果(226)。
使應(yīng)用程序主機(jī)(210)和應(yīng)用程序工具(212)操作相同的實例存儲(220)可能存 在缺點。例如,在兩個進(jìn)程之間對數(shù)據(jù)的協(xié)調(diào)訪問可能導(dǎo)致表、頁、行、值或?qū)嵗鎯?220) 的其它類型的區(qū)域的鎖定。這樣的鎖定可具有計算開銷,當(dāng)由應(yīng)用程序工具(212)之一執(zhí) 行查詢時,該計算開銷通過使應(yīng)用程序主機(jī)(210)的執(zhí)行臨時阻塞來降低執(zhí)行實例的速率。 在正在執(zhí)行查詢命令時,同一實例存儲(220)上的應(yīng)用程序?qū)嵗筒樵兊耐瑫r執(zhí)行,通過對 實例持久保存命令進(jìn)行串行化或延遲可類似地引起應(yīng)用程序級的鎖定開銷。
此外,可進(jìn)行有利于實例執(zhí)行的實例存儲(220)中的數(shù)據(jù)的存儲組織,而不同的存 儲組織可有利于查詢。由于應(yīng)用程序工具可獨立于或者甚至在應(yīng)用程序主機(jī)之后被開發(fā), 因此將這些不同的偏好包含在單個存儲方案中可能是困難的。
相反,圖2的系統(tǒng)(200)可復(fù)制實例存儲(220)的更新,從而實例執(zhí)行和查詢可彼 此相隔離。盡管這種異步的復(fù)制可能延遲實例狀態(tài)變化到查詢處理器的傳播,但很多種類 的應(yīng)用程序工具(212)對該延遲是不敏感的。例如,交互式應(yīng)用程序已經(jīng)被顯示信息和用 戶可輸入命令的速率所限制。報告應(yīng)用程序可以低優(yōu)先級在后臺運行,并且反映在瀏覽報 告之前就已經(jīng)存在數(shù)小時的結(jié)果。歷史紀(jì)錄可對實例狀態(tài)中正在進(jìn)行的變化不敏感。這些 類型的延遲可縮小傳播對查詢中使用的實例存儲(220)的更新的異步延遲。
圖2的系統(tǒng)可包括諸如通過實例存儲(220)和/或持久保存提供方(224)連接到 應(yīng)用程序主機(jī)(210)的結(jié)果隊列(240)。結(jié)果隊列可以是持久存儲的形式,諸如持久數(shù)據(jù) 庫。結(jié)果隊列(240)可從提供應(yīng)用程序工具(212)要查詢的狀態(tài)更新的表示的后端系統(tǒng)中 異步地解耦合與由應(yīng)用程序主機(jī)(210)運行的應(yīng)用程序?qū)嵗诮换サ那岸讼到y(tǒng)(諸如持 久保存提供方(224)和實例存儲(220))。由于此解耦合,后端系統(tǒng)(可包括一個或多個附加 隊列)的引入對于更新的所感知的延遲具有很小或者沒有影響,該后端系統(tǒng)用于傳播對服 務(wù)查詢中使用的應(yīng)用程序?qū)嵗臓顟B(tài)進(jìn)行的更新的表示。
仍參考圖2,應(yīng)用程序主機(jī)(210)可被配置為執(zhí)行實例持久保存命令(222)以更新 實例存儲(220)中實例狀態(tài)的表示。應(yīng)用程序主機(jī)(210)還可具有應(yīng)用程序工具(212)感 興趣的但不是將要存儲到實例存儲(220)中的實例狀態(tài)的部分的應(yīng)用程序數(shù)據(jù)(242)。
持久保存提供方(224)可被配置為向?qū)嵗鎯?220)提供合適的實例持久保存命 令(222)。響應(yīng)于該實例持久保存命令(222),實例存儲(220)可存儲由實例持久保存命令 (222)所表示的更新的表示(244),并且可向持久保存提供方(224)提供實例持久保存命令 (222)的結(jié)果(226)。
持久保存提供方(224)可響應(yīng)于實例持久保存命令(222)的結(jié)果(226)來創(chuàng)建結(jié) 果(245 )。結(jié)果(245 )可類似于結(jié)果(226 ),但使用結(jié)果(226 )中沒有的來自應(yīng)用程序主機(jī) 的應(yīng)用程序數(shù)據(jù)(242)對其進(jìn)行補充。此外,結(jié)果(245)可排除實例持久保存命令(222)的 結(jié)果(226)的短暫部分。
圖3示出應(yīng)用程序主機(jī)(210)通過持久保存提供方(224)將“保存實例”命令傳 遞到實例存儲(220)的情形,可處理命令(322)以對實例狀態(tài)更新表示(244)作出相應(yīng)的 改變。實例存儲(220 )可將結(jié)果(326 )返回給持久保存提供方(224),該結(jié)果可包括表示更 新的以下數(shù)據(jù)“寫數(shù)據(jù)奶酪=瑞士干酪(Cheese=Swiss);上一次更新09年12月17日 01:35 ;未鎖定實例”。應(yīng)用程序主機(jī)(210)可向結(jié)果(326)添加應(yīng)用程序數(shù)據(jù)(342)(可包 括“上一動作批準(zhǔn)抵押”)以生成結(jié)果(345)。結(jié)果(345)還可將短暫的“未鎖定實例”數(shù) 據(jù)從結(jié)果(326)中省略。因此,通過將應(yīng)用程序數(shù)據(jù)(342) “上一動作”添加到結(jié)果(326) 并且將短暫的“未鎖定”動作從結(jié)果(326)中移除,可從結(jié)果(326)生成結(jié)果(345)??赏ㄟ^ 各種模塊中的一個或多個來實現(xiàn)結(jié)果(345)的生成,諸如應(yīng)用程序主機(jī)(210)、持久保存提 供方(224)、實例存儲(220)、和/或結(jié)果隊列(240)。
回頭參考圖2,持久保存提供方(224)可將結(jié)果(245)排入到結(jié)果隊列(240)中。可 在事務(wù)下執(zhí)行實例持久保存命令(222),其中作為事務(wù)的部分原子地進(jìn)行對應(yīng)用程序狀態(tài) 的改變、對實例狀態(tài)的改變、以及將作為狀態(tài)更新表示(246)的結(jié)果排入到結(jié)果隊列(240) 中。應(yīng)用程序主機(jī)(210)、實例存儲(220)以及結(jié)果隊列(240)可被配置為響應(yīng)于實例持 久保存命令(222)而參與這樣的事務(wù),該實例持久保存命令用于更新運行在應(yīng)用程序主機(jī) (210)上的應(yīng)用程序的實例的狀態(tài)。每個這樣的事務(wù)包括響應(yīng)于用于更新應(yīng)用程序?qū)嵗?狀態(tài)的實例持久保存命令(222)來啟動事務(wù);將更新的第一表示作為表示(244)的部分存 儲到實例存儲(220)中;將更新的第二表示作為表示(246)的部分存儲到結(jié)果隊列(240) 中;并且提交事務(wù)。
仍參考圖2,一個或多個查詢服務(wù)(260和262)可連接到結(jié)果更新發(fā)布方(270),該 結(jié)果更新發(fā)布方進(jìn)而連接到結(jié)果隊列(240)。查詢服務(wù)(260)通過將訂閱信息(272)發(fā)送 到與結(jié)果隊列(240)連接的結(jié)果更新發(fā)布方(270)來注冊對接收實例持久保存命令結(jié)果的 興趣。訂閱信息(272)可包括過濾器,該過濾器可在訂閱中包括例如實例持久保存命令結(jié) 果的全部,或者,可替換的,僅實例持久保存命令結(jié)果的一部分。例如,過濾器可在訂閱中僅 包括用于實例123的實例持久保存命令結(jié)果、僅用于下午5點以后運行的命令的實例持久 保存命令結(jié)果、或者僅設(shè)置特定變量的值的實例持久保存命令結(jié)果。除了訂閱過濾器,訂閱 信息(272)還可包括用于訂閱查詢服務(wù)(260)的聯(lián)系人信息。
結(jié)果更新發(fā)布方(270)通過將實例持久保存命令結(jié)果(274)從結(jié)果隊列(240)中 出列來處理已排隊的更新表示(246)。出列的實例持久保存命令結(jié)果(274)的集合之間的 邊界可不同于對應(yīng)的結(jié)果(245)被排入時的邊界。例如,持久保存提供方(224)可排入用于 單個事務(wù)下所進(jìn)行的全部改變的一批實例持久保存命令結(jié)果(245),而結(jié)果更新發(fā)布方可 單獨地接收出列結(jié)果(274)中的每個改變。
結(jié)果更新發(fā)布方(270)可應(yīng)用訂閱信息(272)來向訂閱者中的每一位發(fā)布實例持 久保存命令結(jié)果(276),訂閱者的訂閱過濾器與實例持久保存命令結(jié)果(274)的出列集合 相匹配??赏ㄟ^各種方式中的任一種來發(fā)布實例持久保存命令結(jié)果。例如,發(fā)布方(270) 可通過將發(fā)布結(jié)果(276 )作為消息或事件發(fā)送來將結(jié)果(276 )推至訂閱者查詢服務(wù)(260 ); 或者可創(chuàng)建訂閱者可日后從中閱讀已發(fā)布的結(jié)果(276)的結(jié)果光標(biāo)。結(jié)果光標(biāo)可在它們中 間共享已發(fā)布的實例持久保存命令結(jié)果(276)的單個拷貝,而不是為每個訂閱者查詢服務(wù) (260和262)復(fù)制結(jié)果。
無需鎖定實例存儲(220)可實現(xiàn)結(jié)果(274和276)的處理和發(fā)布。因此,相對于實 例存儲(220)中的操作可異步地進(jìn)行該發(fā)布。
每個查詢服務(wù)(260和262)可連接到查詢存儲(280),并且被配置為使用接收到的 實例持久保存命令結(jié)果(276)來執(zhí)行對查詢存儲(280)的更新(278),從而查詢存儲(280) 可包括對應(yīng)用程序?qū)嵗臓顟B(tài)進(jìn)行的更新的表示,該應(yīng)用程序?qū)嵗趯嵗鎯?220)中由 應(yīng)用程序主機(jī)(210)托管,且對應(yīng)于查詢服務(wù)(260)接收的已發(fā)布的結(jié)果(276)。查詢存儲 (280)可以是各種類型的存儲中的任一種,諸如一種持久保存或非持久保存存儲。在圖2 中出于簡便起見,查詢存儲(280)被示為用于一個查詢服務(wù)(260),但不用于另一個查詢服 務(wù)(262)。但是,應(yīng)當(dāng)理解,另一個查詢服務(wù)(262)也可更新它自己的查詢存儲。此外,系 統(tǒng)(200)可包括單個查詢服務(wù),或者它可包括比圖2中所示的更多的查詢服務(wù)。同樣,系統(tǒng) (200)可包括更多或更少的其他所示模塊,諸如更多的應(yīng)用程序主機(jī)等。
仍參考圖2,依賴于如何配置訂閱過濾器,查詢存儲(280)可鏡像實例存儲(220) 或者可僅代表實例存儲(220 )的部分。此外,查詢存儲(280 )可包括實例存儲(220 )中沒有 的附加的應(yīng)用程序信息。
實例持久保存命令結(jié)果可由系統(tǒng)(200)中的各種模塊進(jìn)行變換。例如,查詢服務(wù) (260)可在使用已發(fā)布的實例持久保存命令結(jié)果(276)來更新查詢存儲(280)之前執(zhí)行對 它們的變換。同樣,查詢存儲(280 )的組織可與實例存儲(220 )的組織大不相同。例如,查詢 存儲(280 )可以是分布式高速緩存,而實例存儲(220 )可以是關(guān)系數(shù)據(jù)庫。查詢存儲(280 ) 的模式可包含專用于與查詢存儲(280)進(jìn)行交互的應(yīng)用程序工具(212)的表和列,諸如例 如用于由不是實例存儲(220)的一部分的應(yīng)用程序主機(jī)(210)提供的應(yīng)用程序數(shù)據(jù)(242) 的預(yù)定義列。
應(yīng)用程序工具(212)集合可在對應(yīng)的查詢存儲(280)中查詢信息。查詢的執(zhí)行可 獨立于用于實例存儲(220)的存儲組織和運行時偽像,從而無需鎖定實例存儲(220)可更 新查詢存儲(280 )并且查詢可運行在查詢存儲(280 )上。這樣,實例存儲(220 )上的操作可 與查詢存儲(280)上的操作異步地運行。
有時,對實例存儲(220)和查詢存儲(280)的內(nèi)容進(jìn)行初始同步或重新同步可能 是有益的。這些存儲的內(nèi)容的同步是在兩個資源之間的一種類型的傳輸,但可存在用于執(zhí) 行這種傳輸操作的不同策略。
例如,查詢存儲(280)可能不是耐久的,或者可能不存在捕捉由集合(212)中應(yīng)用 程序工具所請求的事件的訂閱者。為了將這樣的查詢存儲(280)與實例存儲(220)進(jìn)行同 步,查詢服務(wù)(260)可向發(fā)布方(270)發(fā)送與實例存儲進(jìn)行同步的請求(未不出)。發(fā)布方 (270 )可通過向?qū)嵗鎯?220 )發(fā)送對同步信息的同步請求(290 )來進(jìn)行響應(yīng),諸如對之前 的實例持久保存命令結(jié)果的重傳。實例存儲(220)可通過以普通方式將同步信息排入到結(jié) 果隊列(240)中來發(fā)送所請求的同步信息(諸如以實例持久保存命令結(jié)果(245)的形式)進(jìn) 行響應(yīng)。發(fā)布方(270)以普通方式將來自隊列(240)的這些實例持久保存命令結(jié)果(274、 276)發(fā)布到查詢服務(wù)(260和/或262)中的一個或多個。
重傳的實例持久保存命令結(jié)果(245)可能不同于那些原始傳輸?shù)?。將參照圖4討 論這一差別的示例。如圖4所示,發(fā)給實例存儲(220)的一系列命令(422)導(dǎo)致以下結(jié)果 序列(426)被返回到持久保存提供方(圖4中未示出)創(chuàng)建實例5 ;實例5奶酪=瑞士干酪;創(chuàng)建實例6 ;實例6奶酪=菠蘿伏洛干酪(Cheese=Prcivolone);實例6奶酪=格里爾干 奶酪(Cheese=Gruyere);刪除實例5。這樣,實例5已被刪除,并且實例6奶酪的值以前是 “菠蘿伏洛干酪”,但已被重寫為“格里爾干奶酪”。實例存儲(220)中的實例狀態(tài)的更新表 示(444)可能僅反映當(dāng)前的狀態(tài)。若是這樣,則當(dāng)前的狀態(tài)可僅指示實例6聲明包括奶酪 =格里爾干奶酪,沒有指示存在實例5,并且沒有指示實例6奶酪之前已被設(shè)置為值“格里 爾干奶酪”。因此,同步結(jié)果可指示導(dǎo)致更新表示(444)中的當(dāng)前狀態(tài)的結(jié)果,但不是整個 結(jié)果序列(426)的歷史。因此,在重寫或刪除實例狀態(tài)的部分之后,重傳的實例持久保存命 令結(jié)果(445)可反映若干實例持久保存命令(422)的累計結(jié)果,而不是命令(422)中的每一 個的中間結(jié)果。或者,實例存儲(220)可保留命令(422)和/或結(jié)果序列(426)的歷史中的 某些或全部,使得同步結(jié)果(445 )可代表上述歷史的全部或部分。
回頭參考圖2,實例持久保存命令結(jié)果(245)和更新表不(444)可具有相關(guān)聯(lián)的時 戳和/或序列號。結(jié)果更新發(fā)布方(270)和實例存儲(220)可使用這些標(biāo)識符來對實例存 儲(220)的僅部分進(jìn)行重新同步。例如,結(jié)果更新發(fā)布方(270)可指示它只想要用于可與 2009年8月份相關(guān)的實例狀態(tài)更新的同步信息。作為另一個示例,結(jié)果更新發(fā)布方(270)可 指示它只想要對之前已被發(fā)送的具有同步號碼1401-1420的實例持久保存命令結(jié)果(245) 的重傳。
類似地,結(jié)果更新發(fā)布方(270)可將同步請求限制為實例存儲(220)的僅部分,諸 如特定實例或特定變量的值。結(jié)果更新發(fā)布方(270)可通過從同步請求(290)中排除實例 持久保存命令結(jié)果(245)不會通過訂閱過濾器中的任一個的要求的實例存儲中的部分,來 使用由訂閱查詢服務(wù)(260和/或262)提供的訂閱過濾器以構(gòu)建這個有界的請求。
一旦接收以已發(fā)布的結(jié)果(276)的形式的同步信息,查詢服務(wù)可使用該同步信息 來對查詢存儲(280)的至少部分和實例存儲(220)的至少部分進(jìn)行同步,諸如通過以普通 方式使用所發(fā)布的結(jié)果(276 )來更新查詢存儲(280 )。
用于在模塊之間傳輸數(shù)據(jù)(諸如應(yīng)用程序數(shù)據(jù)以及用于命令、結(jié)果、訂閱信息、更 新和查詢的數(shù)據(jù))的圖2的模塊之間的連接可以各種方式來實現(xiàn)。例如,可通過函數(shù)調(diào)用 或應(yīng)用程序編程接口調(diào)用的方式實現(xiàn)應(yīng)用程序主機(jī)(210)和持久保存提供方(224)之間的 連接。實例存儲(220)、結(jié)果隊列(240)和查詢存儲(280)可以都是數(shù)據(jù)庫,并且這些數(shù)據(jù) 庫和其他模塊之間的連接可利用數(shù)據(jù)庫連接?;蛘撸綄嵗鎯?220)、結(jié)果隊列(240)和 /或查詢存儲(280)的連接中的某些或全部可使用存儲應(yīng)用程序編程接口來實現(xiàn)。發(fā)布方 (270)和查詢服務(wù)(260)可經(jīng)由網(wǎng)絡(luò)消息傳送連接來連接。代替這些類型的連接和/或除 了這些類型的連接之外,還可使用模塊之間的其它類型的連接。
II1.應(yīng)用程序?qū)嵗筒樵兇鎯夹g(shù)
現(xiàn)在將討論若干應(yīng)用程序?qū)嵗筒樵兇鎯夹g(shù)??梢栽谟嬎悱h(huán)境中執(zhí)行這些技術(shù) 中的每一個。例如,可在包括至少一個處理器和存儲器的計算機(jī)系統(tǒng)中執(zhí)行每種技術(shù),該存 儲器包括存儲于其上的、在由該至少一個處理器執(zhí)行時使該至少一個處理器執(zhí)行該技術(shù)的 指令(存儲器存儲指令(例如,對象代碼),并且當(dāng)處理器執(zhí)行這些指令時,處理器執(zhí)行該技 術(shù))。類似地,一個或多個計算機(jī)可讀存儲介質(zhì)可具有收錄于其上的計算機(jī)可執(zhí)行指令,該 些指令在由至少一個處理器執(zhí)行時使該至少一個處理器執(zhí)行該技術(shù)。
參照圖5,將討論實例和查詢存儲技術(shù)。技術(shù)可包括發(fā)出用于更新應(yīng)用程序的實例的狀態(tài)的實例持久保存命令(510)。響應(yīng)于該持久保存命令,可啟動關(guān)于實例存儲的事務(wù) (520)。作為事務(wù)的部分,可將更新的第一表示存儲到實例存儲中(530),并可將更新的第二 表示存儲到隊列中(540)。在存儲第一和第二表示之后可提交該事務(wù)(550)。在提交事務(wù)之 后(550),可處理更新的第二表示以將更新的第三表示存儲到查詢存儲中(560)??梢詷?biāo)準(zhǔn) 的方式,諸如使用標(biāo)準(zhǔn)數(shù)據(jù)庫存儲技術(shù),執(zhí)行第一、第二和第三表示的存儲。事務(wù)可包括鎖 定實例存儲的至少一部分,但可實現(xiàn)更新的第二表示的處理而無需鎖定實例存儲。技術(shù)可 還包括在查詢存儲中查詢第三表示而無需鎖定實例存儲。
更新的第一、第二和第三表示可以彼此相同,但可以彼此不同。例如,技術(shù)可包括 使用第一表示中沒有的應(yīng)用程序數(shù)據(jù)來補充更新的第二表示。同樣,實例存儲可包括查詢 存儲中沒有的信息,諸如關(guān)于應(yīng)用程序?qū)嵗臓顟B(tài)的信息。處理更新的第二表示以將更新 的第三表示存儲到查詢存儲中可包括將過濾器應(yīng)用到第二表示中。
現(xiàn)在參照圖6,將討論另一個實例和查詢存儲技術(shù)。技術(shù)包括從查詢服務(wù)接收對應(yīng) 用程序?qū)嵗隣顟B(tài)更新的結(jié)果的訂閱請求(610)。訂閱請求可包括過濾器,并且還可包括其他 信息,諸如用于訂閱發(fā)送訂閱請求的查詢服務(wù)的聯(lián)系人信息。技術(shù)還可包括從結(jié)果隊列接 收一組一個或多個應(yīng)用程序?qū)嵗隣顟B(tài)更新的結(jié)果(620)。可將來自查詢服務(wù)的過濾器應(yīng)用 于該組結(jié)果(630),從而將滿足過濾器的一組要求的來自該組的一個或多個結(jié)果發(fā)布到查 詢服務(wù)(640)??蓪⑴c被發(fā)布到查詢服務(wù)的結(jié)果相對應(yīng)的一個或多個應(yīng)用程序?qū)嵗隣顟B(tài)更 新的一個或多個表示存儲到查詢存儲中(650)。
圖6的技術(shù)還可包括將與該組結(jié)果相對應(yīng)的應(yīng)用程序?qū)嵗隣顟B(tài)更新的表示存儲 到實例存儲中。無需鎖定實例存儲就可實現(xiàn)發(fā)布到查詢服務(wù)(640)以及存儲到查詢存儲中 (650)。此外,技術(shù)還包括從查詢服務(wù)接收與實例存儲進(jìn)行同步的請求。響應(yīng)于同步的請求, 可從實例存儲請求同步信息??蓮膶嵗鎯邮账埱蟮耐叫畔?,并且可向查詢服務(wù)轉(zhuǎn) 發(fā)該同步信息的至少一部分。該同步信息的至少一部分可用于對查詢存儲的至少一部分和 實例存儲的至少一部分進(jìn)行同步。
圖6的技術(shù)可包括發(fā)出用于更新應(yīng)用程序的應(yīng)用程序?qū)嵗臓顟B(tài)的實例持久保 存命令。響應(yīng)于該持久保存命令,可啟動應(yīng)用程序和實例存儲之間的事務(wù)。作為事務(wù)的一 部分,可將更新的第一表示存儲到實例存儲中,并可將更新的第二表示存儲到隊列中。在提 交事務(wù)之后,可處理第二表示以將更新的第三表示存儲到查詢存儲中。
盡管用結(jié)構(gòu)特征和/或方法動作專用的語言描述了本主題,但可以理解,所附權(quán) 利要求書中定義的主題不必限于上述具體特征或動作。更確切而言,上述具體特征和動作 是作為實現(xiàn)權(quán)利要求的示例形式公開的。
權(quán)利要求
1.一種計算機(jī)實現(xiàn)的方法,所述方法執(zhí)行以下動作 從查詢服務(wù)(260)接收對應(yīng)用程序?qū)嵗隣顟B(tài)更新的結(jié)果的訂閱請求,所述訂閱請求包括過濾器; 從結(jié)果隊列(240)接收一個或多個應(yīng)用程序?qū)嵗隣顟B(tài)更新的一組結(jié)果(274); 將所述過濾器應(yīng)用到來自所述結(jié)果隊列(240)的該組結(jié)果(274); 將滿足所述過濾器的一組一個或多個要求的該組一個或多個結(jié)果發(fā)布到所述查詢服務(wù)(260);以及 將與被發(fā)布到所述查詢服務(wù)(260)的一個或多個結(jié)果(276)相對應(yīng)的一個或多個應(yīng)用程序?qū)嵗隣顟B(tài)更新的一個或多個表示存儲到查詢存儲(280)中。
2.如權(quán)利要求1所述的方法,其特征在于,所述動作還包括將與該組結(jié)果相對應(yīng)的應(yīng)用程序?qū)嵗隣顟B(tài)更新的表示存儲到實例存儲中,其中實現(xiàn)發(fā)布到所述查詢服務(wù)以及存儲到所述查詢存儲無需鎖定所述實例存儲。
3.如權(quán)利要求2所述的方法,其特征在于,所述動作還包括 從所述查詢服務(wù)接收與所述實例存儲進(jìn)行同步的請求; 響應(yīng)于對同步的所述請求,從所述實例存儲請求同步信息; 從所述實例存儲接收所請求的同步信息;以及 將所述同步信息的至少一部分轉(zhuǎn)發(fā)給所述查詢服務(wù)。
4.如權(quán)利要求3所述的方法,其特征在于,所述動作還包括,使用所述同步信息的至少一部分來對查詢存儲的至少一部分和所述實例存儲的至少一部分進(jìn)行同步。
5.如權(quán)利要求1所述的方法,其特征在于,所述動作還包括 發(fā)出用于更新應(yīng)用程序的應(yīng)用程序?qū)嵗臓顟B(tài)的實例持久保存命令; 響應(yīng)于所述持久保存命令,啟動所述應(yīng)用程序和實例存儲之間的事務(wù); 作為所述事務(wù)的一部分,將所述更新的第一表示存儲到所述實例存儲中;以及 作為所述事務(wù)的一部分,將所述更新的第二表示存儲到所述結(jié)果隊列中; 提交所述事務(wù);以及 在提交所述事務(wù)之后,處理所述更新的所述第二表示以將所述更新的第三表示存儲到所述查詢存儲中。
全文摘要
本發(fā)明揭示了應(yīng)用程序?qū)嵗筒樵兇鎯Α?砂l(fā)出用于更新應(yīng)用程序的實例的狀態(tài)的實例持久保存命令。響應(yīng)于該持久保存命令,可啟動關(guān)于實例存儲的事務(wù)。作為事務(wù)的部分,可將更新的第一表示存儲到實例存儲中,并可將更新的第二表示存儲到隊列中。在存儲第一和第二表示之后可提交該事務(wù)。在提交事務(wù)之后,可處理第二表示以將更新的第三表示存儲到查詢存儲中。無需鎖定實例存儲就可對查詢存儲中的應(yīng)用程序?qū)嵗隣顟B(tài)信息進(jìn)行更新和查詢,使得查詢存儲中的這樣的操作可與實例存儲中的操作異步地執(zhí)行。
文檔編號G06F9/38GK103049565SQ20121059214
公開日2013年4月17日 申請日期2011年7月26日 優(yōu)先權(quán)日2010年7月27日
發(fā)明者N·A·艾倫, J·A·泰勒, K·帕拉瑪斯萬姆, D·舒克拉 申請人:微軟公司