專利名稱:組通信系統中利用中間件進行數據庫復制的方法和中間件的制作方法
技術領域:
本發明涉及數據庫系統,具體地說,本發明涉及利用中間件實現數據庫復制的方法和系統。
背景技術:
復制是將一組數據從一個數據源拷貝到多個數據源的技術,是將一份數據發布到多個存儲節點上的有效方式。數據庫復制是將一份數據發布到多臺服務器上,從而使不同的服務器用戶都可以在權限許可的范圍內共享這份數據。特別是對于全復制數據庫來說,各個存儲節點上保存有相同的數據庫,利用復制技術可以確保分布在不同存儲節點的數據庫自動同步更新,從而保證數據的一致性。
利用組通信系統進行同步數據庫復制是一種數據庫復制的新技術,在國內外都有研究。組通信系統是指根據Lamport邏輯時鐘的概念,在虛同步(Virtual Synchrony)模型或擴展虛同步模型(Extended Virtual Synchrony)的基礎上,實現分布式計算環境下容錯處理的一個通信中間層。組通信系統維護一個進程組,提供各種多播通信方式,并有數據安全傳送和組成員管理服務的功能。應用程序使用它可以方便地實現分布式環境下的容錯,數據和關鍵服務的復制及系統的動態管理。組通信系統主要包括以下功能成員管理,用于檢測節點的加入、退出;各種通信方式,如FIFO保證來自同一個節點的消息,接收方接收的次序和發送的次序是一致的;TOTAL-ORDER當組里多個節點同時廣播時,保證這些消息到達所有節點的次序是一致的;SAFE當網絡發生分裂時,消息的接收遵循EVS模型。
利用組通信系統進行同步數據庫復制的實現方式主要有兩種,分別為修改DBMS(數據庫管理系統)方式和中間件方式。前者指修改DBMS,增加復制協議,從內部支持復制;后者中的中間件是指在傳統的客戶端和服務器之間所增加的一層系統軟件,它可以將多個同構或異構的服務器的資源和服務整合成一個邏輯整體,從而對客戶提供一個統一的服務接口,簡化用戶操作,在原有的單機數據庫系統之上構造數據庫中間件是實現分布式系統的一種有效手段。采用中間件方式是通過截獲并分析客戶端同服務器交互的數據流,實現透明的數據庫復制。
Kemme等人在修改開放源代碼、的DBMS-PostgreSQL的基礎上,實現了同步復制,由于復制是在DBMS內部實現的,因此能獲得更好的性能。上述方法具體見參考文獻B.Kemme and G.Alonso.Don’t be lazy,be consistentPostgres-R,A new wayto implement Database Replication.In Proc.Of Inf.Conf.On Very Large Database,VLDB’00,2000。該方法是面向事務的數據庫復制操作,但是有如下缺點1必須知道DBMS的源代碼,實現復雜;2在客戶訪問頻繁的時候,事務被撤銷的比例大,導致吞吐率下降。
3難以實現異種DBMS之間的復制。這主要是因為必須在各種DBMS內增加相同的復制協議,需要在異種DBMS之間進行數據格式的轉化。如果復制協議修改了,相應的要修改各種DBMS。
4采用receiver-driven的方式實現部分復制。receiver-driven是將每個消息廣播給所有成員節點,由接收者選擇是否處理。這種方式增大了通信量,嚴重影響了系統的可擴展性。
Amir等人采用中間件的方式,解決了廣域網上存在網絡分割情況下的復制問題。該方法的實現可見參考文獻Y.Amir,C.Danilov,M.Miskin-Amir,J.Stanton,and C.Tutu.Practical Wide Area Database Replication.Technical Report CNDS-2002-1,JohnsHopkins University,2002。但該方法所提供的復制方式是面向操作的,也就是說,每次復制的對象是單個的更新操作,每復制一個操作都要對所有數據庫節點廣播一次,對于一個包含多條語句的事務的復制,則相應地需要廣播多次。這樣,由于每復制一個操作都要廣播一次,因此通信開銷大;對于一個事務來說,由于每個操作都要同步一次,事務的執行時間變長,事務響應時間變慢,也降低了系統的吞吐率。
由上述兩種現有的同步數據庫復制的實現方式可見,上述兩種方法有各自的缺陷和優點,如果能夠集合兩種方法的長處,揚長避短,提供一種面向事務的數據庫復制中間件,就能夠方便、快速、有效地實現對數據庫的同步復制。
發明內容
本發明的目的之一是提供一種組通信系統中利用中間件進行數據庫復制的方法,該方法可以支持面向事務的數據庫復制并保證數據的嚴格一致性;本發明的另一目的是提供一種組通信系統中進行數據庫復制的中間件,該中間件可以支持面向事務的數據庫復制并保證數據的嚴格一致性。
為了實現上述目的,本發明提供了一種組通信系統中利用中間件進行數據庫復制的方法,用于多個數據庫存儲節點上之間數據庫的復制,以保證各個節點上數據庫的一致性;該方法包括本地事務執行步驟數據庫存儲節點接收從客戶端應用程序發送來的事務請求并在本地節點執行該事務;事務廣播步驟將在數據庫存儲節點本地執行成功的事務通過組通信系統廣播到所有的數據庫存儲節點;事務排序步驟組通信系統利用其TOTAL-ORDER通信機制對通過其廣播的所有事務進行定序,形成一個事務隊列;亂序判斷步驟數據庫存儲節點在本地事務執行步驟中已經執行的事務在所述事務隊列中具有一對應位置,判斷所述事務隊列中在該對應位置之前是否有與所述已經執行的事務相沖突的事務;定序事務執行步驟根據亂序判斷步驟的判斷結果執行所述事務隊列;當判斷無沖突時,則按照所述事務隊列中的事務順序執行事務隊列中除已經執行的事務之外的其它事務;當判斷有沖突時,則撤銷所述已經執行的事務,然后執行事務隊列;數據庫寫回步驟當所有數據庫存儲節點上都成功執行了所述事務隊列中的同一個事務后,各個數據庫存儲節點按照該事務的執行結果更新其數據庫內容。
本發明還提供了一種組通信系統中利用中間件進行數據庫復制的中間件,該中間件安裝在數據庫存儲節點上,并可與客戶端應用程序以及數據庫存儲節點上的數據庫管理系統通訊。該中間件包括本地事務執行模塊,用于截獲從客戶端應用程序發送至數據庫存儲節點的事務請求,并將該事務請求發送至數據庫管理系統執行,并將執行結果返回至客戶端應用程序;事務廣播模塊,用于將在數據庫存儲節點本地執行成功的事務通過組通信系統廣播到所有的數據庫存儲節點;亂序判斷模塊,數據庫存儲節點在本地事務執行模塊中已經執行的事務在所述事務隊列中具有一對應位置,該模塊用于判斷所述事務隊列中在該對應位置之前是否有與所述已經執行的事務相沖突的事務;定序事務執行模塊,用于根據亂序判斷模塊的判斷結果執行所述事務隊列;當判斷無沖突時,則按照所述事務隊列中的事務順序執行事務隊列中除已經執行的事務之外的其它事務;當判斷有沖突時,則撤銷所述已經執行的事務,然后執行事務隊列;數據庫寫回模塊,用于當所有數據庫存儲節點上都成功執行了所述事務隊列中的同一個事務后,各個數據庫存儲節點按照該事務的執行結果更新其數據庫內容。
本發明在進行數據庫復制時以事務為單位對數據庫節點進行廣播,大大降低了系統的通信開銷,提高了事務的響應時間,而且能夠保證不同節點上數據庫的嚴格一致性。
圖1是常規的組通信系統中利用中間件進行數據庫復制的系統示意圖;圖2是本發明用于數據庫復制的中間件的組成示意圖;圖3是本發明數據庫復制方法的流程圖。
具體實施例方式
下面結合附圖和具體實施方式
對本發明作進一步詳細描述。
在一個數據庫系統中通常包括多個數據庫存儲節點,對于全復制數據庫系統來說,任何一個節點上都有一個與其它節點內容相同的完整的數據庫。這些數據庫存儲節點之間通過網絡進行連接,在本發明中,數據庫存儲節點之間通過組通信系統進行通信。圖1示出了常規的在組通信系統中利用中間件進行數據庫復制的系統,通常該系統中包含多個數據庫存儲節點,圖1僅示例性地示出了節點1和節點2兩個數據庫存儲節點,每一個節點1和2中都包含一個內容相同的數據庫,而且節點1和2上還包括有用于可對數據庫進行操作的數據庫管理系統。節點1和2上都還具有一個中間件,該中間件可以截獲客戶端應用程序與數據庫管理系統之間的數據流并對該數據流進行分析和操作,以實現對數據庫管理系統透明的數據庫復制。如圖1所示,在組通信系統中,每一個數據庫存儲節點1和2上都有一個組通信系統,節點1和2利用組通信系統通過網絡3進行數據和信息的傳輸。
數據庫存儲節點上的中間件通常是由一個專用程序來實現,在本發明的一個實施例中,該中間件的結構如圖2所示。在圖2中,該中間件包括本地事務執行模塊、事務廣播模塊、亂序判斷模塊、定序事務執行模塊和數據庫寫回模塊。其中,事務廣播模塊最好包括語義分析單元和事務重組單元。下面結合圖1和圖2,根據圖3所示的數據庫復制流程圖對本發明進行詳細描述。
步驟10為本地事務執行步驟,在該步驟中,中間件中的本地事務執行模塊截獲從客戶端應用程序發送至數據庫存儲節點的事務請求,并將該事務請求發送至數據庫管理系統執行,并將執行結果返回至客戶端應用程序。通常,一個事務包括多個數據庫操作,這些數據庫操作通常為SQL語句。一個示例性的事務請求如下所示begin ∥開始語句S1 ∥讀數據操作;語句S2 ∥寫數據操作;語句S3 ∥寫數據操作;commit ∥提交該事務請求包括S1~S3三個數據庫操作語句,并以一個提交命令(commit)作為事務的結束。數據庫存儲節點通常是以交互式的方式接收并執行該事務請求的,也就是說,數據庫存儲節點每執行一個操作都會將操作結果返回至客戶端,并由客戶端發送下一個操作語句,直至客戶端發送提交命令作為事務請求的結束。例如在前述的示例性事務請求中,客戶端應用程序發送語句S1,數據庫存儲節點執行該操作S1后將結果返回至客戶端,然后由客戶端應用程序再發送語句S2,依次類推。在這個過程中,在執行事務中的任何一個操作的失敗都要撤銷該事務,并給客戶端返回一失敗消息,例如當在數據庫存儲節點上沒有找到執行一個操作所需要的數據,則撤銷該事務;或者,在這個過程中數據庫存儲節點接收到客戶端應用程序本身發出的一個回滾命令(Rollback),也會導致該事務的撤銷。
應當注意的是,在本地事務執行步驟10中,數據庫存儲節點在執行客戶端發來的每一個操作時,僅將數據庫中的內容調入內存或者緩存中進行操作,并將操作結果返回客戶端,但是即使該操作為更新操作,即涉及修改數據庫內容的操作,在該步驟中也并不更新數據庫中的內容。
步驟20為事務廣播步驟,在該步驟中,從客戶端應用程序發送來的事務請求在存儲節點本地執行成功后,由中間件中的事務廣播模塊將該事務通過組通信系統廣播到所有的數據庫存儲節點。在這里,事務廣播模塊最好只將事務中涉及更新的那些操作組成一個新的事務廣播出去,以降低通信開銷。在一個實施例中,事務廣播模塊包括語義分析單元和事務重組單元,其中,語義分析單元分析從客戶端應用程序發送來的事務請求,從中選出涉及更新的那些操作語句,然后由事務重組單元將涉及更新的操作語句組織成一個事務廣播出去。以前述由S1~S3三個數據庫操作語句組成的事務為例,語義分析單元對語句S1~S3進行語義分析,挑選出寫數據操作語句S2和S3;事務重組單元將語句S2和S3組織成如下事務廣播出去begin ∥開始語句S2 ∥寫數據操作;語句S3 ∥寫數據操作;commit ∥提交。
步驟30為事務排序步驟,在該步驟中,組通信系統利用其TOTAL-ORDER通信機制對通過其廣播的所有事務進行定序,形成一個事務隊列。在基于組通信系統的數據庫系統中,在一個時間段內,通常有數據庫存儲節點廣播出的多個事務在網絡中傳播,組通信系統中的TOTAL-ORDER通信機制可以對這些事務進行定序,使得多個事務以相同的順序進入到數據庫存儲節點。
步驟40為亂序判斷步驟,在該步驟中,數據庫存儲節點上的中間件的亂序判斷模塊判斷在本地事務執行步驟中已經執行的事務是否符合與事務隊列中的事務有沖突。如前所述,在本地事務執行步驟10中,一個數據庫存儲節點上的中間件的本地事務執行模塊截獲從客戶端應用程序發送至數據庫存儲節點的事務請求并已發送至數據庫管理系統執行;而在事務廣播步驟20和事務排序步驟30中,該事務請求執行成功后又由中間件中的事務廣播模塊將該事務通過組通信系統廣播、并經組通信系統定序后按順序發送到所有的數據庫存儲節點。這樣,對于一個數據庫存儲節點來說,定序的事務隊列中的某個或某些事務已經在本地事務執行步驟10中執行,而該已經執行的事務也同時處于事務隊列中的某一對應位置。因而,該數據庫存儲節點需要判斷在事務隊列中,處于已經執行的事務對應位置之前的事務是否與該已經執行的事務相沖突。
步驟50為定序事務執行步驟,在該步驟中,定序事務執行模塊根據亂序判斷模塊的判斷結果執行事務隊列。亂序判斷模塊的判斷結果包括兩種,一種沒有沖突,那么則不需要再重復執行該事務,而繼續執行事務隊列中的其它事務;一種是有沖突,則需要將該已經執行的事務撤銷,也就是將內存或者緩存中該事務的執行結果返回至該事務執行前的狀態,而后再執行事務隊列。一個數據庫存儲節點上中間件的定序事務執行模塊在執行事務隊列時,最好是每成功執行事務隊列中的一個事務后都發送一個執行成功消息至其它所有數據庫存儲節點。
步驟60為數據庫寫回步驟,在該步驟中,當所有數據庫存儲節點上都成功執行了事務隊列中的同一個事務后,由各節點上的中間件的數據庫寫回模塊按照該事務的執行結果更新其數據庫內容,直至執行完事務隊列中的所有事務并完成數據庫的更新。數據庫寫回模塊可根據其它節點發送來的執行成功消息來判斷是否所有的節點都已經成功執行事務隊列中的同一個事務。數據庫寫回模塊只要發現有一個節點沒有能成功執行事務隊列中的某一事務,就不進行數據庫的更新,而將該事務回滾(rollback)并其從事務隊列中刪除。這樣,可以保證各個節點的數據庫都可以進行相同的更新,從而確保不同節點上數據庫的一致性。
權利要求
1.一種組通信系統中利用中間件進行數據庫復制的方法,用于多個數據庫存儲節點上之間數據庫的復制,以保證各個節點上數據庫的一致性;該方法包括本地事務執行步驟數據庫存儲節點接收從客戶端應用程序發送來的事務請求并在本地節點執行該事務;事務廣播步驟將在數據庫存儲節點本地執行成功的事務通過組通信系統廣播到所有的數據庫存儲節點;事務排序步驟組通信系統利用其TOTAL-ORDER通信機制對通過其廣播的所有事務進行定序,形成一個事務隊列;亂序判斷步驟數據庫存儲節點在本地事務執行步驟中已經執行的事務在所述事務隊列中具有一對應位置,判斷所述事務隊列中在該對應位置之前是否有與所述已經執行的事務相沖突的事務;定序事務執行步驟根據亂序判斷步驟的判斷結果執行所述事務隊列;當判斷無沖突時,則按照所述事務隊列中的事務順序執行事務隊列中除已經執行的事務之外的其它事務;當判斷有沖突時,則撤銷所述已經執行的事務,然后執行事務隊列;數據庫寫回步驟當所有數據庫存儲節點上都成功執行了所述事務隊列中的同一個事務后,各個數據庫存儲節點按照該事務的執行結果更新其數據庫內容。
2.根據權利要求1所述的組通信系統中利用中間件進行數據庫復制的方法,其特征在于,在本地事務執行步驟中,所述存儲節點以交互的方式執行客戶端應用程序發送來的事務請求,對于事務請求中包含的每一個操作都將操作結果返回至客戶端應用程序,但并不更新數據庫內容。
3.根據權利要求1所述的組通信系統中利用中間件進行數據庫復制的方法,其特征在于,在本地事務執行步驟中,當一個事務請求執行失敗或者接收到客戶端應用程序發送的回滾命令時,撤銷該事務的執行。
4.根據權利要求1所述的組通信系統中利用中間件進行數據庫復制的方法,其特征在于,在事務廣播步驟中,僅將事務中包含數據庫更新的操作組織成一個事務進行廣播。
5.根據權利要求1所述的組通信系統中利用中間件進行數據庫復制的方法,其特征在于,在定序事務執行步驟中,數據庫存儲節點每成功執行所述事務隊列中的一個事務后都發送一個執行成功消息至其它數據庫存儲節點。
6.根據權利要求5所述的組通信系統中利用中間件進行數據庫復制的方法,其特征在于,在數據庫寫回步驟中,數據庫存儲節點通過各節點發送來的執行成功消息判斷是否所有數據庫存儲節點都成功執行所述事務隊列的同一個事務。
7.一種組通信系統中利用中間件進行數據庫復制的中間件,該中間件安裝在數據庫存儲節點上,并可與客戶端應用程序以及數據庫存儲節點上的數據庫管理系統通訊,與其特征在于,該中間件包括本地事務執行模塊,用于截獲從客戶端應用程序發送至數據庫存儲節點的事務請求,并將該事務請求發送至數據庫管理系統執行,并將執行結果返回至客戶端應用程序;事務廣播模塊,用于將在數據庫存儲節點本地執行成功的事務通過組通信系統廣播到所有的數據庫存儲節點;亂序判斷模塊,數據庫存儲節點在本地事務執行模塊中已經執行的事務在所述事務隊列中具有一對應位置,該模塊用于判斷所述事務隊列中在該對應位置之前是否有與所述已經執行的事務相沖突的事務;定序事務執行模塊,用于根據亂序判斷模塊的判斷結果執行所述事務隊列;當判斷無沖突時,則按照所述事務隊列中的事務順序執行事務隊列中除已經執行的事務之外的其它事務;當判斷有沖突時,則撤銷所述已經執行的事務,然后執行事務隊列;數據庫寫回模塊,用于當所有數據庫存儲節點上都成功執行了所述事務隊列中的同一個事務后,各個數據庫存儲節點按照該事務的執行結果更新其數據庫內容。
8.根據權利要求7所述的組通信系統中利用中間件進行數據庫復制的中間件,其特征在于,所述事務廣播模塊包括語義分析單元,用于分析從客戶端應用程序發送來的事務請求,從中選出涉及更新的操作;事務重組單元,用于將所述涉及更新的操作語句組織成事務進行廣播。
9.根據權利要求7所述的組通信系統中利用中間件進行數據庫復制的中間件,其特征在于,所述定序事務執行模塊每成功執行所述事務隊列中的一個事務后都發送一個執行成功消息至其它數據庫存儲節點。
10.根據權利要求9所述的組通信系統中利用中間件進行數據庫復制的中間件,其特征在于,所述數據庫寫回模塊根據其它數據庫存儲節點發送來的執行成功消息判斷是否所有數據庫存儲節點都成功執行所述事務隊列的同一個事務。
全文摘要
本發明公開了一種組通信系統中利用中間件進行數據庫復制的方法和中間件,用于多個數據庫存儲節點上之間數據庫的復制,以保證各個節點上數據庫的一致性。該方法包括本地事務執行步驟、事務廣播步驟、事務排序步驟、亂序判斷步驟、定序事務執行步驟和數據庫寫回步驟。該中間件包括與前述方法中各步驟對應的模塊。本發明在進行數據庫復制時以事務為單位對數據庫節點進行廣播,大大降低了系統的通信開銷,提高了事務的響應時間,而且能夠保證不同節點上數據庫的嚴格一致性。
文檔編號G06F17/30GK1831810SQ20051005521
公開日2006年9月13日 申請日期2005年3月16日 優先權日2005年3月8日
發明者王勇, 焦麗梅, 王啟榮, 李小華 申請人:中國科學院計算技術研究所