国产精品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>

      一種分布式實時數(shù)據(jù)復制同步方法

      文檔序號:6579999閱讀:207來源:國知局
      專利名稱:一種分布式實時數(shù)據(jù)復制同步方法
      技術領域
      本發(fā)明屬于計算機應用技術領域,涉及分布式實時數(shù)據(jù)的復制同步方法。
      背景技術
      在空中交通管制系統(tǒng)(ATC, Air Traffic Control system)、艦船管理系統(tǒng)(CMS, Combat Management System)等實時、重大使命系統(tǒng)(Real-time,mission-critical system)中,服務進程一般采用冗余配置部署在多臺處理機上,多臺處理機上的相同進程構成一個集群(Cluster),同時只有一個處理機上的進程為主態(tài),其它為從態(tài)。當主態(tài)進程所在處理機或主態(tài)進程本身出現(xiàn)問題,集群控制進程將自動選擇某個從態(tài)進程切換到主態(tài)繼續(xù)運行。如何保證多臺處理機上的主從進程間數(shù)據(jù)的一致性和實時更新成為一個技術關鍵和難點。傳統(tǒng)的方法采用數(shù)據(jù)庫作為存儲介質,多臺處理機同時連接到數(shù)據(jù)庫實現(xiàn)數(shù)據(jù)共享,但此方法存放兩個問題(1)存在單點故障,如數(shù)據(jù)庫宕機,則整個系統(tǒng)將不可用;(2)實時性不高,無法滿足ATC等實時、重大使命系統(tǒng)的要求。另外也存在采用基于事務處理的數(shù)據(jù)同步的方法,但在處理機很多且同步數(shù)據(jù)量大的情況下,其實時性受到很大影響,基本上不能滿足數(shù)據(jù)的一致性和實時更新的要求。

      發(fā)明內容
      本發(fā)明的目的是針對現(xiàn)有技術的不足,提出一種分布式實時數(shù)據(jù)復制同步方法,簡稱DDR方法。本方法不釆用數(shù)據(jù)庫作為存儲介質,不存在因數(shù)據(jù)庫宕機造成整個系統(tǒng)不能使用的情況,同時,提高了數(shù)據(jù)傳輸?shù)膶崟r性和可靠性,滿足ATC、 CMS等實時、重大使命系統(tǒng)中的實時數(shù)據(jù)同步復制需要,保持主從進程間數(shù)據(jù)的一致性,進而提高整個系統(tǒng)運行的可靠性、可用性。
      本發(fā)明的目的是這樣達到在需保持數(shù)據(jù)同步的每臺處理機上運行一個實時數(shù)據(jù)同步進程,簡稱DDR進程,每個DDR進程中保存和維持與其它處理機上的DDR進程相同的數(shù)據(jù)拷貝。同時,提供一個函數(shù)接口庫,簡稱DDR接口庫,用于應用程序與數(shù)據(jù)同步進程DDR進行數(shù)據(jù)交互。為提高DDR進程與DDR接口庫數(shù)據(jù)存取的性能,將DDR進程管理的數(shù)據(jù)存放在操作系統(tǒng)提供的共享內存(ShareMemory)中。DDR進程管理的數(shù)據(jù)以條為單位,每條數(shù)據(jù)的空間大小固定為N字節(jié),共M條數(shù)據(jù)記錄,存儲在一塊連續(xù)的MXN字節(jié)大小的共享內存中,每一條數(shù)據(jù)內容均包括該數(shù)據(jù)的邏輯時間LTS、更新的應用程序編號UID和用戶數(shù)據(jù)USER DATA三部分,其中應用程序編號UID由處理機編號和應用程序的進程號PID組成,保持唯一性。每個DDR進程會定期廣播心跳信息給其它DDR進程,以保證在每個DDR進程中維持所有正常運行的DDR進程的IP地址列表和當前的主態(tài)DDR進程編號。整個DDR進程組中只能有一個主態(tài)DDR進程,如果判斷出現(xiàn)2個以上主態(tài)或無主態(tài)進程時,將啟動主態(tài)選舉算法選舉一個IP地址最小的處理機上的DDR進程為主態(tài),其余均為從態(tài);數(shù)據(jù)復制步驟包括實時數(shù)據(jù)同步進程DDR初始化;主態(tài)選舉;數(shù)據(jù)一致性周期性檢査;數(shù)據(jù)更新;數(shù)據(jù)更新通知;數(shù)據(jù)更新沖突解決;數(shù)據(jù)讀取和DDR進程退出幾個部分,其中數(shù)據(jù)讀取是應用程序通過DDR接口庫直接從本地共享內存中讀取某條數(shù)據(jù),不產生網絡訪問。數(shù)據(jù)復制步驟的具體過程是
      (1) 實時數(shù)據(jù)同步進程DDR初始化
      a) 程序啟動,初始化共享內存數(shù)據(jù)區(qū),
      b) 將進程的主從狀態(tài)置為從態(tài)狀態(tài),
      c) DDR進程啟動成功后,周期性向其它DDR進程廣播心跳信息HBM,
      d) 接收其它DDR進程心跳信息HBM,并更新本地活動列表,如超過規(guī)定時間未收到某個的心跳消息HBM消息,則在活動列表中刪除該進程的相應信息。
      (2) 主態(tài)選舉
      a) 主態(tài)DDR進程選舉算法:若從態(tài)DDR進程收到主DDR進程將退出消息MDM消息或超過規(guī)定時間未收到數(shù)據(jù)一致性檢查消息MCM消息,則認為主態(tài)進程已不能正常工作,根據(jù)本地活動DDR進程列表檢査本進程所在處理機的IP地址是否最小,判斷本進程是否應切換到主態(tài),如需切換到主態(tài),則廣播發(fā)送主DDR進程存活消息MEM消息,同時將本機DDR進程切換為主態(tài)。
      b) 多主態(tài)DDR進程沖突解決算法若主態(tài)DDR進程收到數(shù)據(jù)一致性檢査消息MCM消息或主態(tài)DDR進程存活消息MEM,則認為存在多個主態(tài),因此用本機IP地址和收到的MCM消息的IP地址比較若本機IP較大,則認為有其它DDR進程
      8更適合主態(tài),將本機DDR進程切換為從態(tài);若本機IP較小,則發(fā)送MEM消息給 相應DDR進程,其它主態(tài)DDR進程作同樣判斷。
      (3) 數(shù)據(jù)一致性周期性檢査
      主態(tài)DDR進程定期廣播發(fā)送數(shù)據(jù)一致性檢査消息MCM, MCM消息中包含主態(tài) DDR進程的每條數(shù)據(jù)的LTS和UID字段,DDR進程收到MCM消息后將作以下處理
      a) 主態(tài)DDR進程收到MCM消息,則知道出現(xiàn)多個主態(tài),則啟動第(2)步中 的多主態(tài)DDR進程沖突解決,從而保證只有一個主態(tài)進程。
      b) 每個從態(tài)DDR進程收到MCM消息,則根據(jù)MCM消息中內容逐條與本地數(shù) 據(jù)的LTS和UID比較。
      如果MCM消息中的該條記錄的LTS值較大,說明主態(tài)DDR進程的數(shù)據(jù)為較新 版本,向主態(tài)DDR進程發(fā)送數(shù)據(jù)重傳消息RDM,請求主態(tài)重傳該條數(shù)據(jù),主態(tài)DDR 進程收到RDM消息后,用數(shù)據(jù)重傳應答消息RRM,廣播該條數(shù)據(jù)的最新版本數(shù)據(jù)。
      如果MCM消息中的該條記錄的LTS值較小,則主態(tài)DDR進程的數(shù)據(jù)為舊版本, 從態(tài)DDR進程發(fā)送RRM消息給主態(tài)DDR進程,以更新該條數(shù)據(jù)。
      如果MCM消息中的該條記錄與本地記錄的LTS值相等,但是兩者UID值不相 等,說明存在數(shù)據(jù)沖突且還未被應用程序解決,向主態(tài)DDR進程發(fā)送RDM消息, 請求主態(tài)重傳該條數(shù)據(jù),
      主態(tài)DDR進程收到RDM消息后,用RRM消息廣播該條數(shù)據(jù)的最新版本數(shù)據(jù)。
      如果MCM消息中的該條記錄與本地記錄的LTS值和UID值均相等,說明兩者 數(shù)據(jù)版本一致,不作任何處理。
      (4) 數(shù)據(jù)更新
      a) 當應用程序需更新某條數(shù)據(jù)時,調用DDR接口庫的提供的更新函數(shù)將更 新數(shù)據(jù)發(fā)送給本地DDR進程,本地DDR進程采用以下算法更新數(shù)據(jù)
      i) 將該條數(shù)據(jù)的LTS加l, UID更新為調用進程的UID,更新本地的數(shù)據(jù);
      ii) 向其它DDR進程廣播發(fā)送數(shù)據(jù)更新UDM消息,以更新該條數(shù)據(jù);
      b) DDR進程接收到數(shù)據(jù)更新消息UDM按以下算法處理
      i) 如UDM消息中該條數(shù)據(jù)的LTS值小于本地該條數(shù)據(jù)的LTS值,說明本地 數(shù)據(jù)較新,不做處理;
      ii) 如UDM消息中該條數(shù)據(jù)的LTS值大于本地該條數(shù)據(jù)的LTS值,則用UDM中的數(shù)據(jù)更新本地數(shù)據(jù),包括LTS和UID字段;
      iii) 如UDM消息中該條數(shù)據(jù)的LTS值等于本地該條數(shù)據(jù)的LTS值,但UID 值不相等,說明產生數(shù)據(jù)更新沖突,按第(6)步"數(shù)據(jù)更新沖突解決算法"解 決沖突,并記錄詳細的日志;
      iv) 其它情況,則不做處理;
      c) DDR進程接收到數(shù)據(jù)重傳應答消息RRM按以下算法處理
      i) 如RRM消息中該條數(shù)據(jù)的LTS值小于本地該條數(shù)據(jù)的LTS值,說明本 地數(shù)據(jù)較新,不做處理;
      ii) 如RRM消息中該條數(shù)據(jù)的LTS值大于本地該條數(shù)據(jù)的LTS值,則用RRM 中的數(shù)據(jù)更新本地數(shù)據(jù),包括LTS和UID字段;
      iii) 如RRM消息中該條數(shù)據(jù)的LTS值等于本地該條數(shù)據(jù)的LTS值,但UID 值不相等,說明產生數(shù)據(jù)更新沖突,按第(6)步"數(shù)據(jù)更新沖突解決算法"解 決沖突,并記錄詳細的日志。
      (5) 數(shù)據(jù)更新通知接收到數(shù)據(jù)更新的DDR進程發(fā)送數(shù)據(jù)更新通知消息給 本地DDR接口庫,應用程序通過定時輪詢或注冊回調函數(shù)方式獲得此通知消息。
      (6) 數(shù)據(jù)更新沖突解決
      當DDR進程收到UDM或RRM消息時并檢測到數(shù)據(jù)更新沖突時按下列方法進 行處理
      a) 將該條數(shù)據(jù)的本地數(shù)據(jù)保存到沖突數(shù)據(jù)列表中;
      b) 用收到的數(shù)據(jù)更新本地相應數(shù)據(jù);
      c) 向沖突數(shù)據(jù)中的數(shù)據(jù)更新消息UID對應的DDR接口庫發(fā)送數(shù)據(jù)沖突通知 消息,由DDR接口庫對應的本地應用程序解決此沖突;
      d) 向本地其它應用程序的DDR接口庫發(fā)送數(shù)據(jù)更新通知。
      (7) 數(shù)據(jù)讀取
      應用程序通過DDR接口庫直接從本地共享內存中讀取某條數(shù)據(jù)。
      (8) DDR進程退出
      處于主態(tài)的DDR進程退出時,廣播發(fā)送主DDR進程將退出消息MDM消息。 本發(fā)明具有的積極效果是情況,且數(shù)據(jù) 讀取是應用程序通過DDR接口庫直接從本地共享內存中讀取,不產生網絡訪問, 數(shù)據(jù)更新快,實吋性高。
      2、 數(shù)據(jù)分布在每臺處理機上,且保持一致,可靠性更高,特別適合于實時、 分布式、重大使命系統(tǒng)。
      3、 本地儲存采用共享內存方式,使本機多個應用進程間數(shù)據(jù)交換速度更快、 支持的應用程序更多。共享內存方式比本機文件共享、TCP/IP等方式效率更高。


      圖1是以4臺處理機為例的分布式數(shù)據(jù)復制部署示意圖。 圖2是存儲在MXN大小共享存儲空間的數(shù)據(jù)結構示意圖。
      具體實施例方式
      本分布式實時數(shù)據(jù)復制同步方法的過程即是實時數(shù)據(jù)同步進程DDR進程的 實施過程。
      DDR進程間用于數(shù)據(jù)交互的消息定義如下
      HBM: Heartbeat Message, DDR進程心跳消息,用于向其它DDR進程周期性 報告本機DDR進程的存活等狀態(tài)。HBM消息數(shù)據(jù)包括消息順序號、本機IP、消 息產生時間、主從狀態(tài)。
      MCM: Master Check Message,數(shù)據(jù)一致性檢查消息,主DDR進程定期廣播 的數(shù)據(jù)一致性檢査消息,便于其它DDR進程檢査和更新數(shù)據(jù),以保持全局數(shù)據(jù)一 致。MCM消息數(shù)據(jù)包括消息順序號、本機IP、消息產生時間、每條數(shù)據(jù)的邏輯 時間LTS和應用程序編號UID字段等。
      UDM: Update Data Message,數(shù)據(jù)更新消息,用于DDR進程將數(shù)據(jù)更新情況 和更新的數(shù)據(jù)及時發(fā)送給其他的DDR進程。UDM消息包括消息順序號,本機IP 地址,消息產生時間,待更新數(shù)據(jù)的編號、邏輯時間LTS、應用程序編號UID、 用戶數(shù)據(jù)user data等。
      RDM: Retransmission Data Message,數(shù)據(jù)重傳消息,用于DDR進程向某個 DDR進程請求重傳某條數(shù)據(jù);RDM消息數(shù)據(jù)包括消息順序號、本機IP地址、消 息產生時間、請求重傳數(shù)據(jù)的編號。
      RRM: R印ly Retransmission Message,數(shù)據(jù)重傳應答消息,用于對收到RDM消息后的應答;RRM消息數(shù)據(jù)包括消息順序號、本機IP地址、消息產生時間、 重傳的數(shù)據(jù)條的編號、邏輯時間LTS、應用程序編號UID、用戶數(shù)據(jù)user data head 禾口 user data。
      MDM: Master Dead Message,主DDR進程將退出消息,在DDR進程將退出前 發(fā)送給其它DDR進程,用于其它進程啟動主機選舉過程;MDM消息數(shù)據(jù)包括消 息順序號、本機IP地址、消息產生時間。
      MEM: Master Exist Message, 主DDR進程存活消息,用于解決同時存在多 個主DDR進程的情況。MEM消息數(shù)據(jù)包括消息順序號、本機IP地址、消息產 生時間。
      DDR接口庫的定義
      應用程序與數(shù)據(jù)同步進程DDR進行數(shù)據(jù)交互通過提供函數(shù)接口庫即DDR接口 庫方式完成。在DDR接口庫中有為應用程序提供數(shù)據(jù)獲取、數(shù)據(jù)更新、定時輪詢 和注冊更新通知回調等接口函數(shù)。
      DDR接口庫函數(shù)定義為
      (1) 數(shù)據(jù)獲取函數(shù)定義為
      int Get (int nddrNo, char承pUserdata, int nUserdataLength), 本函 數(shù)從本地共享內存數(shù)據(jù)中取出第nddrNo條數(shù)據(jù)并將數(shù)據(jù)內容放入pUserdata中, 數(shù)據(jù)最長為nUserdataLength字節(jié)。應用程序直接通過DDR接口庫從本地共享內 存中讀取數(shù)據(jù),不產生網絡訪問,既可減少網絡開銷,又可提高數(shù)據(jù)讀取的實時 性。
      (2) 數(shù)據(jù)更新函數(shù)定義為
      irrt Set (irrt nddrNo, const char氺pUserdata, int nUserdataLength), 本函數(shù)將pUserdata中的數(shù)據(jù)更新到本地數(shù)據(jù)拷貝中第nddrNo條數(shù)據(jù)中,數(shù)據(jù) 最長為nUserdataLength字節(jié)0
      (3) 定時輪詢函數(shù)定義為
      intGetNotify (int * changedRecords),根據(jù)函數(shù)返回有多少條數(shù)據(jù)變化, 將變化數(shù)據(jù)的編號放入changedRecords數(shù)組中。應用程序可根據(jù) changedRecords數(shù)組中的數(shù)據(jù)編號調用get函數(shù)取得具體的變化的數(shù)據(jù)。當某 條數(shù)據(jù)發(fā)生變化時,本地發(fā)送包含數(shù)據(jù)編號的通知消息到本地應用程序的DDR接
      12口庫的隊列中,應用程序采用定時輪詢方式獲取變化的數(shù)據(jù)信息。 (4)注冊回調函數(shù)為 int RegisterNotifyCallback (void氺funcptr), funcptr為形如void func (int nRecordNo)函數(shù)指針,nRecordNo為變化的數(shù)據(jù)編號。當有通知消息時, DDR接口庫自動調用應用程序注冊的函數(shù)(funcptr)完成相應的功能處理。 本實施例中數(shù)據(jù)復制的具體步驟是
      (1) 實時數(shù)據(jù)同步進程DDR初始化
      a) 程序啟動,根據(jù)配置參數(shù),初始化共享內存數(shù)據(jù)區(qū),
      b) 將進程的主從狀態(tài)置為從態(tài)狀態(tài),
      c) DDR進程啟動成功后,以2秒鐘為周期向其它DDR進程廣播心跳信息HBM,
      d) 接收其它DDR進程心跳信息HBM,并更新本地活動列表,如超過規(guī)定的5 秒未收到某個的心跳消息朋M消息,則在活動列表中刪除該進程的相應信息。
      (2) 主態(tài)選舉
      a) 主態(tài)DDR進程選舉
      若從態(tài)DDR進程收到主DDR進程將退出消息MDM消息或超過規(guī)定時間,一 般定為2.5 3秒,未收到數(shù)據(jù)一致性檢查消息MCM消息,則認為主態(tài)進程已不 能正常工作。因此DDR進程檢査本機IP地址和本地活動DDR進程列表中最小IP 地址的關系
      如果本機IP地址最小,則認為本進程應切換到主態(tài),廣播發(fā)送主DDR進程 存活消息MEM消息,同時將本機DDR進程切換為主態(tài)。 如果本機IP地址不為最小,則不做任何處理。
      b) 多主態(tài)DDR進程沖突解決
      若主態(tài)DDR進程收到數(shù)據(jù)一致性檢查消息MCM消息或主態(tài)DDR進程存活消 息MEM,則認為存在多個主態(tài),因此用本機IP地址和收到的MCM消息的IP地址 比較若本機IP較大,則認為有其它DDR進程更適合主態(tài),將本機DDR進程切 換為從態(tài);若本機IP較小,則發(fā)送MEM消息給相應DDR進程,其它主態(tài)DDR進 程作同樣判斷。
      (3)數(shù)據(jù)一致性周期性檢査主態(tài)DDR進程定期1秒廣播發(fā)送數(shù)據(jù)一致性檢查消息MCM消息,MCM消息 中包含主態(tài)DDR進程的每條數(shù)據(jù)的LTS和UID字段,DDR進程收到MCM消息后將 作以下處理
      a) 主態(tài)DDR進程收到MCM消息,則知道出現(xiàn)多個主態(tài),啟動第(2)步中 的多主態(tài)DDR進程沖突解決,最后保證只有一個主態(tài)進程。
      b) 每個從態(tài)DDR進程收到MCM消息,則根據(jù)MCM消息中內容逐條與本地數(shù) 據(jù)的LTS和UID比較。
      如果LTS (MCM) > LTS (local record),則主態(tài)DDR進程的該條記錄為 較新版本,向主態(tài)DDR進程發(fā)送RDM消息,請求主態(tài)DDR進程重傳該條數(shù)據(jù),主 態(tài)DDR進程收到RDM消息后,隨機延遲0-50毫秒時間后,用RRM消息廣播該條 數(shù)據(jù)的最新版本數(shù)據(jù)。采用隨機延遲時間后發(fā)送RRM消息的目的是將可能收到的 多臺從態(tài)DDR進程的RDM消息壓縮為一次RRM消息應答,減少網絡流量及DDR進 程處理時間。
      如果LTS (MCM) < LTS (local record),則主態(tài)DDR進程的數(shù)據(jù)為舊版 本,從態(tài)DDR進程發(fā)送RRM消息給主態(tài)DDR進程,以更新該條數(shù)據(jù)。
      如果LTS (MCM) = LTS (local record),并且UID (MCM) ! = ■ (local record),說明存在數(shù)據(jù)沖突,但還未被應用程序解決,向主態(tài)DDR進程發(fā)送RDM 消息,請求主態(tài)重傳該條數(shù)據(jù),主態(tài)DDR進程收到RDM消息后,用RRM消息廣播 該條數(shù)據(jù)的最新版本數(shù)據(jù)。
      如果LTS (MCM) = LTS (local record),并且UID (MCM) = UID (local record),說明兩者數(shù)據(jù)版本一致,不作任何處理。 (4)數(shù)據(jù)更新
      a)當應用程序需更新某條數(shù)據(jù)時,調用DDR接口庫的數(shù)據(jù)更新Set函數(shù)將 待更新的數(shù)據(jù)發(fā)送給本地DDR進程,本地DDR進程采用以下算法更新數(shù)據(jù)
      i )將該條數(shù)據(jù)的LTS加1, UID更新為調用進程的UID,更新本地的數(shù)據(jù); ii)向其它DDR進程廣播發(fā)送數(shù)據(jù)更新UDM消息;
      b) DDR進程接收到數(shù)據(jù)更新消息UDM或數(shù)據(jù)重傳應答消息RRM消息按以下 算法處理i) 如LTS(UDM) 〈LTS(local record )或LTS (RRM) < LTS (local record), 不做處理;
      ii) 如LTS(UDM) 〉 LTS (local record)或LTS (RRM) 〉 LTS (local record) 則用UDM或RRM中的數(shù)據(jù)更新本地對應數(shù)據(jù),包括LTS和UID字段;
      iii) 如LTS (UDM) = LTS (local record),并且UID(UDM) UID (local record);或LTS(RRM) = LTS (local record),且UID(RRM) != UID (local record),說明產生數(shù)據(jù)更新沖突,按照第(6)步"數(shù)據(jù)更新沖突解決算法"解決 沖突,并記錄詳細的日志;
      iv) 其它情況,則不做處理。
      (5) 數(shù)據(jù)更新通知接收到數(shù)據(jù)更新的DDR進程發(fā)送數(shù)據(jù)更新通知消息給 本地DDR接口庫,應用程序通過定時輪詢或注冊回調函數(shù)方式獲得此通知消息。
      (6) 數(shù)據(jù)更新沖突解決
      當DDR進程收到UDM或RRM消息時并檢測到數(shù)據(jù)更新沖突時,這時按下列方 法進行處理
      a) 將該條數(shù)據(jù)的本地數(shù)據(jù)保存到沖突數(shù)據(jù)列表中;
      b) 用收到的數(shù)據(jù)更新本地相應數(shù)據(jù);
      c) 向沖突數(shù)據(jù)中的數(shù)據(jù)更新者UID對應的DDR接口庫發(fā)送數(shù)據(jù)沖突通知消 息,由DDR接口庫對應的本地應用程序解決此沖突;
      d) 向本地其它應用程序的DDR接口庫發(fā)送數(shù)據(jù)更新通知。
      (7) 數(shù)據(jù)讀取
      應用程序通過DDR接口庫直接從本地共享內存中讀取需要的數(shù)據(jù)條數(shù)據(jù)
      (8) DDR進程退出處于主態(tài)的DDR進程退出時,廣播發(fā)送主DDR進程將 退出消息MDM消息,此消息表示整個進程的退出。
      權利要求
      1、一種分布式實時數(shù)據(jù)復制同步方法,其特征在于在需保持數(shù)據(jù)同步的每臺處理機上運行一個實時數(shù)據(jù)同步進程,簡稱DDR進程,每個DDR進程中保存和維持與其它處理機上的DDR進程相同的數(shù)據(jù)拷貝;同時,提供一個函數(shù)接口庫,簡稱DDR接口庫,用于應用程序與數(shù)據(jù)同步進程DDR進行數(shù)據(jù)交互;DDR進程管理的數(shù)據(jù)以條為單位,每條數(shù)據(jù)的空間大小固定為N字節(jié),共M條數(shù)據(jù)記錄,存儲在一塊連續(xù)的M×N字節(jié)大小、由操作系統(tǒng)提供的共享內存中,每一條數(shù)據(jù)內容均包括該數(shù)據(jù)的邏輯時間LTS、更新的應用程序編號UID和用戶數(shù)據(jù)USER DATA三部分,其中應用程序編號UID由處理機編號和應用程序的進程號PID組成;每個DDR進程定期廣播心跳信息給其它DDR進程,以保證在每個DDR進程中維持所有正常運行的DDR進程的IP地址列表和當前的主態(tài)DDR進程編號;整個DDR進程組中只能有一個主態(tài)DDR進程,如果判斷出現(xiàn)2個以上主態(tài)或無主態(tài)進程時,則啟動主態(tài)選舉算法選舉一個IP地址最小的處理機上的DDR進程為主態(tài),其余均為從態(tài);數(shù)據(jù)復制步驟包括實時數(shù)據(jù)同步進程DDR初始化;主態(tài)選舉;數(shù)據(jù)一致性周期性檢查;數(shù)據(jù)更新;數(shù)據(jù)更新通知;數(shù)據(jù)更新沖突解決;數(shù)據(jù)讀取和DDR進程退出幾個部分,其中數(shù)據(jù)讀取是應用程序通過DDR接口庫直接從本地共享內存中讀取某條數(shù)據(jù),不產生網絡訪問。
      2、 如權利要求1所述的分布式實時數(shù)據(jù)復制同步方法,其特征在于所述 數(shù)據(jù)復制步驟(1) 實時數(shù)據(jù)同步進程DDR初始化a) 程序啟動,初始化共享內存數(shù)據(jù)區(qū),b) 將進程的主從狀態(tài)置為從態(tài)狀態(tài),c) DDR進程啟動成功后,周期性向其它DDR進程廣播心跳信息HBM,d) 接收其它DDR進程心跳信息HBM,并更新本地活動列表,如超過規(guī)定時間 未收到某個的心跳消息HBM消息,則在活動列表中刪除該進程的相應信息;(2) 主態(tài)選舉a)主態(tài)DDR進程選舉算法若從態(tài)DDR進程收到主DDR進程將退出消息MDM 消息或超過規(guī)定時間未收到數(shù)據(jù)一致性檢査消息MCM消息,則認為主態(tài)進程已不能正常工作,根據(jù)本地活動DDR進程列表檢査本進程所在處理機的IP地址是否最小,判斷本進程是否應切換到主態(tài),如需切換到主態(tài),則廣播發(fā)送主DDR進程存活消息MEM消息,同時將本機DDR進程切換為主態(tài),b)多主態(tài)DDR進程沖突解決算法若主態(tài)DDR進程收到數(shù)據(jù)一致性檢查消息MCM消息或主態(tài)DDR進程存活消息MEM,則認為存在多個主態(tài),因此用本機IP地址和收到的MCM消息的IP地址比較若本機IP較大,則認為有其它DDR進程更適合主態(tài),將本機DDR進程切換為從態(tài),若本機IP較小,則發(fā)送MEM消息給相應DDR進程,其它主態(tài)DDR進程作同樣判斷;(3) 數(shù)據(jù)一致性周期性檢查主態(tài)DDR進程定期廣播發(fā)送數(shù)據(jù)一致性檢査消息MCM,MCM消息中包含主態(tài)DDR進程的每條數(shù)據(jù)的LTS和UID字段,DDR進程收到MCM消息后將作以下處理-a) 主態(tài)DDR進程收到MCM消息,則知道出現(xiàn)多個主態(tài),啟動第(2)步中的多主態(tài)DDR進程沖突解決,從而保證只有一個主態(tài)進程,b) 每個從態(tài)DDR進程收到MCM消息,則根據(jù)MCM消息中內容逐條與本地數(shù)據(jù)的LTS和UID比較如果MCM消息中的該條記錄的LTS值較大,說明主態(tài)DDR進程的數(shù)據(jù)為較新版本,向主態(tài)DDR進程發(fā)送數(shù)據(jù)重傳消息RDM,請求主態(tài)重傳該條數(shù)據(jù),主態(tài)DDR進程收到RDM消息后,用數(shù)據(jù)重傳應答消息RRM,廣播該條數(shù)據(jù)的最新版本數(shù)據(jù),如果MCM消息中的該條記錄的LTS值較小,則主態(tài)DDR進程的數(shù)據(jù)為舊版本,從態(tài)DDR進程發(fā)送RRM消息給主態(tài)DDR進程,以更新該條數(shù)據(jù),如果MCM消息中的該條記錄與本地記錄的LTS值相等,但是兩者UID值不相等,說明存在數(shù)據(jù)沖突且還未被應用程序解決,向主態(tài)DDR進程發(fā)送RDM消息,請求主態(tài)重傳該條數(shù)據(jù),主態(tài)DDR進程收到RDM消息后,用RRM消息廣播該條數(shù)據(jù)的最新版本數(shù)據(jù),如果MCM消息中的該條記錄與本地記錄的LTS值和UID值均相等,說明兩者數(shù)據(jù)版本一致,不作任何處理;(4) 數(shù)據(jù)更新a)當應用程序需更新某條數(shù)據(jù)時,調用DDR接口庫的提供的更新函數(shù)將更新數(shù)據(jù)發(fā)送給本地DDR進程,本地DDR進程采用以下算法更新數(shù)據(jù)i )將該條數(shù)據(jù)的LTS加1, UID更新為調用進程的UID,更新本地的數(shù)據(jù),ii)向其它DDR進程廣播發(fā)送數(shù)據(jù)更新UDM消息,以更新該條數(shù)據(jù);b) DDR進程接收到數(shù)據(jù)更新消息UDM按以下算法處理i) 如UDM消息中該條數(shù)據(jù)的LTS值小于本地該條數(shù)據(jù)的LTS值,說明本地數(shù)據(jù)較新,不做處理,ii) 如UDM消息中該條數(shù)據(jù)的LTS值大于本地該條數(shù)據(jù)的LTS值,則用UDM中的數(shù)據(jù)更新本地數(shù)據(jù),包括LTS和UID字段,iii) 如UDM消息中該條數(shù)據(jù)的LTS值等于本地該條數(shù)據(jù)的LTS值,但UID值不相等,說明產生數(shù)據(jù)更新沖突,按第(6)步"數(shù)據(jù)更新沖突解決算法"解決沖突,并記錄詳細的曰志,iv) 其它情況,則不做處理;c) DDR進程接收到數(shù)據(jù)重傳應答消息RRM按以下算法處理,i) 如RRM消息中該條數(shù)據(jù)的LTS值小于本地該條數(shù)據(jù)的LTS值,說明本地數(shù)據(jù)較新,不做處理,ii) 如RRM消息中該條數(shù)據(jù)的LTS值大于本地該條數(shù)據(jù)的LTS值,則用RRM中的數(shù)據(jù)更新本地數(shù)據(jù),包括LTS和UID字段,iii) 如RRM消息中該條數(shù)據(jù)的LTS值等于本地該條數(shù)據(jù)的LTS值,但UID值不相等,說明產生數(shù)據(jù)更新沖突,按第(6)步"數(shù)據(jù)更新沖突解決算法"解決沖突,并記錄詳細的日志;(5) 數(shù)據(jù)更新通知接收到數(shù)據(jù)更新的DDR進程發(fā)送數(shù)據(jù)更新通知消息給本地DDR接口庫,應用程序通過定時輪詢或注冊回調函數(shù)方式獲得此通知消息;(6) 數(shù)據(jù)更新沖突解決當DDR進程收到UDM或RRM消息時并檢測到數(shù)據(jù)更新沖突時按下列方法進行處理a) 將該條數(shù)據(jù)的本地數(shù)據(jù)保存到沖突數(shù)據(jù)列表中,b) 用收到的數(shù)據(jù)更新本地相應數(shù)據(jù),c) 向沖突數(shù)據(jù)中的數(shù)據(jù)更新消息UID對應的DDR接口庫發(fā)送數(shù)據(jù)沖突通知消息,由DDR接口庫對應的本地應用程序解決此沖突,d) 向本地其它應用程序的DDR接口庫發(fā)送數(shù)據(jù)更新通知;(7) 數(shù)據(jù)讀取應用程序通過DDR接口庫直接從本地共享內存中讀取某條數(shù)據(jù);(8) DDR進程退出處于主態(tài)的DDR進程退出時,廣播發(fā)送主DDR進程將退出消息MDM消息。
      3、 如權利要求1所述的分布式實時數(shù)據(jù)復制同步方法,其特征在于所述提供一個函數(shù)接口庫,用于應用程序與數(shù)據(jù)同步進程DDR進行數(shù)據(jù)交互是指在DDR接口庫中有為應用程序提供數(shù)據(jù)獲取、數(shù)據(jù)更新、定時輪詢和注冊更新通知回調的接口函數(shù),DDR接口庫函數(shù)定義為(1) 獲取數(shù)據(jù)函數(shù)定義為int Get (int nddrNo, char承pUserdata, int nUserdataLength), 本函數(shù)從本地共享內存數(shù)據(jù)中取出第nddrNo條數(shù)據(jù)并將數(shù)據(jù)內容放入pUserdata中,數(shù)據(jù)最長為nUserdatalength字節(jié);(2) 更新數(shù)據(jù)函數(shù)定義為int Set (int nddrNo, const char氺pUserdata, int nUserdataLength),本函數(shù)將pUserdata中的數(shù)據(jù)更新到本地數(shù)據(jù)拷貝中第nddrNo條數(shù)據(jù)中,數(shù)據(jù)最長為nUserdataLength字節(jié);(3) 定時輪詢函數(shù)定義為int GetNotify (int承changedRecords),根據(jù)函數(shù)返回有多少條數(shù)據(jù)變化,將變化數(shù)據(jù)的編號放入changedRecords數(shù)組中,應用程序可根據(jù)changedRecords數(shù)組中的數(shù)據(jù)編號調用get函數(shù)取得具體的變化的數(shù)據(jù);(4) 注冊回調函數(shù)為int RegisterNotifyCallback (void襯uncptr), funcptr為形女口 void func(int nRecordNo)函數(shù)指針,nRecordNo為變化的數(shù)據(jù)編號,當有通知消息時,DDR接口庫自動調用應用程序注冊的函數(shù)(funcptr)完成相應的功能處理。
      4、 如權利要求2所述的分布式實時數(shù)據(jù)復制同步方法,其特征在于所述心跳消息HBM消息數(shù)據(jù)包括消息順序號、本機IP、消息產生時間、主從狀態(tài);所述數(shù)據(jù)一致性檢査消息MCM消息數(shù)據(jù)包括消息順序號、本機IP、消息產生時間、每條數(shù)據(jù)的邏輯時間LTS和應用程序編號UID字段;所述數(shù)據(jù)更新消息UDM消息包括消息順序號、本機IP地址、消息產生時間、更新的數(shù)據(jù)條編號、邏輯時間LTS、應用程序編號UID字段和用戶數(shù)據(jù)user datahead禾口 user data^所述數(shù)據(jù)重傳消息RDM消息數(shù)據(jù)包括消息順序號、本機IP地址、消息產生時間、請求重傳數(shù)據(jù)條的編號;所述數(shù)據(jù)重傳應答消息RRM消息數(shù)據(jù)包括消息順序號、本機IP地址、消息產生時間、重傳數(shù)據(jù)條的編號、邏輯時間LTS、應用程序編號UID字段和用戶數(shù)據(jù)user data head禾口 user data;所述主DDR進程將退出消息MDM消息數(shù)據(jù)包括消息順序號、本機IP地址、消息產生時間;所述主DDR進程存活消息MEM消息數(shù)據(jù)包括消息順序號、本機IP、消息產生時間。
      全文摘要
      分布式實時數(shù)據(jù)復制同步方法屬計算機應用。每臺處理機上運行一個DDR進程,定期廣播心跳信息,保存和維持與其它處理機上進程相同的數(shù)據(jù)拷貝。應用程序與DDR進程在DDR接口庫中進行數(shù)據(jù)交互。數(shù)據(jù)以條為單位,存儲在操作系統(tǒng)提供的共享內存中,每條數(shù)據(jù)固定為N字節(jié),M條數(shù)據(jù)記錄,含邏輯時間、更新應用程序編號和用戶數(shù)據(jù)。整個DDR進程組中只有一個主態(tài)。復制步驟包括同步進程DDR初始化;主態(tài)選舉;數(shù)據(jù)一致性周期性檢查;數(shù)據(jù)更新;數(shù)據(jù)更新通知;數(shù)據(jù)更新沖突解決;數(shù)據(jù)讀取和DDR進程退出。本方法不用數(shù)據(jù)庫,杜絕了因數(shù)據(jù)庫宕機整個系統(tǒng)不能使用的情況,數(shù)據(jù)讀取不產生網絡訪問,數(shù)據(jù)更新快,實時性、可靠性高,特別適合于實時、分布式重大使命系統(tǒng)。
      文檔編號G06F9/52GK101661408SQ200910167619
      公開日2010年3月3日 申請日期2009年9月14日 優(yōu)先權日2009年9月14日
      發(fā)明者劉健波, 軍 楊, 波 楊 申請人:四川川大智勝軟件股份有限公司
      網友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1