
本發明一般涉及移動業務支撐領域,更具體地,涉及一種數據交換方法和系統。
背景技術:
目前,在移動業務支撐系統領域內,各個業務模塊間并發的數據交換基本采用讀寫鎖或比較和交換(CAS)操作的方式來進行并發控制。在用于進行業務數據交換的多個業務模塊中,由數據產生模塊首先將需要交換的業務數據寫入用于數據交換的存儲介質中(諸如文件、數據庫等),然后由數據消費模塊從存儲介質讀取數據。當同一份數據需要被多個數據消費模塊訪問時,需要根據消費模塊的數量,將數據復制多份,分別給不同的數據消費模塊使用。數據消費模塊在消費行為完成之后,自行刪除數據內容,以保證數據有且僅有一次消費行為發生。
在上述過程中,一般地需要對存儲介質中的數據加上讀寫鎖,或使用比較和交換(CAS)操作進行并發控制,以防止交換數據的臟讀、誤讀,即在“生產者”和“消費者”之間加讀寫鎖或進行CAS操作。由于寫鎖的獨占性、排他性,讀鎖與寫鎖的互斥性,以及CAS操作的串行性都會將并行操作轉換成串行操作,從而給系統造成很大的開銷,極大的限制了基于上述數據交換方式的多個業務模塊對同一份業務數據讀寫的并發性能,制約著業務支撐系統的業務吞吐量。此外,對于同一份數據,按數據消費者數量復制多份的做法,不僅會由于數據復制而增加系統響應時間,且浪費數據存儲空間,造成CPU資源、存儲資源等硬件成本的增加。
技術實現要素:
根據本發明的一個方面,本發明提供了一種數據交換方法。該方法包括:在向無鎖數據總線寫入數據的數據生成節點和從無鎖數據總線讀取數據的數據消費節點之間建立第一屏障;在從所述無鎖數據總線讀取數據的所述數據消費節點和向所示無鎖數據總線寫入數據的所述數據生成節點建立第二屏障;監測所述第一屏障和所述第二屏障是否變化;以及當所述第一屏障發生變化時,所述數據消費節點讀取數據,當所述第二屏障發生變化時,所述數據生成節點生成數據;其中所述數據生成節點、第一屏障、所述數據消費節點和所述第二屏障形成循環。
根據本發明的另一個方面,本發明提供了一種數據交換系統。該系統包括:第一屏障設置模塊,該第一屏障設置模塊被配置成在向無鎖數據總線寫入數據的數據生成節點和從無鎖數據總線讀取數據的數據消費節點之間建立第一屏障;第二屏障設置模塊,該第二屏障設置模塊被配置為在從所述無鎖數據總線讀取數據的所述數據消費節點和向所示無鎖數據總線寫入數據的所述數據生成節點建立第二屏障;監測模塊,該監測模塊被配置為監測所述第一屏障和所述第二屏障是否變化;以及裁定模塊,該裁定模塊被配置為當所述第一屏障發生變化時,判定所述數據消費節點讀取數據,當所述第二屏障發生變化時,判定所述數據生成節點生成數據;其中所述數據生成節點、第一屏障、所述數據消費節點和所述第二屏障形成循環。
根據本發明的另一個方面,本發明還提供了一種機器可讀存儲設備,其包括機器可讀指令,當所述機器可讀指令被執行時,實現上述方法或系統。
附圖說明
從下面結合附圖對本發明的具體實施方式的描述中可以更好地理解本發明,其中:
圖1示出了根據本發明實施例的無鎖數據總線的結構示意圖;
圖2示出了根據本發明實施例的基于無線數據總線進行數據交換的方法的流程圖;
圖3示出了根據本發明實施例的基于無線數據總線進行數據交換的系統的結構示意圖;
圖4示出了根據本發明實施例的數據交換的方法的工作原理圖;
圖5示出了根據本發明實施例的數據消費節點串行的數據交換的方法的時序圖;
圖6示出了根據本發明實施例的數據消費節點并行的數據交換的方法的時序圖。
具體實施方式
下面將詳細描述本發明的各個方面的特征和示例性實施例。在下面的詳細描述中,提出了許多具體細節,以便提供對本發明的全面理解。但是,對于本領域技術人員來說很明顯的是,本發明可以在不需要這些具體細節中的一些細節的情況下實施。下面對實施例的描述僅僅是為了通過示出本發明的示例來提供對本發明的更好的理解。本發明決不限于下面所提出的任何具體配置和算法,而是在不脫離本發明的精神的前提下覆蓋了元素、部件和算法的任何修改、替換和改進。在附圖和下面的描述中,沒有示出公知的結構和技術,以便避免對本發明造成不必要的模糊。
圖1示出了無鎖數據總線的結構示意圖。如圖1所示,該無鎖數據總線的內存可以被等分為N個單元。該無鎖數據總線的所管理的數據可存在于系統共享內存中或進程私有內存中。該無鎖數據總線的數據生成節點(生產者)和數據消費節點(消費者)采用注冊機制通知該無鎖數據總線。通常,無鎖數據總線只允許注冊一個數據生成節點(生產者)進行寫入操作,但允許注冊多個數據消費節點(消費者)進行讀取操作。該無鎖數據總線按順序、依次循環使用等分的單元(1,2,3…N):數據生成節點(生產者)依次往單元(1,2,3…N)寫數據,數據消費節點(消費者)依次從單元(1,2,3…N)讀數據。通常,只有當數據被所有的數據消費節點(消費者)讀取(消費)后,單元(1,2,3…N)才會被數據生成節點(生產者)再次使用(循環覆蓋),即再次寫入數據。
圖2示出了根據本發明實施例的基于無線數據總線進行數據交換的方法的流程圖。圖2所示的基于無線數據總線進行數據交換的方法包括:S210在向無鎖數據總線寫入數據的數據生成節點和從無鎖數據總線讀取數據的數據消費節點之間建立第一屏障;S220在從所述無鎖數據總線讀取數據的所述數據消費節點和向所示無鎖數據總線寫入數據的所述數據生成節點建立第二屏障;S230監測所述第一屏障和所述第二屏障是否變化;以及S240當所述第一屏障發生變化時,所述數據消費節點讀取數據,S250當所述第二屏障發生變化時,所述數據生成節點生成數據。
圖3示出了根據本發明實施例的基于無線數據總線進行數據交換的系統300的結構示意圖,該系統300包括:第一屏障設置模塊310,該第一屏障設置模塊310被配置成在向無鎖數據總線寫入數據的數據生成節點和從無鎖數據總線讀取數據的數據消費節點之間建立第一屏障;第二屏障設置模塊320,該第二屏障設置模塊320被配置為在從所述無鎖數據總線讀取數據的所述數據消費節點和向所示無鎖數據總線寫入數據的所述數據生成節點建立第二屏障;監測模塊330,該監測模塊330被配置為監測所述第一屏障和所述第二屏障是否變化;以及裁定模塊340,該裁定模塊340被配置為當所述第一屏障發生變化時,判定所述數據消費節點讀取數據,當所述第二屏障發生變化時,判定所述數據生成節點生成數據。
圖4示出了根據本發明實施例的數據交換的方法的工作原理圖。在圖4中,“生產者”是相對于無鎖數據總線而言,是寫入數據方;“消費者”是相對于無鎖數據總線而言,是讀取數據方,其中“消費者”也可對無鎖數據總線中已有數據單元的數據進行修改,但絕不會新增數據單元;“Wr_sequnce_No”、“Rd_sequnce_No”為一個計算機“字”,是“生產者”和“消費者”之間的“屏障”,保證兩者間的嚴格順序操作。該無鎖數據總線在讀寫過程中,利用現代計算機系統對“字”進行原子操作且開銷極低的特性,在“生產者”和“消費者”對“屏障”并發操作時,沒有加讀寫鎖也無“CAS”操作,通過計算機系統“字運算”天然的原子性,保證了數據交換并發操作之間的順序。在圖4中,每對“生產者”和“消費者”之間,有且只有一個“屏障”。在一個實施例中,消費者之間可定義為順序讀取,如“消費者1”和“消費者2”。在一個實施例中,消費者之間可定義為并行讀取,如“消費者1”和“消費者3”。
在一個實施例中,當系統啟動時,在“生產者”與“消費者1”之間建立屏障“Wr_sequnce_No”。當“生產者”產生一條數據后,將該屏障步進一位,“消費者1”發現“Wr_sequnce_No”變化時,即可安全讀取“生產者”產生的數據,此過程無讀寫鎖或CAS操作,有效提升并發性能。
在另一個實施例中,當系統啟動時,在“消費者1”與“消費者2”之間建立屏障“Rd_sequnce_No1”。當“消費者1”消費完一條數據后,將該屏障步進一位,“消費者2”發現“Rd_sequnce_No1”變化時,即可安全讀取“消費者1”消費過的數據,此過程無讀寫鎖或CAS操作,有效提升并發性能。當系統啟動時,在“消費者2”與“生產者”之間建立屏障“Rd_sequnce_No2”。當“消費者2”消費完一條數據后,將該屏障步進一位,“生產者”順序寫滿環狀隊列后,再次產生新的數據時,通過檢查“Rd_sequnce_No2”的步進值,判斷數據是否已經被最后一位消費者消費完。若消費完,即可覆蓋、循環使用消費過的數據存儲單元,若未消費完,則“生產者”等待直至數據被消費完,此過程無讀寫鎖或CAS操作,有效提升并發性能。
對“消費者2”而言,“消費者1”可以看作是“消費者2”的“生產者”。作為與“消費者1”并行讀取的“消費者3”,與“生產者”之間的屏障也是“Wr_sequnce_No”,其消費過程,與“消費者1”類似。
圖5示出了根據本發明實施例的數據消費節點串行的數據交換的方法的時序圖。
在圖5的時序圖中,步驟1,“生產者”產生數據,寫入隊列;
步驟2,“生產者”步進與“消費者1”之間的屏障:Wr_sequnce_No;
步驟3,“消費者1”監測Wr_sequnce_No是否發生變化,若發生變化,則進行步驟4,反之繼續監測;
步驟4,“消費者1”開始消費數據;
步驟5,“消費者1”消費完數據后,步進與“消費者2”之間的屏障:Rd_sequnce_No1;
步驟6,“消費者2”監測Rd_sequnce_No1是否發生變化,若發生變化,則進行步驟7,反之繼續監測;
步驟7,“消費者2”開始消費數據;
步驟8,“消費者2”消費完數據后,步進與“生產者”之間的屏障:Rd_sequnce_No2;
步驟9,“生產者”順序寫滿環狀隊列后,在覆蓋已使用過的存儲單元以產生新的數據之前,通過判斷與最后一位消費者——“消費者2”之間的屏障Rd_sequnce_No2的步進值,確定最后一位消費者是否已消費完數據;
步驟10,若“消費者2”還未消費完數據,“生產者”則等待直至數據被“消費者2”消費完;
步驟11,“生產者”重復利用數據存儲單元,覆蓋已消費完數據存儲單元,并生產新的數據。
圖6示出了根據本發明實施例的數據消費節點并行的數據交換的方法的時序圖。
步驟1,“生產者”產生數據,寫入隊列;
步驟2,“生產者”步進與“消費者1”之間的屏障:Wr_sequnce_No;
步驟3,“消費者1”監測Wr_sequnce_No是否發生變化,若發生變化,則進行步驟4,反之繼續監測;
步驟4,“消費者1”開始消費數據;
步驟5,“消費者1”消費完數據后,步進與“生產者”之間的屏障:Rd_sequnce_No1;
步驟6,“消費者3”監測Wr_sequnce_No變化是否發生,若發生變化,則進行步驟4,反之繼續監測(此步驟可與步驟3并行);
步驟7,“消費者3”開始消費數據(此步驟可與步驟4并行);
步驟8,“消費者3”消費完數據后,步進與“生產者”之間的屏障:Rd_sequnce_No3(此步驟可與步驟5并行);
步驟9、10,“生產者”順序寫滿環狀隊列后,在需要覆蓋已使用過的存儲單元以產生新的數據之前,通過判斷與所有消費者——“消費者1”、“消費者3”之間的屏障Rd_sequnce_No1、Rd_sequnce_No3的步進參數,確定所有消費者是否已消費完數據;
步驟11,若有任一消費者還未消費完數據,“生產者”則等待直至數據被所有消費者消費完;
步驟12,“生產者”重復利用數據存儲單元,覆蓋已消費完數據存儲單元,并生產新的數據。
在Billing(計費)系統中,經預處理模塊處理后的話單,通常需要給后續模塊(例如,批價模塊和賬務優惠模塊)進行處理。在現有系統中,這三個模塊之間是使用磁盤文件進行數據交互的,為防止批價模塊和賬務優惠模塊同時處理同一個文件,導致文件中數據誤讀、臟讀的問題,在處理過程中,預處理模塊會先將自己處理完成的話單,寫入到臨時文件中,再定時或定量改名成正式文件,給批價模塊處理;批價模塊也是定時或定量,產生正式話單文件給賬務優惠模塊處理。然而,由于文件讀寫鎖的存在,以及模塊間數據流轉停留(如定時定量生成正式文件),這種處理模式通常導致系統處理性能不高、用戶話單處理延時。此外,當批價和賬務優惠模塊所需話單文件中的絕大部分字段內容是相同的時,該處理模式導致存儲冗余。
與之相比,使用本申請的數據總線作為模塊間數據交換的組件后,預處理模塊即作為“生產者”,批價模塊和賬務優惠模塊即作為串行消費的“消費者1”和“消費者2”,由于存儲從磁盤變為內存而帶來的讀寫性能的提升,以及無鎖而帶來的并發性能的提升,保證了用戶話單處理的實時性,以及存儲空間冗余的減少。
在一個實施例中,提供一種機器可讀存儲設備,其包括機器可讀指令,當所述機器可讀指令被執行時,實現上述方法或裝置。
本文所描述的系統和方法的實施例和實現方式可以包括各種操作,這些操作可被實現于由計算機系統執行的機器可執行指令中。計算機系統可以包括一個或多個通用計算機或專用計算機(或其他電子設備)。計算機系統可以包括硬件組件,這些硬件組件包括用于執行操作的特定邏輯或者可以包括硬件、軟件和/或固件的組合。
各種技術或其某些方面或部分可以采用程序代碼(即,指令)的形式,所述程序代碼被實現于諸如軟盤、CD-ROM、硬驅動、磁卡或光卡、固態存儲器設備、非暫態計算機可讀存儲媒介或任何其他機器可讀存儲媒介,其中,當程序代碼被加載到機器(例如,計算機)中并被機器執行時,該機器成為用于實施各種技術的裝置。在程序代碼在可編程計算機上運行時,計算設備可以包括處理器、可由處理器讀取的存儲媒介(包括易失性和非易失性存儲器和/或存儲元件)、至少一個輸入設備以及至少一個輸出設備。易失性和非易失性存儲器和/或存儲元件可以是RAM、EPROM、閃速驅動器、光驅動器、磁性硬驅動器或用于存儲電子數據的其他媒介。
應當理解的是,本說明書中所描述的許多功能單元可被實現為一個或多個組件,組件是用來特別強調其實現獨立性的術語。例如,組件可以被實現為硬件電路,該硬件電路包括定制的超大規模集成電路(VLSI)電路或門陣列、或者諸如邏輯芯片、晶體管或其他分立組件之類的現成半導體。組件還可以被實現于可編程硬件設備中,例如,現場可編程門陣列、可編程陣列邏輯、可編程邏輯設備等。
組件還可以被實現于軟件中以由各種類型的處理器來執行。所標識的可執行代碼組件例如可以包括計算機指令的一個或多個物理或邏輯塊,其例如可被組織為對象、過程或功能。然而,所標識的組件的可執行代碼在物理上不一定是在一起的,但可以包括存儲于不同位置中的分離的指令,當這些分離的指令在邏輯上被結合在一起時,可以包括該組件并且實現該組件所規定的目標。
實際上,可執行代碼的組件可以是單個指令或多個指令,并且甚至可以分布于若干個不同的代碼片段、不同的程序以及若干個存儲器設備間。類似地,在本文中,操作數據可被標識并被示出于組件中,并且可采用任意適當的方式來實現并被安排于任意合適類型的數據結構中。操作數據可被集合為單個數據集,或者可以分布于不同的位置(包括不同的存儲設備),并且至少部分地可僅作為系統或網絡的電子信號而存在。組件可以是無源的或有源的,包括可操作以執行所期望的功能的代理。
所描述的實施例的若干方面將作為軟件模塊或者組件來闡述。如本文所使用的,軟件模塊或組件可以包括位于存儲器設備中的任意類型的計算機指令或計算機可執行代碼。軟件模塊例如可以包括一個或多個計算機指令物理塊或邏輯塊,其可被安排為執行一個或多個任務或實現特定數據類型的例程、程序、對象、組件、數據結構等。應理解的是,代替軟件或者除了軟件,軟件模塊可被實現于硬件和/或固件中。本文所描述的一個或多個功能模塊可被分離為子模塊和/或被組合為單個或少量模塊。
在某些實施例中,特定軟件模塊可以包括存儲于存儲器設備的不同位置、不同存儲器設備或不同計算機中的分離的指令,這些指令一起實現所描述的模塊功能。實際上,模塊可以包括單個指令或多個指令,并且可以分布于若干個不同的代碼片段、不同的程序以及若干個存儲器設備間。一些實施例可以被實施于分布式計算環境中,其中,由通過通信網絡鏈接的遠程處理設備來執行任務。在分布式計算環境中,軟件模塊可位于本地和/或遠程存儲器存儲設備中。此外,在數據庫記錄中一起捆綁或呈現的數據可以駐留在同一存儲器設備中或者若干個存儲器設備中,并且可在網絡的數據庫中的記錄字段中被鏈接在一起。
盡管出于清楚的目的詳細地描述了前述內容,但顯而易見的是,在不背離其原理的情形下可以做出某些更改和修改。應當注意的是,存在許多實現本文所描述的處理和裝置的替代方式。因此,本文的實施例是說明性而非限制性的,并且本發明不限于本文給出的細節,而是可以在所附權利要求的范圍和等同內進行修改,并且,落入權利要求的含義和等同物的范圍內的全部改變從而都被包括在本發明的范圍之中。