專利名稱:一種分布式數據同步系統及方法
技術領域:
本發明涉及一種數據同步系統及方法,特別涉及一種分布式數據同步系統及方 法,屬于計算機技術領域。
背景技術:
隨著信息技術的進步和應用系統數據的急劇增加,數據庫需要及時存儲和訪問數 據。很多應用系統之間為了保證數據的一致,需要進行數據庫數據的同步。數據庫同步問題,大型數據庫廠商在其主流數據庫產品提出了同構復制技術,并 在此基礎上提出了異構數據庫復制技術。Oracle通過數據庫轉換器(Oracle Transparent (Gateway)來實現異構數據庫同步,它是一種對稱復制。DB2使用CCD (Consistent Change Data)表來實現異構復制。SyBase利用LTM(Log Transfer Manager)來實現異構復制,SQL Server提出出版者/預訂者技術。目前,廣泛應用于商業當中的數據庫同步方案主要分為分布式數據庫采用的數 據同步方法和同步中間件。一些獨立軟件開發商也開發出大量具有異構數據庫同步功能的 軟件和產品,其中比較著名的有=PeerDirect的PDRE,提出了一種基于控制表變化法的同 步方法。Syware的DataSync,采用影子表技術實現數據庫同步。SynchroLogic的SyncKit, 采用基于API方法實現數據庫同步。國內對于分布式異構數據庫數據同步的研究,比較著名的系統有中國人民大學 的金倉數據庫系統(KingBase)、東南大學的(ialaxy系統、國防科技大學的TTR、中科院軟件 所對象技術中心承擔的“石化應用軟件示范工程”,它利用消息中間件ISMQ實現了實時數 據庫環境下的數據同步。但是,目前國內外數據庫同步的方案,主要針對的是存在中心節點的網絡環境,由 中心節點控制數據庫同步。對于無中心節點的網絡環境中,怎樣保持網絡中每個節點數據 庫中的數據實時一致,在國內外的研究中尚未見報道。無中心節點的網絡環境,指網絡中所 有節點地位相同,每個節點可以隨時上線或下線,每個節點可以隨時發起數據同步請求。
發明內容
本發明的目的是針對現有技術的缺陷,設計一種針對無中心節點網絡環境的分布 式數據庫同步系統和方法,實現實時、并發操作的分布式數據同步,保證網絡中每個節點數 據庫中的數據實時一致。本發明提供了一種分布式數據同步系統,包括通過網絡連接的多個節點,其中每 個節點均包括數據庫、節點狀態表以及數據同步模塊,其中節點狀態表包括網絡中每個節 點的IP地址、最高版本號和節點類型,最高版本號在節點第一次上線時設置為0,每執行一 次對數據庫的修改操作最高版本號加1,節點類型分為決策節點、備份節點和普通節點;網 絡中每個節點包括的數據庫均擁有相同的數據庫名、數據表名和數據表結構;數據同步模 塊具體包括
節點上線初始化模塊負責在節點新上線時通過節點類型選擇模塊,確定新上線 節點類型,然后向網絡中其他節點發送上線消息,上線消息包括本節點的IP地址、最高版 本號和節點類型;在節點狀態表中增加本節點信息;節點狀態維護模塊負責接收網絡中其它節點的上線消息,修改節點狀態表,并每 隔一定時間在網絡中廣播本節點的IP地址、最高版本號和節點類型;節點類型選擇模塊根據設置的節點類型選擇策略確定本節點的節點類型;同步請求生成模塊在本節點有數據同步請求時,生成數據同步操作序列;同步請求發送模塊負責向網絡中其他在線節點發送本節點的數據同步操作序 列;串行化調度模塊負責接收網絡中所有節點的數據同步操作序列,并將這些操作 序列串行化,形成串行化操作序列,序列中每個操作均對應一個版本號;決策調控模塊如果是決策節點,則在有新上線節點且其最高版本號與決策節點 不一致時,向該節點發送使其最高版本號與決策節點一致的串行化操作序列;在網絡中有 數據同步請求時,將決策節點最高版本號之后的串行化操作序列發送給網絡中其他節點;同步更新接收模塊接收從決策節點發送來的串行化操作序列;同步更新重發模塊負責向決策節點發送重發串行化操作序列的請求,決策節點 也使用該模塊接收其他節點發送的重發串行化操作序列的請求;同步更新執行模塊網絡中的節點根據接收的決策節點發送來的串行化操作序 列執行本地數據庫操作,并更新最高版本號以及本地的串行化操作序列。本發明還提供了一種分布式數據同步方法,該方法使用上述分布式數據同步系統 實現數據同步,包括有數據同步請求時的數據同步和節點新上線時的數據同步,其中有數 據同步請求時的數據同步包括以下步驟步驟一、網絡中有節點發起分布式數據同步請求,通過同步請求生成模塊生成數 據同步操作序列;步驟二、所有發起數據同步請求的節點通過同步請求發送模塊向網絡中其他在線 節點發送本節點的數據同步操作序列;步驟三、網絡中所有節點通過串行化調度模塊接收網絡中所有節點的數據同步操 作序列,并將接收到的數據同步操作序列串行化,形成串行化操作序列;步驟四、決策節點通過決策調控模塊將串行化操作序列發送給網絡中其他節點;步驟五、網絡中的在線節點通過同步更新接收模塊接收從決策節點發送來的串行 化操作序列;步驟六、網絡中的在線節點將接收到的串行化操作序列中的版本號與本地節點 的最高版本號進行比較,如果串行化操作序列中的版本號是從本地節點的最高版本號+1 開始,并且版本號連續,則說明接收到的串行化操作序列正確,轉到步驟九;否則轉到步驟 七;步驟七、在線節點通過同步更新重發模塊向決策節點發送重發串行化操作序列的 請求;步驟八、決策節點收到重發串行化操作序列的請求后,重新向該請求重發的節點 發送對應的串行化操作序列,轉到步驟五;
步驟九、在線節點通過同步更新執行模塊根據接收的決策節點發送來的串行化操 作序列執行本地數據庫操作,并更新最高版本號以及本地的串行化操作序列;節點新上線時的數據同步包括以下步驟步驟一、節點新上線時,通過節點上線初始化模塊確定新上線節點類型,向網絡中 其他節點發送上線消息,在節點狀態表中增加本節點信息;步驟二、新上線節點比較自身節點與決策節點的最高版本號信息,并進行判斷,如 果新上線節點最高版本號小于決策節點最高版本號,則轉到步驟三,否則轉到步驟十;步驟三、新上線節點通過同步更新重發模塊請求決策節點發送新上線節點最高版 本號之后的串行化操作序列;步驟四、決策節點通過決策調控模塊將版本號從新上線節點最高版本號+1開始 到決策節點最高版本號的串行化操作序列發送給新上線節點;步驟五、新上線節點通過同步更新接收模塊接收從決策節點發送來的串行化操作 序列;步驟六、新上線節點將接收到的串行化操作序列中的版本號與本地節點和決策節 點的最高版本號進行比較,如果串行化操作序列中的版本號是從本地節點的最高版本號+1 開始,并且版本號連續,直到版本號為決策節點的最高版本號為止,則說明接收到的串行化 操作序列正確,轉到步驟九;否則轉到步驟七;步驟七、新上線節點通過同步更新重發模塊向決策節點發送重發串行化操作序列 的請求;步驟八、決策節點收到重發串行化操作序列的請求后,重新向新上線節點發送對 應的串行化操作序列,轉到步驟五;步驟九、新上線節點通過同步更新執行模塊根據接收的決策節點發送來的串行化 操作序列執行本地數據庫操作,并更新最高版本號以及本地的串行化操作序列;步驟十、新上線節點通過節點狀態維護模塊每隔一定時間在網絡中廣播本節點的 IP地址、最高版本號和節點類型。有益效果本發明提出的分布式數據同步系統及方法在無中心節點的網絡環境中,可以實現 實時、并發操作的分布式數據同步,保證在任意節點可以隨時上線或下線的情況下,網絡中 每個節點數據庫中的數據實時一致。
圖1、本發明所述系統中每個節點的結構圖;圖2、本發明所述方法的流程圖。
圖3、有節點上線或下線時的數據同步方法流程圖。
具體實施例方式下面結合附圖,具體說明本發明的優選實施方式。本實施例是根據本發明實現的一種分布式數據同步系統,它包括通過網絡 連接的6個節點。圖1為系統中每個節點的結構圖。網絡中6個節點的IP地址分 別為 192. 168. 1. 11,192. 168. 1. 12,192. 168. 1. 13,192. 168. 1. 14,192. 168. 1. 15、192. 168. 1. 16。每個節點本地使用的數據庫為MySql數據庫,每個節點的數據庫名均為 testdb,數據庫表名稱為course,course中字段名及字段類型如表1所示。每個節點的數 據庫的內容一致。表l.course表中的字段名及字段類型
數據庫表字段名字段類型c_idint(3)c namevarchar(10)course表中的內容如表2所示。表2. course表中內容
c_idcname1Physics每個節點的數據同步模塊具體包括節點上線初始化模塊負責在節點新上線時通過節點類型選擇模塊,確定新上線 節點類型,然后向網絡中其他節點發送上線消息,上線消息包括本節點的IP地址、最高版 本號和節點類型;在節點狀態表中增加本節點信息;節點狀態維護模塊負責接收網絡中其它節點的上線消息,修改節點狀態表,并每 隔一定時間在網絡中廣播本節點的IP地址、最高版本號和節點類型;節點類型選擇模塊根據設置的節點類型選擇策略確定本節點的節點類型;同步請求生成模塊在本節點有數據同步請求時,生成數據同步操作序列;同步請求發送模塊負責向網絡中其他在線節點發送本節點的數據同步操作序 列;串行化調度模塊負責接收網絡中所有節點的數據同步操作序列,并將這些操作 序列串行化,形成串行化操作序列,序列中每個操作均對應一個版本號;決策調控模塊如果是決策節點,則在有新上線節點且其最高版本號與決策節點 不一致時,向該節點發送使其最高版本號與決策節點一致的串行化操作序列;在網絡中有 數據同步請求時,將決策節點最高版本號之后的串行化操作序列發送給網絡中其他節點;同步更新接收模塊接收從決策節點發送來的串行化操作序列;同步更新重發模塊負責向決策節點發送重發串行化操作序列的請求,決策節點 也使用該模塊接收其他節點發送的重發串行化操作序列的請求;同步更新執行模塊網絡中的節點根據接收的決策節點發送來的串行化操作序列 執行本地數據庫操作,并更新最高版本號以及本地的串行化操作序列。日志處理模塊維護日志文件,日志文件記錄運行過程中的數據執行消息和錯誤 消息。本實施方式中,每個節點還包括共享內存和共享內存管理模塊。共享內存管理模 塊負責管理共享內存的讀寫;共享內存用于緩存本地節點的同步請求,存放數據同步操作 序列以及串行化操作序列。在本實施例中,進行數據同步前要對網絡中新上線節點進行初始化。新上線節點 通過上線初始化模塊修改節點狀態表,通過節點類型選擇模塊確定新上線節點類型。節點類型選擇模塊根據設置的節點類型選擇策略確定本節點的節點類型,節點類型選擇策略可 以有很多種,例如根據節點上線順序選擇節點類型、根據節點在線時間選擇節點類型、根據 節點處理速度選擇節點類型等。本實施例中采用的節點類型選擇策略如下當網絡中有新上線節點時,新上線節點首先接收獲得其他節點的狀態信息,修改 本地節點狀態表。當節點狀態表中沒有發現決策節點時即表示只有自身節點在線,則將本 節點定義為決策節點;當節點狀態表中只存在決策節點時,則將本節點定義為備份節點; 當節點狀態表中已經存在決策節點和備份節點時,則將本節點定義為普通節點。當網絡中已有決策節點以及備份節點和其他普通節點的環境下當決策節點下 線,備份節點自動升級成決策節點,其他在線節點在本地節點狀態表中刪除已下線的決策 節點信息,并廣播當前本節點狀態;當決策節點在線,備份節點下線時,選擇IP地址中最大 的節點作為新的備份節點,各在線節點在本地節點狀態表中刪除已下線的備份節點信息, 并廣播當前本節點狀態;當決策節點和備份節點同時下線時,選擇在線節點中IP地址最大 的節點為當前的決策節點,選擇在線節點中IP地址次大的節點為備份節點,各在線節點 在本地節點狀態表中刪除已下線的決策節點和備份節點信息,并廣播當前本節點狀態;當 普通節點下線時,不發生決策節點、備份節點的變更,各在線節點在本地節點狀態表中刪除 已下線普通節點的信息,并廣播當前本節點狀態。節點類型包括3種0表示普通節點;1表示備份節點;2表示決策節點。根據節點 類型選擇策略,節點狀態表的內容,如表3所示。表3.節點狀態表
權利要求
1.一種分布式數據同步系統,其特征在于,包括通過網絡連接的多個節點,其中每個節 點均包括數據庫、節點狀態表以及數據同步模塊,其中節點狀態表包括網絡中每個節點的 IP地址、最高版本號和節點類型,最高版本號在節點第一次上線時設置為0,每執行一次對 數據庫的修改操作最高版本號加1,節點類型分為決策節點、備份節點和普通節點;網絡中 每個節點包括的數據庫均擁有相同的數據庫名、數據表名和數據表結構;數據同步模塊具 體包括節點上線初始化模塊負責在節點新上線時通過節點類型選擇模塊,確定新上線節點 類型,然后向網絡中其他節點發送上線消息,上線消息包括本節點的IP地址、最高版本號 和節點類型;在節點狀態表中增加本節點信息;節點狀態維護模塊負責接收網絡中其它節點的上線消息,修改節點狀態表,并每隔一 定時間在網絡中廣播本節點的IP地址、最高版本號和節點類型;節點類型選擇模塊根據設置的節點類型選擇策略確定本節點的節點類型; 同步請求生成模塊在本節點有數據同步請求時,生成數據同步操作序列; 同步請求發送模塊負責向網絡中其他在線節點發送本節點的數據同步操作序列; 串行化調度模塊負責接收網絡中所有節點的數據同步操作序列,并將這些操作序列 串行化,形成串行化操作序列,序列中每個操作均對應一個版本號;決策調控模塊如果是決策節點,則在有新上線節點且其最高版本號與決策節點不一 致時,向該節點發送使其最高版本號與決策節點一致的串行化操作序列;在網絡中有數據 同步請求時,將決策節點最高版本號之后的串行化操作序列發送給網絡中其他節點; 同步更新接收模塊接收從決策節點發送來的串行化操作序列; 同步更新重發模塊負責向決策節點發送重發串行化操作序列的請求,決策節點也使 用該模塊接收其他節點發送的重發串行化操作序列的請求;同步更新執行模塊網絡中的節點根據接收的決策節點發送來的串行化操作序列執行 本地數據庫操作,并更新最高版本號以及本地的串行化操作序列。
2.根據權利要求1所述的一種分布式數據同步系統,其特征在于,所述節點還包括共 享內存,所述數據同步模塊還包括共享內存管理模塊,共享內存管理模塊負責管理共享內 存的讀寫;共享內存用于緩存本地節點的同步請求,存放數據同步操作序列以及串行化操 作序列。
3.根據權利要求1或2所述的一種分布式數據同步系統,其特征在于,所述數據同步模 塊還包括日志處理模塊,負責維護日志文件,日志文件記錄運行過程中的數據執行消息和 錯誤消息。
4.一種分布式數據同步方法,該方法使用權利要求1所述系統實現分布式數據同步, 其特征在于,網絡中有數據同步請求時,實現數據同步的步驟包括步驟一、網絡中有節點發起分布式數據同步請求,通過同步請求生成模塊生成數據同 步操作序列;步驟二、所有發起數據同步請求的節點通過同步請求發送模塊向網絡中其他在線節點 發送本節點的數據同步操作序列;步驟三、網絡中所有節點通過串行化調度模塊接收網絡中所有節點的數據同步操作序 列,并將接收到的數據同步操作序列串行化,形成串行化操作序列;步驟四、決策節點通過決策調控模塊將串行化操作序列發送給網絡中其他節點; 步驟五、網絡中的在線節點通過同步更新接收模塊接收從決策節點發送來的串行化操 作序列;步驟六、網絡中的在線節點將接收到的串行化操作序列中的版本號與本地節點的最高 版本號進行比較,如果串行化操作序列中的版本號是從本地節點的最高版本號+1開始,并 且版本號連續,則說明接收到的串行化操作序列正確,轉到步驟九;否則轉到步驟七;步驟七、在線節點通過同步更新重發模塊向決策節點發送重發串行化操作序列的請求;步驟八、決策節點收到重發串行化操作序列的請求后,重新向該請求重發的節點發送 對應的串行化操作序列,轉到步驟五;步驟九、在線節點通過同步更新執行模塊根據接收的決策節點發送來的串行化操作序 列執行本地數據庫操作,并更新最高版本號以及本地的串行化操作序列。
5.根據權利要求4所述的一種分布式數據同步方法,其特征在于,還包括節點新上線 時的數據同步方法,包括以下步驟步驟一、節點新上線時,通過節點上線初始化模塊確定新上線節點類型,向網絡中其他 節點發送上線消息,在節點狀態表中增加本節點信息;步驟二、新上線節點比較自身節點與決策節點的最高版本號信息,并進行判斷,如果新 上線節點最高版本號小于決策節點最高版本號,則轉到步驟三,否則轉到步驟十;步驟三、新上線節點通過同步更新重發模塊請求決策節點發送新上線節點最高版本號 之后的串行化操作序列;步驟四、決策節點通過決策調控模塊將版本號從新上線節點最高版本號+1開始到決 策節點最高版本號的串行化操作序列發送給新上線節點;步驟五、新上線節點通過同步更新接收模塊接收從決策節點發送來的串行化操作序列;步驟六、新上線節點將接收到的串行化操作序列中的版本號與本地節點和決策節點的 最高版本號進行比較,如果串行化操作序列中的版本號是從本地節點的最高版本號+1開 始,并且版本號連續,直到版本號為決策節點的最高版本號為止,則說明接收到的串行化操 作序列正確,轉到步驟九;否則轉到步驟七;步驟七、新上線節點通過同步更新重發模塊向決策節點發送重發串行化操作序列的請求;步驟八、決策節點收到重發串行化操作序列的請求后,重新向新上線節點發送對應的 串行化操作序列,轉到步驟五;步驟九、新上線節點通過同步更新執行模塊根據接收的決策節點發送來的串行化操作 序列執行本地數據庫操作,并更新最高版本號以及本地的串行化操作序列;步驟十、新上線節點通過節點狀態維護模塊每隔一定時間在網絡中廣播本節點的IP 地址、最高版本號和節點類型。
全文摘要
本發明涉及一種分布式數據同步系統及方法,包括通過網絡連接的多個節點,其中每個節點均包括數據庫、節點狀態表以及數據同步模塊,數據同步模塊具體包括節點上線初始化模塊、節點狀態維護模塊、節點類型選擇模塊、同步請求生成模塊、同步請求發送模塊、串行化調度模塊、決策調控模塊、同步更新接收模塊、同步更新重發模塊、同步更新執行模塊。本發明還提供了利用所述系統實現數據同步的方法。本發明提出的分布式數據同步系統及方法在無中心節點的網絡環境中,可以實現實時、并發操作的分布式數據同步,保證在任意節點可以隨時上線或下線的情況下,網絡中每個節點數據庫中的數據實時一致。
文檔編號H04L29/08GK102088489SQ201010624118
公開日2011年6月8日 申請日期2010年12月31日 優先權日2010年12月31日
發明者包成剛, 李侃 申請人:北京理工大學