存儲系統的同步方法及相關的設備的制作方法
【專利摘要】提供一種存儲系統中的同步方法及相關的設備。該方法包括:接收對應于數個修改操作的修改操作日志;依據預設的規則將所述數個修改操作進行分組;依據分組方式并行地執行所述數個修改操作的至少一部分或全部;將最新順序屬性值更新至所述數個修改操作中最新執行的修改操作的順序屬性值;以及將對應于所述數個修改操作的數個修改操作增量與對應的數個原始數據進行融合。
【專利說明】存儲系統的同步方法及相關的設備
【技術領域】
[0001]本申請涉及存儲系統,尤其涉及一種存儲系統中的同步方法及相關的設備。
【背景技術】
[0002]隨著網絡技術及云計算服務的發展,存儲系統不但扮演著存儲數據的角色,更是提供各種云服務時不可或缺的設備。例如,存儲系統可以采用數據庫或者其他的形式實施,以應對各種不同的需求。
[0003]為了能夠提升系統性能,存儲系統通常使用一個或多個主機搭配一個或多個備機的方式實施,并且存儲系統的主機和備機還可以充分利用現代的多處理器、多機器、多線程及/或多機器并行執行等技術來提升整個系統的可用性及/或處理能力。為了確保存儲系統的主機和備機間數據具有一致性,當主機對存儲的數據執行修改操作時(例如,插入、更新及刪除等修改操作),也會將這些修改操作所對應的修改操作日志同步至備機。因此,存儲系統的主機和備機不但能夠具有一致的數據,并且當存儲系統出現異常宕機而需要重新開機時,也可以藉由重新播放宕機前所記錄的修改操作日志,使存儲系統以恢復到宕機前的狀態。
[0004]雖然主機可以通過讀寫鎖和相關技術(例如,數據庫的多版本并行控制等)而并行地執行這些修改操作,但其結果卻等價于依據一種確定的順序串行地執行這些修改。因此,當存儲系統在主機和備機間同步修改操作日志時,備機必須按照主機所確定的順序來播放和執行這些修改操作日志,以確保主機和備機能夠具有一致的數據。如果以串行的方式播放和執行這些修改操作日志,雖然能夠確保修改操作會依據所確定的順序執行,但是需要較長的時間以完成修改操作的執行。主機必須等待備機的修改操作執行完成,才能確保主機和備機具有一致的數據,使用者的回應時間因而被延長,造成整個存儲系統的性能下降。如果主機不等待備機的修改操作執行完成,則主機和備機間的數據可能不同步,甚至可能造成主機和備機無法藉由同步修改操作的方式而存儲一致的數據。另一方面,如果備機并行地執行這些修改操作,則修改操作執行的順序及結果的正確性往往難以保證。
[0005]同樣地,當存儲系統異常宕機而重新開機時,也需要按照宕機前確定的順序重新播放和執行修改操作日志,以確保存儲系統能夠恢復到宕機前的狀態。如果串行地執行這些修改操作,雖然能夠確保修改操作會依據所確定的順序執行,但是需要較長的時間以完成修改操作的執行。存儲系統因而需要較長的時間從異常宕機狀態恢復到正常狀態,從而會造成整個存儲系統的性能下降。如果并行地執行這些修改操作,則難以保證修改操作執行的順序及結果的正確性。
[0006]目前,存儲系統的相關技術通常關注于存儲系統的一個或多個主機的并行修改技術,或者數據庫的主機和備機間的同步技術。例如,數據庫的多版本并行控制(MVCC)技術,MySQL的日志回放技術、以及美國專利第7,996,363號中描述的數據庫主機和備機間的同步方法等。然而,這些技術仍難以解決上述的技術問題。
【發明內容】
[0007]本申請的主要目的在于提供一種存儲系統的同步方法及相關的設備,以解決現有技術存在的存儲系統同步問題以及宕機狀態恢復到正常狀態的問題,其中:
[0008]根據本申請的一個方面,提供一種在存儲系統中進行同步的方法,該方法包括:接收對應于數個修改操作的修改操作日志;依據預設的規則將該數個修改操作進行分組;依據分組方式并行地執行該數個修改操作的至少一部分或全部;將最新順序屬性值更新至該數個修改操作中最新執行的修改操作的順序屬性值;以及將對應于該數個修改操作的數個修改操作增量與對應的數個原始數據進行融合。
[0009]根據本申請實施例的方法,還包括:存儲融合后的該數個修改操作增量與該數個原始數據;以及刪除融合前的該數個修改操作增量與該數個原始數據。
[0010]根據本申請實施例的方法,還包括:將該數個修改操作以多線程的方式并行地執行數個預提交步驟,以查詢該數個修改操作所對應修改的數個數據的位置;以及依據預定順序以單線程的方式串行地進行數個提交步驟,以依據該數個數據的位置修改數據。
[0011]根據本申請實施例的方法,還包括:在該數個預提交步驟中,將該數個數據的位置與該數個修改操作記錄于數個事務上下文;以及在該數個提交步驟中,依據該數個事務上下文而修改數據。
[0012]根據本申請實施例的方法,還包括:當系統中的計算機設備異常宕機后,自該計算機設備的修改操作日志記錄模塊接收對應于數個修改操作的修改操作日志。
[0013]根據本申請的一個方面,提供一種在存儲系統中進行同步的設備,包括:通訊模塊,用以接收對應于數個修改操作的修改操作日志;修改操作順序分組模塊,用以依據預設的規則將該數個修改操作進行分組;修改操作執行模塊,用以依據分組方式并行地執行該數個修該操作的至少一部分或全部;最新順序屬性值記錄模塊,用以將最新順序屬性值更新至該數個修改操作中最新執行的修改操作的順序屬性值;以及修改操作數據更新模塊,將對應于該數個修改操作的數個修改操作增量與對應的數個原始數據進行融合。
[0014]在根據本申請實施例的設備中,修改操作數據更新模塊存儲融合后的該數個修改操作增量與該數個原始數據,并且該修改操作數據更新模塊刪除融合前的該數個修改操作增量與該數個原始數據。
[0015]在根據本申請實施例的設備中,修改操作執行模塊將該數個修改操作以多線程的方式并行地執行數個預提交步驟,以查詢該數個修改操作所對應修改的數個數據的位置,并且該修改操作執行模塊依據預定順序以單線程的方式串行地進行數個提交步驟,以依據該數個數據的位置修改數據。
[0016]在根據本申請實施例的設備中,修改操作執行模塊在該數個預提交步驟中,將該數個數據的位置與該數個修改操作記錄于數個事務上下文,并且該修改操作執行模塊在該數個提交步驟中,依據該數個事務上下文而修改數據。
[0017]根據本申請實施例的設備,還包括:修改操作日志記錄模塊,用以儲存該數個修改操作;其中當該設備異常宕機后,該通訊模塊自該修改操作日志記錄模塊接收對應于數個修改操作的修改操作日志。
[0018]根據本申請的技術方案,其優點之一是修改操作執行的并行度高,可以對每一個修改操作分別并行地執行,并且修改操作可以按任意的次序執行,不但能保證結果的正確性,還能提升系統的性能。其另一優點是修改操作的執行效率高,存儲系統的主機和備機間的同步能夠更迅速,并且存儲系統能夠快速地恢復到宕機前的狀態。本申請的其他優點將通過以下的說明和附圖進行更詳細的解釋。
【專利附圖】
【附圖說明】
[0019]此處所說明的附圖用來提供對本申請的進一步理解,構成本申請的一部分,本申請的示意性實施例及其說明用于解釋本申請,并不構成對本申請的不當限定。在附圖中:
[0020]圖1為本申請的實施例的存儲系統簡化后的功能方框圖;以及
[0021]圖2為圖1的存儲系統運作時的實施例簡化后的流程圖。
【具體實施方式】
[0022]圖1為本申請的實施例的存儲系統100簡化后的功能方塊圖。存儲系統100可以包括主機110、網絡130和備機150,主機110和備機150分別可以采用一個或多個計算機設備及軟件實施,并且計算機設備可以采用移動或非移動的設備,例如,服務器、個人計算機、筆記本電腦或手機等設備。
[0023]主機110可以包括數據庫模塊111、修改操作日志產生模塊116、修改操作日志記錄模塊117及通訊模塊119。
[0024]主機110的數據庫模塊111用以存儲數據,當數據庫模塊111中的數據被修改時,修改操作日志產生模塊116可以產生對應的修改操作日志,使主機110或備機150能夠依據修改操作日志而執行對應的修改操作。此外,主機110還可以將修改操作日志產生模塊116所產生的修改操作日志存儲在修改操作日志記錄模塊117中,從而能夠供主機110異常宕機后重新開機后使用。
[0025]由主機110對于數據庫模塊111所進行的修改操作是以既定順序執行,因此對應的修改操作日志可以以顯式或隱含的記錄方式記錄修改操作的順序屬性值,以代表修改操作執行的先后順序關系。例如,在一個實施例中,針對數據庫模塊111而言,每個“寫事務”可以具有遞增的事務號tr_id,每個寫事務內的修改操作(例如,插入、更新及刪除等操作)分別可以具有在個體寫事務內有效且遞增的操作號op_id。因此,修改操作日志例如就可以采用(tr_id, op_id)做為記錄修改操作的順序屬性值。
[0026]通訊模塊119用以將修改操作日志產生模塊116所產生的修改操作日志,通過網絡130而傳送至備機150或者其他的存儲裝置。通訊模塊119可以采用標準的網絡協議或者自定義的協議,以便和其他計算機設備或者其他模塊間進行數據的傳送與接收。
[0027]備機150包括數據庫模塊151、修改操作順序分組模塊152、修改操作執行模塊153、最新順序屬性值記錄模塊154、修改操作數據更新模塊155、修改操作日志記錄模塊156及通訊模塊157。在圖1的實施例中,僅繪示一個修改操作執行模塊153以便于說明,在其他實施例中,備機150可以包括有一個或多個修改操作執行模塊。
[0028]數據庫模塊151用以存儲數據,當主機110和備機150同步時,數據庫模塊111和151所儲存的數據相同。
[0029]當主機110和備機150需要進行同步時,備機150可以經由通訊模塊157而自網絡130接收主機110或其他存儲裝置所傳送的一個或多個修改操作日志,并且主機150可以將所接收的修改操作日志存儲在修改操作日志記錄模塊156中。通訊模塊157可以采用標準的網絡協議或者自定義的協議,以便和其他計算機設備或者其他模塊間進行數據的傳送與接收。
[0030]修改操作順序分組模塊152可以將這些修改操作日志進行分組,并且將分組后的修改操作日志傳送至操作執行模塊153而執行對應的操作修改。
[0031]當修改操作執行完成后,最新順序屬性值記錄模塊154可以記錄已經完成的修改操作及/或未完成的修改操作,以確保使用者或者其他計算機設備所存儲的數據已經完成所需的修改操作。此外,修改操作數據更新模塊155可以在適當的時間,將修改后的數據更新至數據庫模塊151。
[0032]例如,在一個實施例中,以執行順序值由小到大代表執行順序的由舊到新。最新順序屬性值記錄模塊154可以記錄已經執行完成的修改操作的最新順序屬性值Iastestorder attr,順序屬性值小于或等于最新順序屬性值lastest_order_attr的修改操作,對使用者或者其他計算機設備而言該修改操作已經生效,而能夠確保對應儲存在數據庫模塊151中的數據為正確的。順序屬性值大于最新順序屬性值lastest_order_attr的修改操作,對使用者或者其他計算機設備而言該修改操作尚未生效。
[0033]在圖1的實施例中,僅示出了一個主機110和一個備機150,并且也省略了主機110和備機150中的其他元件,以使附圖更為簡潔而易于進行說明。例如,主機110也可以包括修改操作順序分組模塊、修改操作執行模塊、修改操作數據更新模塊及最新順序屬性值記錄模塊等元件。在其他的實施例中,存儲系統可以包括一個或多個主機,并且搭配一個或多個備機進行運作。
[0034]圖2為圖1的存儲系統100運作時的一個實施例簡化后的流程圖,以下將以圖2結合圖1進一步地說明存儲系統100的運作方式。
[0035]在流程210中,備機150接收對應于修改操作0P1,0P2,…OPm的修改操作日志。例如,在存儲系統100的主機110和備機150進行同步的應用中,備機150可以從主機110
或者共用的存儲裝置獲得修改日志。
[0036]在流程220中,備機150使用修改操作順序分組模塊152將流程210中所接收的修改操作0P1,0P2,…OPm進行分組。修改操作順序分組模塊152可以采用任意順序、任意規則重新組合或者其他預設的規則將修改操作0P1,0P2,…OPm進行分組。
[0037]在流程230中,修改操作執行模塊153可以依據修改操作的分組結果,而能夠并行地執行部分的操作修改,或者并行地執行全部的操作修改。每個分組可以包括一條或者多條的修改操作,而這些分組內的修改操作可以按順序在分組內執行,并且將這些修改操作以修改操作增量的方式記錄在個體分組內。
[0038]在流程240中,當修改操作執行模塊153將全部的修改操作0P1,0P2,…OPm執行完成后,備機150的最新順序屬性值記錄模塊154可以將最新順序屬性值lastest_order_attr更新為修改操作0P1,0P2,…OPm中最新的順序屬性值。
[0039]在流程250中,修改操作數據更新模塊155可以在適當的時間,將流程230中的所記錄的修改操作增量與對應的原始數據(如果存在)融合以得到新的原始數據。例如,在系統空閑時或存儲系統管理員設定的時間等。
[0040]在流程260中,修改操作數據更新模塊155可以在適當的時間刪除流程250中不再需要的原始數據和修改操作增量,并回收它們占用的空間。
[0041]在圖2的流程220-230中,修改操作順序分組模塊152可以采用任意順序、任意規則重新組合或者其他預設的規則將修改操作0Ρ1,0Ρ2,…OPm進行分組,而修改操作執行模塊153能夠并行地執行部分的操作修改,或者修改操作執行模塊153能夠并行地執行全部的操作修改。此外,如上所述,備機可以使用一個或多個修改操作執行模塊以并行地執行部分或者全部的操作修改。
[0042]例如,在一個實施例中,修改操作執行模塊153可以將操作修改的執行分為“預提交”和“提交”兩個步驟,并且采用“事務上下文”的存儲類型,來保存需要在“預提交”和“提交”兩個步驟中傳遞的數據。
[0043]修改操作執行模塊153可以采用多線程方式并行地執行“預提交”步驟的數據查詢和準備工作,先查詢到要修改操作對應于數據庫模塊151中數據的〃位置",并且連同需要執行的修改操作一起保存在“事務上下文”中。
[0044]修改操作執行模塊153再將在“預提交”步驟中保存在“事務上下文”的數據寫入數據庫模塊151中修改的“位置”,并且必須保證按照“既定順序”以單線程的方式串行地進行提交。例如,在一個實施例中,“提交”步驟必須按既定的順序1,2,3,4,5執行修改操作,即使編號為5的修改操作先“預提交”完成,那么在“提交”的步驟中,修改操作執行模塊153需要等待編號為4的修改操作先“提交”完成,才會進行“提交”編號為5的修改操作。
[0045]在圖2的流程250中,修改操作數據更新模塊155可以在適當的時間,將流程230中的所記錄的修改操作增量與對應的原始數據(如果存在)進行融合以得到新的原始數據。雖然對數據的修改要延后到適當時機,由于每個數據都記錄了它的“原始數據”和“修改操作增量”,因此當備機150在稍后的時間將“修改操作增量”應用到“原始數據”時,即可獲得修改后數據的最終結果。例如,“原始數據”為10,“修改操作增量”為“+1”,因此將“修改操作增量”融合至“原始數據”后,可以得到最終結果為11。此外,對于每次的讀取操作,必須先將“修改操作增量”融合至“原始數據”所得到的最終結果才作為讀取操作的輸出,因此能夠確保數據的正確性。
[0046]在另一實施中,當發生異常宕機后,重新開機的主機110及/或備機150可以分別從修改操作日志記錄模塊117和156獲得修改日志,而由主機110及/或備機150進行流程210-260的方法,以恢復到異常宕機前的狀態。
[0047]在其他的實施例中,備機150也可以同時作為多個主機的備機,而能夠分別搭配多個備機進行上述的流程。
[0048]在上述的實施例中,可以對修改操作部分或全部并行地執行,這些操作不必局限于不同的表,也不必局限于不同的數據庫的數據塊等,并且多個修改操作可以依據任意的次序執行,但仍舊可以保證結果的正確性。
[0049]在上述的實施例中,修改操作的執行只需記錄修改的動作,并對數據本身(例如,數據庫模塊的數據)的修改延后到適當時機執行,因此,不但能使數據修改的執行效率高,還可使修改數據這類耗時的運作錯開存儲系統的運作高峰期間,從而改善系統的性能。
[0050]在上述的實施例中,主機與備機進行同步的速度更迅速,而且能夠降低使用者對存儲系統訪問回應時間,并且不影響整個存儲系統的輸送量。此外,同樣的方法也可以適用在存儲系統的主機及/或備機異常宕機而需要重新開機的情境,而能夠使主機及/或備機快速地恢復到宕機前的狀態。
[0051]在說明書及權利要求書中使用了某些詞匯來指稱特定的元件。所屬【技術領域】的技術人員應可理解,同樣的元件可能會用不同的名詞來稱呼。本說明書及權利要求書并不以名稱的差異來作為區分元件的方式,而是以元件在功能上的差異來作為區分的基準。在說明書及權利要求書中所提及的“包括”為開放式的用語,應解釋成“包括但不限于”。在此所使用的“及/或”的描述方式,包括所列舉的其中之一或多個方案的任意組合。另外,除非說明書中特別指明,否則任何單數的用語都同時包括復數的涵義。
[0052]本領域內的技術人員應明白,本申請的實施例可提供為方法、系統、或計算機程序產品。因此,本申請可采用完全硬件實施例、完全軟件實施例、或結合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(包括但不限于磁盤存儲器、CD-ROM、光學存儲器等)上實施的計算機程序產品的形式。
[0053]以上所述僅為本申請的實施例而已,并不用于限制本申請,對于本領域的技術人員來說,本申請可以有各種更改和變化。凡在本申請的精神和原則之內,所作的任何修改、等同替換、改進等,均應包括在本申請的權利要求范圍之內。
【權利要求】
1.一種在存儲系統中進行同步的方法,所述方法包括: 接收對應于數個修改操作的修改操作日志; 依據預設的規則將所述數個修改操作進行分組; 依據分組方式并行地執行所述數個修改操作的至少一部分或全部; 將最新順序屬性值更新至所 述數個修改操作中最新執行的修改操作的順序屬性值;以及 將對應于所述數個修改操作的數個修改操作增量與對應的數個原始數據進行融合。
2.根據權利要求1所述的方法,還包括: 存儲融合后的所述數個修改操作增量與所述數個原始數據;以及 刪除融合前的所述數個修改操作增量與所述數個原始數據。
3.根據權利要求1所述的方法,還包括: 將所述數個修改操作以多線程的方式并行地執行數個預提交步驟,以查詢所述數個修改操作所對應修改的數個數據的位置;以及 依據預定順序以單線程的方式串行地進行數個提交步驟,以依據所述數個數據的位置修改數據。
4.根據權利要求3所述的方法,還包括: 在所述數個預提交步驟中,將所述數個數據的位置與所述數個修改操作記錄于數個事務上下文;以及 在所述數個提交步驟中,依據所述數個事務上下文而修改數據。
5.根據權利要求1所述的方法,還包括: 當系統中的計算機設備異常宕機后,自所述計算機設備的修改操作日志記錄模塊接收對應于數個修改操作的修改操作日志。
6.一種在存儲系統中進行同步的設備,還包括: 通訊模塊,用以接收對應于數個修改操作的修改操作日志; 修改操作順序分組模塊,用以依據預設的規則將所述數個修改操作進行分組; 修改操作執行模塊,用以依據分組方式并行地執行所述數個修所述操作的至少一部分或全部; 最新順序屬性值記錄模塊,用以將最新順序屬性值更新至所述數個修改操作中最新執行的修改操作的順序屬性值;以及 修改操作數據更新模塊,將對應于所述數個修改操作的數個修改操作增量與對應的數個原始數據進行融合。
7.根據權利要求6所述的設備,其中,所述修改操作數據更新模塊存儲融合后的所述數個修改操作增量與所述數個原始數據,并且所述修改操作數據更新模塊刪除融合前的所述數個修改操作增量與所述數個原始數據。
8.根據權利要求6所述的設備,其中,所述修改操作執行模塊將所述數個修改操作以多線程的方式并行地執行數個預提交步驟,以查詢所述數個修改操作所對應修改的數個數據的位置,并且所述修改操作執行模塊依據預定順序以單線程的方式串行地進行數個提交步驟,以依據所述數個數據的位置修改數據。
9.根據權利要求8所述的設備,其中,所述修改操作執行模塊在所述數個預提交步驟中,將所述數個數據的位置與所述數個修改操作記錄于數個事務上下文,并且所述修改操作執行模塊在所述數個提交步驟中,依據所述數個事務上下文而修改數據。
10.根據權利要求6所述的設備,還包括: 修改操作日志記錄模塊,用以儲存所述數個修改操作; 其中當所述設備異常宕機后,所述通訊模塊自所述修改操作日志記錄模塊接收對應于數個修改操作的修改操作日`志。
【文檔編號】H04L29/08GK103685350SQ201210324319
【公開日】2014年3月26日 申請日期:2012年9月4日 優先權日:2012年9月4日
【發明者】陽振坤, 李凱 申請人:阿里巴巴集團控股有限公司