本發(fā)明涉及服務器軟件領域,更具體地說,涉及一種基于paxos算法的分布式服務器系統(tǒng)的一致性更新方法及系統(tǒng)。
背景技術:
分布式服務器系統(tǒng)是一種計算機硬件的配置方式和相應的功能配置方式。它是一種多控制器的計算機系統(tǒng),各控制器通過互連網(wǎng)絡構成統(tǒng)一的系統(tǒng)。系統(tǒng)采用分布式計算結構,即把原來系統(tǒng)內(nèi)中央處理器處理的任務分散給相應的控制器,實現(xiàn)不同功能的各個控制器相互協(xié)調,共享系統(tǒng)的外設與軟件。從外界看,整個服務器系統(tǒng)是統(tǒng)一透明的。對每個節(jié)點控制器,需要保證它們的一致性狀態(tài)。各節(jié)點控制器初始狀態(tài)一致,工作過程中多個控制器之間需要進行通信,以保證一致性。分布式的節(jié)點通信模型主要有共享內(nèi)存式通信模式和消息傳遞式通信模型兩種。其中,共享內(nèi)存式模型,多個進程共享某一段物理內(nèi)存,通過少數(shù)服從多數(shù)來保持一致性。容錯性不夠強。消息傳遞式模型,容錯性較強,可應用于消息延遲、丟失,乃至網(wǎng)絡掛掉等非正常情況。分布式服務器系統(tǒng)加快了系統(tǒng)的處理速度,簡化了主機的邏輯結構,特別適合于工業(yè)生產(chǎn)線自動控制和企事業(yè)單位的管理,成本低,易于維護,成為計算機在應用領域發(fā)展的一個重要方向。
在單控制器數(shù)據(jù)庫中,用戶修改數(shù)據(jù)庫中的數(shù)據(jù),不用擔心其他用戶同時修改相同的數(shù)據(jù)。但是,在多控制器數(shù)據(jù)庫中,同時執(zhí)行的多個事務中的語句可以修改同一數(shù)據(jù)。同時執(zhí)行的事務需要產(chǎn)生有意義的和一致性的結果。因而,在多控制器數(shù)據(jù)庫中,如何維持數(shù)據(jù)的一致性是本領域技術人員需要解決的問題。
技術實現(xiàn)要素:
本發(fā)明的目的在于提供一種基于paxos算法的分布式服務器系統(tǒng)的一致性更新方法及系統(tǒng),以實現(xiàn)維持數(shù)據(jù)的一致性。
為實現(xiàn)上述目的,本發(fā)明實施例提供了如下技術方案:
一種基于paxos算法的分布式服務器系統(tǒng)的一致性更新方法,包括:
主節(jié)點向從節(jié)點發(fā)送主節(jié)點狀態(tài)信息;
從節(jié)點根據(jù)所述主節(jié)點狀態(tài)信息判斷所述主節(jié)點的狀態(tài)是否為最新狀態(tài);若否,則向所述主節(jié)點發(fā)送從節(jié)點自身的從節(jié)點狀態(tài)信息;若是,則將所述主節(jié)點狀態(tài)信息設置為從節(jié)點自身結點的狀態(tài)信息;其中,所述主節(jié)點狀態(tài)信息和從節(jié)點狀態(tài)信息均為攜帶時間標號的狀態(tài)信息;
所述主節(jié)點從所有從節(jié)點狀態(tài)信息中確定最新狀態(tài)信息,并將所述最新狀態(tài)信息設定為所述主節(jié)點的當前狀態(tài)信息,并向從節(jié)點發(fā)送所述當前狀態(tài)信息;
從節(jié)點根據(jù)所述當前狀態(tài)信息更新自身節(jié)點的狀態(tài)信息。
其中,所述從節(jié)點根據(jù)所述主節(jié)點狀態(tài)信息判斷所述主節(jié)點的狀態(tài)是否為最新狀態(tài),包括:
從節(jié)點根據(jù)主節(jié)點狀態(tài)信息中的時間標號與自身存儲的狀態(tài)信息的時間標號進行比較;
若主節(jié)點狀態(tài)信息中的時間標號為最新的,則判定所述主節(jié)點的狀態(tài)為最新狀態(tài);若主節(jié)點狀態(tài)信息中的時間標號不是最新的,則判定所述主節(jié)點的狀態(tài)不是最新狀態(tài)。
其中,所述主節(jié)點從所有從節(jié)點狀態(tài)信息中確定最新狀態(tài)信息,包括:
所述主節(jié)點從所有的從節(jié)點狀態(tài)信息中獲取對應的時間標號;
將最新的時間標號所對應的從節(jié)點狀態(tài)信息作為最新狀態(tài)信息。
其中,主節(jié)點向從節(jié)點發(fā)送主節(jié)點狀態(tài)信息之后,還包括:
啟動定時器開始計時;
當計時器的計時時間達到預定時長后,檢測是否接收到從節(jié)點發(fā)送的從節(jié)點狀態(tài)信息;
若接收到,則執(zhí)行所述主節(jié)點從所有的從節(jié)點狀態(tài)信息中確定最新狀態(tài)信息的步驟;若沒有接收到,則判定所述主節(jié)點狀態(tài)信息為最新的狀態(tài)信息。
其中,所述向從節(jié)點發(fā)送所述當前狀態(tài)信息,包括:
所述主節(jié)點將所述最新狀態(tài)信息設定為所述主節(jié)點的當前狀態(tài)信息后,將所述主節(jié)點的當前狀態(tài)信息作為主節(jié)點狀態(tài)信息,并在下一個周期向從節(jié)點發(fā)送。
一種基于paxos算法的分布式服務器系統(tǒng)的一致性更新系統(tǒng),包括主節(jié)點和從節(jié)點;
所述主節(jié)點包括:
第一發(fā)送模塊,用于向從節(jié)點發(fā)送主節(jié)點狀態(tài)信息;
當前狀態(tài)信息確定模塊,用于從所有從節(jié)點狀態(tài)信息中確定最新狀態(tài)信息,并將所述最新狀態(tài)信息設定為所述主節(jié)點的當前狀態(tài)信息,并觸發(fā)所述發(fā)送模塊向從節(jié)點發(fā)送所述當前狀態(tài)信息;
所述從節(jié)點包括:
判斷模塊,用于根據(jù)所述主節(jié)點狀態(tài)信息判斷所述主節(jié)點的狀態(tài)是否為最新狀態(tài);若否,則觸發(fā)第二發(fā)送模塊;若是,則觸發(fā)設置模塊;
所述第二發(fā)送模塊,用于向所述主節(jié)點發(fā)送從節(jié)點自身的從節(jié)點狀態(tài)信息;
所述設置模塊,用于將所述主節(jié)點狀態(tài)信息設置為從節(jié)點自身結點的狀態(tài)信息,并根據(jù)所述當前狀態(tài)信息更新自身節(jié)點的狀態(tài)信息;其中,所述主節(jié)點狀態(tài)信息和從節(jié)點狀態(tài)信息均為攜帶時間標號的狀態(tài)信息。
其中,所述判斷模塊根據(jù)主節(jié)點狀態(tài)信息中的時間標號與從節(jié)點自身存儲的狀態(tài)信息的時間標號進行比較;若主節(jié)點狀態(tài)信息中的時間標號為最新的,則判定所述主節(jié)點的狀態(tài)為最新狀態(tài);若主節(jié)點狀態(tài)信息中的時間標號不是最新的,則判定所述主節(jié)點的狀態(tài)不是最新狀態(tài)。
其中,所述當前狀態(tài)信息確定模塊從所有從節(jié)點狀態(tài)信息中獲取對應的時間標號,并將最新的時間標號所對應的從節(jié)點狀態(tài)信息作為最新狀態(tài)信息。
其中,所述主節(jié)點還包括:
計時模塊,用于啟動定時器開始計時;
檢測模塊,用于當計時器的計時時間達到預定時長后,檢測是否接收到從節(jié)點發(fā)送的從節(jié)點狀態(tài)信息;若接收到,則執(zhí)行所述主節(jié)點從所有的從節(jié)點狀態(tài)信息中確定最新狀態(tài)信息的步驟;若沒有接收到,則判定所述主節(jié)點狀態(tài)信息為最新的狀態(tài)信息。
其中,所述當前狀態(tài)信息確定模塊將所述最新狀態(tài)信息設定為所述主節(jié)點的當前狀態(tài)信息之后,將所述主節(jié)點的當前狀態(tài)信息作為主節(jié)點狀態(tài)信息,并通過所述發(fā)送模塊在下一個周期向從節(jié)點發(fā)送。
通過以上方案可知,本發(fā)明實施例提供的一種基于paxos算法的分布式服務器系統(tǒng)的一致性更新方法及系統(tǒng),包括:主節(jié)點向從節(jié)點發(fā)送主節(jié)點狀態(tài)信息;從節(jié)點根據(jù)所述主節(jié)點狀態(tài)信息判斷所述主節(jié)點的狀態(tài)是否為最新狀態(tài);若否,則向所述主節(jié)點發(fā)送從節(jié)點自身的從節(jié)點狀態(tài)信息;若是,則將所述主節(jié)點狀態(tài)信息設置為從節(jié)點自身結點的狀態(tài)信息;其中,所述主節(jié)點狀態(tài)信息和從節(jié)點狀態(tài)信息均為攜帶時間標號的狀態(tài)信息;所述主節(jié)點從所有從節(jié)點狀態(tài)信息中確定最新狀態(tài)信息,并將所述最新狀態(tài)信息設定為所述主節(jié)點的當前狀態(tài)信息,并向從節(jié)點發(fā)送所述當前狀態(tài)信息;從節(jié)點根據(jù)所述當前狀態(tài)信息更新自身節(jié)點的狀態(tài)信息。可見,通過本實施例提供的一致性更新方案,能隨時更新系統(tǒng)中不同節(jié)點的狀態(tài),保證系統(tǒng)的一致性。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實施例公開的一種基于paxos算法的分布式服務器系統(tǒng)的一致性更新方法流程示意圖;
圖2為本發(fā)明實施例公開的boss廣播自身狀態(tài)信息示意圖;
圖3為本發(fā)明實施例公開的common回復信息示意圖;
圖4為本發(fā)明實施例公開的boss更新系統(tǒng)狀態(tài)示意圖;
圖5為本發(fā)明實施例公開的一種基于paxos算法的分布式服務器系統(tǒng)的一致性更新系統(tǒng)結構框圖。
具體實施方式
下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
本發(fā)明實施例公開了一種基于paxos算法的分布式服務器系統(tǒng)的一致性更新方法及系統(tǒng),以實現(xiàn)維持數(shù)據(jù)的一致性。
參見圖1,本發(fā)明實施例提供的一種基于paxos算法的分布式服務器系統(tǒng)的一致性更新方法,包括:
S101、主節(jié)點向從節(jié)點發(fā)送主節(jié)點狀態(tài)信息;
其中,主節(jié)點向從節(jié)點發(fā)送主節(jié)點狀態(tài)信息之后,還包括:
啟動定時器開始計時;
當計時器的計時時間達到預定時長后,檢測是否接收到從節(jié)點發(fā)送的從節(jié)點狀態(tài)信息;
若接收到,則執(zhí)行所述主節(jié)點從所有的從節(jié)點狀態(tài)信息中確定最新狀態(tài)信息的步驟;若沒有接收到,則判定所述主節(jié)點狀態(tài)信息為最新的狀態(tài)信息。
具體的,本實施例為一種改進paxos算法的分布式系統(tǒng)一致性設計,在分布式服務器系統(tǒng)中,多個控制器node分為兩種角色:主節(jié)點boss和從節(jié)點common。任何時候,主節(jié)點boss只有一個,剩余控制器為從節(jié)點common。在初始狀態(tài)下,分布式系統(tǒng)中各個控制器node均為初始狀態(tài)。系統(tǒng)中每個控制器node均可接收外界消息,與外界交互。每個控制器node根據(jù)接收的消息,作出反應改變狀態(tài),并隨時更新各自的狀態(tài)信息meg。該狀態(tài)信息meg中含有以接收消息時間為標記的時間標號。這樣,經(jīng)過一段時間,系統(tǒng)中的控制器node狀態(tài)便會發(fā)生分化。因此,在本方案中,為保證整個分布式系統(tǒng)狀態(tài)始終保持一致性,并隨時更新,由boss來統(tǒng)一更新系統(tǒng)狀態(tài)。
具體的,在本實施例中分布式系統(tǒng)中唯一的boss定時向多個common廣播發(fā)送自己的狀態(tài)信息meg_boss,該信息中含有時間標號。參見圖2,為一個lease內(nèi),boss控制器將自身的狀態(tài)信息meg_boss廣播發(fā)送給系統(tǒng)中的common控制器,該狀態(tài)信息meg_boss中帶有時間標號。
S102、從節(jié)點根據(jù)所述主節(jié)點狀態(tài)信息判斷所述主節(jié)點的狀態(tài)是否為最新狀態(tài);若否,則向所述主節(jié)點發(fā)送從節(jié)點自身的從節(jié)點狀態(tài)信息;若是,則將所述主節(jié)點狀態(tài)信息設置為從節(jié)點自身結點的狀態(tài)信息;其中,所述主節(jié)點狀態(tài)信息和從節(jié)點狀態(tài)信息均為攜帶時間標號的狀態(tài)信息;
其中,所述從節(jié)點根據(jù)所述主節(jié)點狀態(tài)信息判斷所述主節(jié)點的狀態(tài)是否為最新狀態(tài),包括:
從節(jié)點根據(jù)主節(jié)點狀態(tài)信息中的時間標號與自身存儲的狀態(tài)信息的時間標號進行比較;
若主節(jié)點狀態(tài)信息中的時間標號為最新的,則判定所述主節(jié)點的狀態(tài)為最新狀態(tài);若主節(jié)點狀態(tài)信息中的時間標號不是最新的,則判定所述主節(jié)點的狀態(tài)不是最新狀態(tài)。
具體的,對單個common來說,它會將收到的狀態(tài)信息meg_boss的時間標號與自身存儲的狀態(tài)信息meg時間標號進行比較。若common收到的狀態(tài)消息meg_boss相對自身存儲的狀態(tài)消息meg不是最新的,則將自身存儲的meg發(fā)送給boss;若meg_boss相對common的meg是最新的,則common用meg_boss來替代更新自身存儲的meg,不向boss返回信息。
具體如圖3所示,common控制器對接收到的meg_boss作出相應反應。其中,common node1收到的狀態(tài)消息meg_boss相對自身存儲的狀態(tài)消息meg是最新的,則用meg_boss來替代更新自身存儲的meg_1,不向boss返回信息。common node2收到的meg_boss相對自身meg_2不是最新的,則將meg_2發(fā)送給boss。common node3收到的meg_boss相對自身meg_3也不是最新的,也將meg_3發(fā)送給boss。
S103、所述主節(jié)點從所有從節(jié)點狀態(tài)信息中確定最新狀態(tài)信息,并將所述最新狀態(tài)信息設定為所述主節(jié)點的當前狀態(tài)信息,并向從節(jié)點發(fā)送所述當前狀態(tài)信息;
其中,所述主節(jié)點從所有從節(jié)點狀態(tài)信息中確定最新狀態(tài)信息,包括:
所述主節(jié)點從所有的從節(jié)點狀態(tài)信息中獲取對應的時間標號;
將最新的時間標號所對應的從節(jié)點狀態(tài)信息作為最新狀態(tài)信息。
具體的,參見圖4,boss控制器會將收到的meg_2與meg_3進行比較,由于meg_3較為新,boss控制器選定meg_3來更新自身的狀態(tài)信息。如圖4所示,下一個lease,boss控制器將最新的狀態(tài)信息meg_3廣播發(fā)送給系統(tǒng)中的common控制器;各個common控制器根據(jù)meg_3再次進行狀態(tài)更新。
S104、從節(jié)點根據(jù)所述當前狀態(tài)信息更新自身節(jié)點的狀態(tài)信息。
其中,所述向從節(jié)點發(fā)送所述當前狀態(tài)信息,包括:
所述主節(jié)點將所述最新狀態(tài)信息設定為所述主節(jié)點的當前狀態(tài)信息后,將所述主節(jié)點的當前狀態(tài)信息作為主節(jié)點狀態(tài)信息,并在下一個周期向從節(jié)點發(fā)送。
具體的,若boss在規(guī)定時間lease內(nèi)接收到common的回復消息,則多個common回復的meg中,時間最新的內(nèi)容即被定為boss的狀態(tài)信息meg_boss。若lease到期,boss未收到任一common的回復消息,則說明此時系統(tǒng)中的控制器均更新為最新狀態(tài)meg_boss。下一個lease周期內(nèi),boss再次將自己的狀態(tài)信息meg_boss廣播給系統(tǒng)中的common。通過這樣的方式,保證整個系統(tǒng)隨時更新,并具有一致性。
具體的,在本方案中,主節(jié)點向從節(jié)點發(fā)送主節(jié)點狀態(tài)信息之后,啟動定時器開始計時,這里定時器的定時時間可以為上述的規(guī)定時間lease。則在本方案中再次向從節(jié)點發(fā)送主節(jié)點的當前狀態(tài)信息的時間,即下一個周期為主節(jié)點再次向從節(jié)點發(fā)送狀態(tài)信息的時刻。
下面對本發(fā)明實施例提供的一致性更新系統(tǒng)進行介紹,下文描述的一致性更新系統(tǒng)與上文描述的一致性更新方法可以相互參照。
參見圖5,本發(fā)明實施例提供的一種基于paxos算法的分布式服務器系統(tǒng)的一致性更新系統(tǒng),包括主節(jié)點100和從節(jié)點200;
所述主節(jié)點包括100:
第一發(fā)送模塊101,用于向從節(jié)點發(fā)送主節(jié)點狀態(tài)信息;
當前狀態(tài)信息確定模塊102,用于從所有從節(jié)點狀態(tài)信息中確定最新狀態(tài)信息,并將所述最新狀態(tài)信息設定為所述主節(jié)點的當前狀態(tài)信息,并觸發(fā)所述發(fā)送模塊向從節(jié)點發(fā)送所述當前狀態(tài)信息;
所述從節(jié)點200包括:
判斷模塊201,用于根據(jù)所述主節(jié)點狀態(tài)信息判斷所述主節(jié)點的狀態(tài)是否為最新狀態(tài);若否,則觸發(fā)第二發(fā)送模塊;若是,則觸發(fā)設置模塊;
所述第二發(fā)送模塊202,用于向所述主節(jié)點發(fā)送從節(jié)點自身的從節(jié)點狀態(tài)信息;
所述設置模塊203,用于將所述主節(jié)點狀態(tài)信息設置為從節(jié)點自身結點的狀態(tài)信息,并根據(jù)所述當前狀態(tài)信息更新自身節(jié)點的狀態(tài)信息;其中,所述主節(jié)點狀態(tài)信息和從節(jié)點狀態(tài)信息均為攜帶時間標號的狀態(tài)信息。
基于上述技術方案,所述判斷模塊根據(jù)主節(jié)點狀態(tài)信息中的時間標號與從節(jié)點自身存儲的狀態(tài)信息的時間標號進行比較;若主節(jié)點狀態(tài)信息中的時間標號為最新的,則判定所述主節(jié)點的狀態(tài)為最新狀態(tài);若主節(jié)點狀態(tài)信息中的時間標號不是最新的,則判定所述主節(jié)點的狀態(tài)不是最新狀態(tài)。
基于上述技術方案,所述當前狀態(tài)信息確定模塊從所有從節(jié)點狀態(tài)信息中獲取對應的時間標號,并將最新的時間標號所對應的從節(jié)點狀態(tài)信息作為最新狀態(tài)信息。
基于上述技術方案,所述主節(jié)點還包括:
計時模塊,用于啟動定時器開始計時;
檢測模塊,用于當計時器的計時時間達到預定時長后,檢測是否接收到從節(jié)點發(fā)送的從節(jié)點狀態(tài)信息;若接收到,則執(zhí)行所述主節(jié)點從所有的從節(jié)點狀態(tài)信息中確定最新狀態(tài)信息的步驟;若沒有接收到,則判定所述主節(jié)點狀態(tài)信息為最新的狀態(tài)信息。
基于上述技術方案,所述當前狀態(tài)信息確定模塊將所述最新狀態(tài)信息設定為所述主節(jié)點的當前狀態(tài)信息之后,將所述主節(jié)點的當前狀態(tài)信息作為主節(jié)點狀態(tài)信息,并通過所述發(fā)送模塊在下一個周期向從節(jié)點發(fā)送。
本發(fā)明實施例提供的一種基于paxos算法的分布式服務器系統(tǒng)的一致性更新方法及系統(tǒng),包括:主節(jié)點向從節(jié)點發(fā)送主節(jié)點狀態(tài)信息;從節(jié)點根據(jù)所述主節(jié)點狀態(tài)信息判斷所述主節(jié)點的狀態(tài)是否為最新狀態(tài);若否,則向所述主節(jié)點發(fā)送從節(jié)點自身的從節(jié)點狀態(tài)信息;若是,則將所述主節(jié)點狀態(tài)信息設置為從節(jié)點自身結點的狀態(tài)信息;其中,所述主節(jié)點狀態(tài)信息和從節(jié)點狀態(tài)信息均為攜帶時間標號的狀態(tài)信息;所述主節(jié)點從所有從節(jié)點狀態(tài)信息中確定最新狀態(tài)信息,并將所述最新狀態(tài)信息設定為所述主節(jié)點的當前狀態(tài)信息,并向從節(jié)點發(fā)送所述當前狀態(tài)信息;從節(jié)點根據(jù)所述當前狀態(tài)信息更新自身節(jié)點的狀態(tài)信息??梢?,通過本實施例提供的一致性更新方案,能隨時更新系統(tǒng)中不同節(jié)點的狀態(tài),保證系統(tǒng)的一致性。
本說明書中各個實施例采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似部分互相參見即可。
對所公開的實施例的上述說明,使本領域專業(yè)技術人員能夠實現(xiàn)或使用本發(fā)明。對這些實施例的多種修改對本領域的專業(yè)技術人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實施例中實現(xiàn)。因此,本發(fā)明將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一致的最寬的范圍。