本申請涉及計算機技術領域,尤其涉及一種序列值生成方法、裝置及系統(tǒng)。
背景技術:
分布式系統(tǒng)(distributed system)是建立在網(wǎng)絡之上的軟件系統(tǒng),該系統(tǒng)由一組(少至幾臺,多則成千上萬臺)獨立的計算機(設備)以統(tǒng)一的整體提供服務。利用分布式系統(tǒng),服務能力得到靈活擴展和有效提高。序列,是被排成一列的對象(或事件),這樣每個對象不是在其他對象之前,就是在對象之后;單調遞增序列就是序列中每個對象都大于等于之前的對象;若每個對象都嚴格大于之前的對象,這個序列就是嚴格(單調)遞增的,具體地,可以通過序列值的大小進行表示序列。
當前,很多業(yè)務場景都需要嚴格遞增序列,比如數(shù)據(jù)同步業(yè)務,需要用一個序列值來標識一條數(shù)據(jù),由于數(shù)據(jù)更新,所以更新后的數(shù)據(jù)對應的序列值一定要嚴格大于更新前的數(shù)據(jù)對應的序列值。分布式系統(tǒng)中包含多臺獨立設備,每臺設備都可能出現(xiàn)不可用的情況(宕機、重啟、被替換等,統(tǒng)稱宕機),所以分布式系統(tǒng)下需要考慮對局部宕機進行容錯,以保證序列值嚴格遞增。
現(xiàn)有技術中,是通過設備標識號保證生成的序列值嚴格遞增。具體地,以設備標識號的大小作為嚴格遞增序列的依據(jù),當一臺設備宕機后,通過比該設備標識號大的設備繼續(xù)執(zhí)行該設備的任務,由于設備標識號大,那么就可以實現(xiàn)嚴格遞增。但是如果標識號最大的設備宕機,由于無法找到更大標識號的設備,所有就要由其他標識號較小的設備執(zhí)行該設備的任務,就會導致由于標識號小,破壞原有序列值的有序性。所以現(xiàn)有技術無法保證在分布式系統(tǒng)下,生成的序列值嚴格遞增。
技術實現(xiàn)要素:
本申請實施例提供一種序列值生成方法,用于在設備正常運行狀態(tài)下,保證生成的序列值嚴格遞增,并且當設備出現(xiàn)宕機時,也能保證生成的序列值嚴格遞增。
本申請實施例提供一種序列值生成裝置,用于在設備正常運行狀態(tài)下,保證生成的序列值嚴格遞增,并且當設備出現(xiàn)宕機時,也能保證生成的序列值嚴格遞增。
本申請實施例提供一種序列值生成系統(tǒng),用于在設備正常運行狀態(tài)下,保證生成的序列值嚴格遞增,并且當設備出現(xiàn)宕機時,也能保證生成的序列值嚴格遞增。
本申請實施例采用下述技術方案:
一種序列值生成方法,包括:
當?shù)谝辉O備正常運行時,根據(jù)時間戳生成序列值,并將生成的序列值發(fā)送到備份記錄中;
當?shù)谝辉O備宕機,第二設備從所述備份記錄中查找對應所述第一設備發(fā)送的最大序列值;
根據(jù)所述最大序列值,確定第二設備序列下限值;
在所述第二設備首次生成序列值,且當前時間戳大于所述第二設備序列下限值中包含的時間戳時,根據(jù)當前時間戳生成序列值。
優(yōu)選地,根據(jù)時間戳生成序列值,包括:
根據(jù)時間戳以及自增序列生成序列值;則
根據(jù)當前時間戳生成序列值,包括:
根據(jù)當前時間戳以及自增序列生成序列值。
優(yōu)選地,根據(jù)所述最大序列值,確定第二設備序列下限值,包括:
根據(jù)大于所述最大序列值中時間戳至少一個時間周期的時間戳,確定第二設備序列下限值。
優(yōu)選地,所述方法還包括:
將首次生成的序列值發(fā)送到備份記錄中。
優(yōu)選地,當?shù)谝辉O備在正常運行狀態(tài)下,根據(jù)時間戳生成序列值,包括:
當?shù)谝辉O備正常運行時,根據(jù)時間戳生成候選序列值;
當所述候選序列值不大于第一設備序列上限值,將所述候選序列值確定為序列值。
優(yōu)選地,將生成的序列值發(fā)送到備份記錄中,包括:
按照預設時間周期,將生成的序列值發(fā)送到備份記錄中,并更新第一設備序列上限值。
優(yōu)選地,更新第一設備序列上限值,包括:
根據(jù)大于所述序列值中時間戳至少一個時間周期的時間戳,更新第一設備序列上限值。
優(yōu)選地,根據(jù)時間戳生成序列值,包括:
根據(jù)時間戳生成候選序列值;
當所述候選序列值大于第一設備序列下限值,將所述候選序列值確定為序列值,所述第一設備序列下限值為所述第一設備首次接收序列請求時確定的序列值。
一種序列值生成裝置,包括:第一設備中的第一生成單元以及第一備份單元,第二設備中的第二查找單元、第二確定單元以及第二生成單元,其中,
所述第一生成單元,當?shù)谝辉O備正常運行時,根據(jù)時間戳生成序列值;
所述第一備份單元,將生成的序列值發(fā)送到備份記錄中;
所述第二查找單元,當?shù)谝辉O備宕機,第二設備從所述備份記錄中查找對應所述第一設備發(fā)送的最大序列值;
所述第二確定單元,根據(jù)所述最大序列值,確定第二設備序列下限值;
所述第二生成單元,在所述第二設備在首次生成序列值時,并確定出當前時間戳大于所述第二設備序列下限值中包含的時間戳時,根據(jù)當前時間戳生成序列值。
優(yōu)選地,所述第一生成單元,
根據(jù)時間戳以及自增序列生成序列值;則
所述第二生成單元,
根據(jù)當前時間戳以及自增序列生成序列值。
優(yōu)選地,所述第二確定單元,
根據(jù)大于所述最大序列值中時間戳至少一個時間周期的時間戳,確定第二設備序列下限值。
優(yōu)選地,所述裝置還包括:第二備份單元,
將首次生成的序列值發(fā)送到備份記錄中。
優(yōu)選地,所述第一生成單元,
當?shù)谝辉O備正常運行時,根據(jù)時間戳生成候選序列值;
當所述候選序列值不大于第一設備序列上限值,將所述候選序列值確定為序列值。
優(yōu)選地,所述第一備份單元,
按照預設時間周期,將生成的序列值發(fā)送到備份記錄中;
所述裝置還包括第一更新單元,
更新第一設備序列上限值。
優(yōu)選地,所述第一更新單元,
根據(jù)大于所述序列值中時間戳至少一個時間周期的時間戳,更新第一設備序列上限值。
優(yōu)選地,所述第一生成單元,
根據(jù)時間戳生成候選序列值;
當所述候選序列值大于第一設備序列下限值,將所述候選序列值確定為序列值,所述第一設備序列下限值為所述第一設備首次接收序列請求時確定的序列值。
一種序列值生成系統(tǒng),包括:第一設備、第二設備以及備份記錄,其中,
所述第一設備,
在正常運行時,根據(jù)時間戳生成序列值,并將生成的序列值發(fā)送到備份記錄中;
所述第二設備,
當?shù)谝辉O備宕機,從所述備份記錄中查找對應所述第一設備發(fā)送的最大序列值;
根據(jù)所述最大序列值,確定第二設備序列下限值;
在所述第二設備首次生成序列值,且當前時間戳大于所述第二設備序列下限值中包含的時間戳時,根據(jù)當前時間戳生成序列值;
將首次生成的序列值發(fā)送到備份記錄中;
所述備份記錄,
接收第一設備發(fā)送的序列值;響應第二設備的查詢請求。
優(yōu)選地,第一設備,可以根據(jù)時間戳以及自增序列生成序列值;
則第二設備,可以根據(jù)當前時間戳以及自增序列生成序列值。
優(yōu)選地,第二設備,可以
根據(jù)大于最大序列值中時間戳至少一個時間周期的時間戳,確定第二設備序列下限值。
優(yōu)選地,第一設備,可以
當正常運行時,根據(jù)時間戳生成候選序列值;
當候選序列值不大于第一設備序列上限值,且當候選序列值大于第一設備序列下限值,將候選序列值確定為序列值,第一設備序列下限值為第一設備首次接收序列請求時確定的序列值。
優(yōu)選地,第一設備,可以
按照預設時間周期,將生成的序列值發(fā)送到備份記錄中,并更新第一設備序列上限值。
優(yōu)選地,第一設備,可以
根據(jù)大于序列值中時間戳至少一個時間周期的時間戳,更新第一設備序列上限值。
本申請實施例采用的上述至少一個技術方案能夠達到以下有益效果:在分布式系統(tǒng)中,當?shù)谝辉O備正常運行時,根據(jù)時間戳生成序列值,并進行備份。當?shù)谝辉O備出現(xiàn)宕機,其他設備從備份記錄中找到第一設備最后一次備份的最大序列值,將該最大序列值設置為第二設備的下限值,并在首次生成序列值時,以該設備的下限值為準,生成大于該下限值的序列值,并完成接替。通過在正常運行時備份序列值,在其他設備接替時,保證了序列嚴格遞增。此外,還可以通過在正常運行的設備中設定上限值,保證生成的序列值嚴格遞增的同時,提高生成序列值的正確性,并且當設備出現(xiàn)宕機時,也能保證生成的序列值嚴格遞增的同時,降低業(yè)務遷移時出現(xiàn)序列沖突的可能性。
附圖說明
此處所說明的附圖用來提供對本申請的進一步理解,構成本申請的一部分,本申請的示意性實施例及其說明用于解釋本申請,并不構成對本申請的不當限定。在附圖中:
圖1為現(xiàn)有技術序列值生成的示意圖;
圖2為本申請實施例1提供的序列值生成方法的流程示意圖;
圖3為本申請實施例1提供的序列值生成方法的示意圖;
圖4為本申請實施例1提供的根據(jù)時間戳生成序列值的示意圖;
圖5為本申請實施例1提供的根據(jù)時間戳以及自增序列生成序列值的示意圖;
圖6為本申請實施例2提供的序列值生成方法的流程示意圖;
圖7為本申請實施例2提供的序列值生成方法的示意圖;
圖8為本申請實施例3提供的序列值生成裝置的結構圖;
圖9為本申請實施例4提供的序列值生成系統(tǒng)的結構圖。
具體實施方式
為使本申請的目的、技術方案和優(yōu)點更加清楚,下面將結合本申請具體實施例及相應的附圖對本申請技術方案進行清楚、完整地描述。顯然,所描述的實施例僅是本申請一部分實施例,而不是全部的實施例?;诒旧暾堉械膶嵤├?,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本申請保護的范圍。
以下結合附圖,詳細說明本申請各實施例提供的技術方案。
實施例1
如前所述,很多業(yè)務場景都需要嚴格遞增序列,比如收藏夾同步業(yè)務,業(yè)務服務器需要為每一條收藏夾數(shù)據(jù)生成序列值,并且要保證為在后時間的收藏夾數(shù)據(jù)生成的序列值一定要比在先時間的收藏夾數(shù)據(jù)生成的序列值要大,只有這樣才能保證收藏夾同步時數(shù)據(jù)的完整性。若在后時間的收藏夾數(shù)據(jù)比在先時間的收藏夾數(shù)據(jù)對應的序列值小,則會出現(xiàn)數(shù)據(jù)丟失。由于分布式系統(tǒng)中的設備可能出現(xiàn)不可用情況(宕機、重啟、被替換等),所以如何保證生成的序列值嚴格遞增就非常重要。現(xiàn)有技術中,通過時間戳和設備標識號保證生成的序列值嚴格遞增,具體地,時間戳可以保證序列值唯一性,而設備標識號可以保證序列值有序性,如圖1所示為分布式系統(tǒng),包含m個單獨的設備,每個設備都有標識號(設備1的標識號為“1”),當接收到序列值生成請求后,根據(jù)設備標識號和時間戳生成序列值,比如“1 0001”中第一位“1”代表設備標識號,后四位“0001”代表時間戳,當設備1出現(xiàn)宕機(比如生成到“1 1256”),那么就可以找到設備標識號大于“1”的設備,比如設備m-1,繼續(xù)提供設備1提供的服務,由于序列值中包含設備標識,所以就可以暫時保證序列值的有序性,類似地,當設備m-1出現(xiàn)宕機,則可以通過設備m繼續(xù)提供服務。但是當設備m(“m”為該分布式系統(tǒng)系統(tǒng)中最大設備標識號)出現(xiàn)宕機時,該分布式系統(tǒng)系統(tǒng)中不存在設備的標識號大于“m”,此時就只能找到設備標識號小于“m-1”的設備,比如設備2,但是設備2生成的序列值第一位一定是“2”,由于設備m宕機之前生成的序列值第一位是“m”,所以第一位是“2”的序列值就破壞了原有的有序性。所以在分布式系統(tǒng)下,現(xiàn)有技術無法保證生成的序列值嚴格遞增。基于此缺陷,本申請?zhí)峁┝艘环N序列值生成方法,用于在設備正常運行狀態(tài)下,保證生成的序列值嚴格遞增,并且當設備出現(xiàn)宕機時,也能保證生成的序列值嚴格遞增。由于設備出現(xiàn)宕機就需要有其他設備接替,以便完成業(yè)務遷移,所以本方法可以假設執(zhí)行主體為第一設備和第二設備,該方法流程示意圖以及示意圖分別如圖2和圖3所示,包括下述步驟:
步驟11:當?shù)谝辉O備在正常運行狀態(tài)下,根據(jù)時間戳生成序列值,并將生成的序列值發(fā)送到備份記錄中。
在一些業(yè)務場景下,每次業(yè)務數(shù)據(jù)發(fā)生變化,都需要對應一個序列值,比如收藏夾同步業(yè)務,當用戶在PC(personal computer,個人電腦)端添加網(wǎng)站到收藏夾后,瀏覽器需要將收藏夾數(shù)據(jù)進行備份,此時瀏覽器的服務器就需要一個序列值,用于對應保存收藏夾數(shù)據(jù),當用戶在智能手機中需要同步收藏夾數(shù)據(jù)時,瀏覽器的服務器會找到針對收藏夾同步業(yè)務的最大序列值,并找到對應保存的收藏夾數(shù)據(jù),以便完成同步。這里收藏夾同步業(yè)務可以是針對每個用戶,也可以針對多個用戶,甚至針對全部用戶。當業(yè)務需要序列值時,業(yè)務服務器可以向用于生成序列值的設備發(fā)送序列請求。在實際應用中,針對不同的業(yè)務,還可以有業(yè)務標識,并且在分布式系統(tǒng)中,由于存在很多臺設備(設備),所以可以布置一個調度中心,當業(yè)務服務器將帶有業(yè)務標識的序列請求發(fā)送到調度中心后,調度中心可以通過一致性哈希路由,根據(jù)業(yè)務標識找到對應的設備,比如收藏夾同步業(yè)務原定由第一設備生成序列值,那么通過一致性哈希就可以根據(jù)收藏夾同步業(yè)務的業(yè)務標識找到第一設備,并將序列請求發(fā)送給第一設備。在實際應用中,在生成序列值之前,還可進行前置判斷,比如判斷業(yè)務的合法性,判斷業(yè)務與設備是否有預先設置的請求響應關系等。
時間戳(timestamp),通常是一個字符序列,唯一地標識某一刻的時間,是指格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)起至現(xiàn)在的總秒數(shù)(或總毫秒數(shù)),所以只要時間不同,時間戳就不同,比如,可以根據(jù)如圖4所示的時間戳,生成序列值。
在本步驟中,根據(jù)時間戳生成序列值,是指設備在正常運行狀態(tài)下,也就是不同時間的情況下,在后時間生成的時間戳一定大于在前時間生成的時間戳。
在實際應用中,可能出現(xiàn)高并發(fā)的情況,比如同一時間戳內接收到多個序列請求,此時就可以引入自增序列,也就是本步驟也可以根據(jù)時間戳以及自增序列,為序列請求生成序列值,自增序列可以保證同一單位時間內的有序性,比如,在同一時間戳內,同時有60個請求,那么就可以將這60個請求通過“001”至“060”進行排序,每個自增序列的值就可以表示這一時間戳內的順序,在實施例中可以將時間戳作為保證序列值有序性的主要部分,而自增序列作為次要部分,比如如圖5所示,為根據(jù)時間戳和自增序列生成的序列值,其中,時間戳在前,自增序列在后。
現(xiàn)有技術在生成完序列值后,就可以將序列值發(fā)送給業(yè)務服務器了,但本步驟中,除了可以將序列值發(fā)送給業(yè)務服務器以響應序列請求外,還可以將生成的序列值發(fā)送到備份記錄中進行備份,比如將如圖5生成的序列值發(fā)送到備份記錄中,發(fā)送的內容還可以包含設備標識,比如設備1。具體地,由于序列值可以只由時間戳來生成,也可以由時間戳和自增序列共同生成,所以在將序列值進行備份時,可以只將時間戳進行備份,也可以將由時間戳和自增序列生成的序列值備份,在將時間戳和自增序列組成的序列值備份時,可以將實際的自增序列的值作為備份時的值,也可以將自增序列調整為最大值,作為備份時的值,比如根據(jù)圖4或5所示,將序列值中的時間戳“1431230123”進行備份,或根據(jù)圖5,直接將序列值“1431230123 000123”進行備份,又或將自增序列調整為最大值,將得到的“1431230123 99999”進行備份。
由于將生成的序列值進行了備份,所以當?shù)谝辉O備出現(xiàn)宕機時,其他設備可以根據(jù)備份記錄中的記載,接替第一設備的業(yè)務。具體地,
步驟12:當?shù)谝辉O備出現(xiàn)宕機,第二設備從備份記錄中查找對應第一設備發(fā)送的最大序列值。
當?shù)谝辉O備出現(xiàn)宕機后,可以由第二設備接替,但在接替業(yè)務之前,需要進行準備工作。具體地,前文已經(jīng)介紹,備份記錄中記載了第一設備的生成序列值的情況,所以,當有第二設備接替第一設備的業(yè)務時,可以先從備份記錄中查找到對應第一設備的最大序列值,比如找到最大序列值即為步驟13中備份的“1431230123”序列值。具體比如收藏夾同步業(yè)務原來是由第一設備生成序列值,由于第一設備出現(xiàn)宕機,現(xiàn)由第二設備接替。在實際應用中,還可以考慮業(yè)務標識的因素。
步驟13:根據(jù)該最大序列值,確定第二設備序列下限值。
由于備份記錄中的序列值,是第一設備生成過的序列值,所以在接替該第一設備的業(yè)務時,至少要從這個最大序列值之后開始,所以可以根據(jù)該最大序列值,確定第二設備序列下限值,也就是第二設備在接替第一設備后,首次生成的序列值需要大于第一設備最后一次備份的序列值,比如最大序列值為“1431230123”,那么該序列值就可以被確定為第二序列下限值,且第二序列下限值中包含的時間戳即為“1431230123”。類似地,當最大序列值為“1431230123 000123”或“1431230123 99999”,也可以確定出第二設備序列下限值為“1431230123”或“1431230123 000123”或“1431230123 99999”。
步驟14:當?shù)诙O備首次生成序列值,且當前時間戳大于第二設備序列下限值中包含的時間戳時,根據(jù)當前時間戳生成序列值。
當業(yè)務服務器再次將帶有業(yè)務標識的序列請求發(fā)送到調度中心后,調度中心可以通過一致性哈希路由,根據(jù)業(yè)務標識找到對應的設備,由于第一設備出現(xiàn)宕機,且由第二設備接替,可以通過一致性哈希路由,直接將該序列請求發(fā)送到第二設備中。比如收藏夾同步業(yè)務由第二設備代替第一設備執(zhí)行,那么通過一致性哈希就可以根據(jù)收藏夾同步業(yè)務的業(yè)務標識找到第二設備,并將序列請求發(fā)送給第二設備,此時就是第二設備首次生成序列值。
需要說明的是,這里提到的首次生成序列值,是指在接替第一設備后,針對原第一設備對指定業(yè)務而言的,比如原第一設備在正常運行狀態(tài)下,為收藏夾同步業(yè)務生成序列值,當?shù)谝辉O備宕機后,由第二設備接替該收藏夾同步業(yè)務,當收藏夾同步業(yè)務請求序列時,調度中心將該請求發(fā)送給第二設備,此時就是第二設備接收針對該收藏夾同步業(yè)務的首次序列請求,也就是首次生成針對該收藏夾同步業(yè)務序列值。
當?shù)诙O備首次生成序列值時,第二設備需要判斷當前時間戳是否大于第二序列下限值中包含的時間戳(也就是當前時間戳是否大于第一設備最后一次備份時的時間戳),只有在確定大于的情況下,第二設備才會根據(jù)當前時間戳生成序列值,并且可以保證嚴格遞增。一般情況,如果第一設備和第二設備時間設定均為準確,那么只要時間向后推移,第二設備首次生成序列值時,時間戳一定大于第二序列下限值中包含的時間戳。所以在第二設備接替第二設備之間,也可以由調度中心向第二設備發(fā)送時間校對指令,以便順利接替第一設備。比如,第二序列下限值中包含的時間戳即為“1431230123”,第二設備當前時間戳為“1431230125”,就可以根據(jù)“1431230125”生成序列值,保證嚴格遞增。
由于第二設備首次生成的序列值,保證了(為同一業(yè)務提供的)序列值嚴格遞增,所以也就可以認為第二設備完成了接替第二設備的業(yè)務,從第二次接收到序列請求起,可以看作第二設備是在正常運行狀態(tài)下進行的序列值生成操作。由于第一設備在正常運行狀態(tài)下,生成序列值后進行了備份,所以第二設備也可以將首次生成的序列值發(fā)送到備份記錄中。
采用實施例1提供的方法,在分布式系統(tǒng)中,當?shù)谝辉O備正常運行時,根據(jù)時間戳生成序列值,并進行備份。當?shù)谝辉O備出現(xiàn)宕機,其他設備從備份記錄中找到第一設備最后一次備份的最大序列值,將該最大序列值設置為第二設備的下限值,并在首次生成序列值時,以該設備的下限值為準,生成大于該下限值的序列值,并完成接替。通過在正常運行時備份序列值,在其他設備接替時,保證了序列嚴格遞增。
在后續(xù)的序列值生成過程中,當?shù)诙O備宕機后,類似地,可以由第三設備從備份記錄中查找對應第二設備的最大序列值,將該最大序列值確定為第三序列下限值,并當?shù)谌O備首次生成序列值時,確定第三設備的當前時間戳大于第三序列下限值中包含的時間戳,并根據(jù)第三設備的當前時間戳為請求生成序列值。以此類推,當?shù)趎-1設備宕機時,依舊可以有第n設備接替。只要分布式系統(tǒng)中,不同時全部宕機,就可以一致保證生成的序列值嚴格遞增。
實施例2
在背景技術中已經(jīng)介紹,宕機、重啟、被替換等,統(tǒng)稱宕機,所以也有可能出現(xiàn)設備正常但需要被替換,以及設備短暫的假死,這兩種情況都需要用其他設備接替該設備的業(yè)務。但是,在業(yè)務遷移時,也是需要時間的,如果僅憑借從備份記錄中獲取最大序列值,并確定為第二設備序列下限值,有可能造成后續(xù)的序列沖突,比如,第一設備最后一次備份的序列值,即第二序列下限值為“1431230123”,但是由于第一設備出現(xiàn)了假死,時間戳到了“1431230124”時,又生成了序列值,而第二設備在時間戳為“1431230124”時也生成了序列值,這就造成了序列沖突,可見,在業(yè)務遷移時需要一段時間作為緩沖。此外,在設備正常運行時,雖然每次均按照嚴格遞增生成序列,但也不排除有可能出現(xiàn)“時間戳跳躍”的情況,即時間戳為“1431230124”,但生成的序列值中的時間戳為“1431230130”,可見,在設備正常運行時,也需要序列值進行適當?shù)叵拗啤;诖巳毕荩不谂c實施例1相同的發(fā)明思路,本申請實施例又提出了一種序列值生成方法,用于設備正常運行狀態(tài)下,保證生成的序列值嚴格遞增的同時提高生成的序列值的正確性,并且當設備出現(xiàn)宕機時,也能保證生成的序列值嚴格遞增,同時降低業(yè)務遷移時出現(xiàn)序列沖突的可能性。與實施例1類似,所以本方法也可以假設執(zhí)行主體為第一設備和第二設備,該方法流程示意圖和示意圖如圖6和圖7所示,包括下述步驟:
步驟21:當?shù)谝辉O備正常運行時,根據(jù)時間戳生成候選序列值。
步驟22:當該候選序列值不大于第一設備序列上限值,將該候選序列值確定為序列值。
與實施例1中類似,當?shù)谝辉O備正常運行時,生成序列值,但步驟21是生成候選序列值,并在步驟22中,判斷候選序列值與第一設備序列上限值的大小關系,如果候選序列值不大于第一設備序列上限值,則認為滿足上限要求,也就可以將該候選序列值確定為序列值。
第一設備序列上限值可以有多種確定方法,由于其目的是為了對生成的序列值進行糾錯,所以該序列上限值是需要隨著時間推移而變化的。比如當時間戳的單位時間為1秒(或1毫秒、1微秒)時,上限值中的時間戳可以設定為大于當前時間戳幾個單位時間。比如當前時間戳為“1431230124”,那么就可以時間戳“1431230127”作為序列上限值中的時間戳,如果上限值就是由時間戳直接生成,那么序列上限值即為“1431230127”。
在實施例1中已經(jīng)介紹,在業(yè)務交替時,是通過下限值保證嚴格遞增,所以,每個設備在接替業(yè)務的首次生成序列值時,均會確定一個下限值,所以步驟22還可以包括:當該候選序列值大于第一設備序列下限值,將該候選序列值確定為序列值,其中,該第一設備序列下限值為該第一設備首次接收序列請求時確定的序列值。是實際應用中,也會有不是接替其他設備,而就是首次生成序列值的情況,此時可以通過調度中心,會程序員調試,確定最初的下限值。
步驟23:按照預設時間周期,將生成的序列值發(fā)送到備份記錄中,并更新第一設備序列上限值。
在實際應用中,尤其是高并發(fā)時,也無需將每次生成的序列值都進行備份,所以就可以按照預設時間周期進行備份,具體地,前文已經(jīng)介紹時間戳的單位時間可以是秒、毫秒或是微秒,那么時間周期也可以以秒、毫秒或是微秒為單位,比如時間戳“1431230124”是以毫為最小單位,時間周期為3秒,那么當時間戳為“1431230124”時,將生成的序列值發(fā)送到備份記錄中,當時間戳為“1431230127”時,再將生成的序列值發(fā)送到備份記錄中。
前文已經(jīng)介紹,序列上限值是需要隨著時間推移而變化的,所以,可以在每過一個時間周期(即每次備份序列值)時,更新第一設備序列上限值。具體地,更新時可以根據(jù)大于該序列值中時間戳至少一個時間周期的時間戳,更新第一設備序列上限值。比如每次更新第一設備序列上限值時,均根據(jù)大于該序列值中時間戳一個預設時間周期的時間戳。比如時間周期為3秒,那么每次更新第一設備序列上限值時,根據(jù)生成的序列值中時間戳加上3秒的時間戳進行更新。比如,以時間戳為序列值,當序列值為“1431230124”時,進行備份,并更新第一設備序列上限值為“1431230127”,當序列值為“1431230127”時,進行備份并更新第一設備序列上限值為“1431230130”,也就是第一設備序列上限值的更新“步調”與序列值備份的“步調”一致。
在實際應用中,也可以設定第一設備序列上限值的更新“步調”與序列值備份的“步調”不一致,比如當序列值為“1431230124”時,進行備份,并更新第一設備序列上限值為“1431230128”,當序列值為“1431230127”時,進行備份,并更新第一設備序列上限值為“1431230131”等。
可以將更新序列值看做一個循環(huán),每個時間周期內生成序列值,均以上一時間周期確定的上限值作為限制條件。
所以在實施例1中介紹,當?shù)诙O備首次生成序列值時,可以將首次生成的序列值發(fā)送到備份記錄中。這樣從第二次生成序列值起,就有了上限值。
步驟24:當?shù)谝辉O備宕機,第二設備從該備份記錄中查找對應該第一設備發(fā)送的最大序列值。
該步驟與實施例1中步驟12類似,不再贅述。
步驟25:根據(jù)大于該最大序列值中時間戳至少一個時間周期的時間戳,確定第二設備序列下限值。
在前文提到,如果僅憑借從備份記錄中獲取最大序列值,并確定為第二設備序列下限值,有可能造成后續(xù)的序列沖突,所以在本步驟中,可以靈活地考慮序列沖突的可能性,調節(jié)時間周期的個數(shù),比如第一設備正常運行但需要被第二設備替換時,可以考慮根據(jù)大于該最大序列值中時間戳較多個數(shù)的時間周期的時間戳,確定第二設備序列下限值;又如確定第一設備出現(xiàn)損壞,可以考慮根據(jù)大于該最大序列值中時間戳較少個數(shù)的時間周期的時間戳,確定第二設備序列下限值,等。
步驟26:當?shù)诙O備首次生成序列值,且當前時間戳大于第二設備序列下限值中包含的時間戳時,根據(jù)當前時間戳生成序列值。
與實施例1中步驟14相似,不再贅述。由于第二設備接替了第一設備,并且步驟25已經(jīng)考慮了接替時出現(xiàn)序列沖突的可能性,并且在接替后,第一設備再如何生成序列值,也沒有用處,所以可以設定鎖定第一設備的寫入狀態(tài),即第一設備被接替后,就無法再生成序列值,或者即使生成了序列值也無法寫入到對應業(yè)務中(無法發(fā)送給業(yè)務服務器)。
步驟27:將首次生成的序列值發(fā)送到備份記錄中,并根據(jù)大于該首個序列值中時間戳至少一個時間周期的時間戳,確定第二設備序列上限值。
在第二設備首次生成序列值后,就可以根據(jù)該序列值,確定上限值了,在此后,就可以按照步驟23中的介紹,更新該第二設備序列上限值。
采用實施例2提供的方法,在實施例1的基礎上,通過在正常運行的設備中設定上限值,保證生成的序列值嚴格遞增的同時,提高生成序列值的正確性,并且當設備出現(xiàn)宕機時,也能保證生成的序列值嚴格遞增的同時,降低業(yè)務遷移時出現(xiàn)序列沖突的可能性。
實施例3
基于相同的發(fā)明構思,實施例3提供了一種序列值生成裝置,用于在設備正常運行狀態(tài)下,保證生成的序列值嚴格遞增,并且當設備出現(xiàn)宕機時,也能保證生成的序列值嚴格遞增。圖8為該裝置的結構圖,該裝置包括:第一設備中的第一生成單元31以及第一備份單元32,第二設備中的第二查找單元41、第二確定單元42以及第二生成單元43,其中,
第一生成單元31,可以當?shù)谝辉O備正常運行時,根據(jù)時間戳生成序列值;
第一備份單元32,可以將生成的序列值發(fā)送到備份記錄中;
第二查找單元41,可以當?shù)谝辉O備宕機,第二設備從備份記錄中查找對應第一設備發(fā)送的最大序列值;
第二確定單元42,可以根據(jù)最大序列值,確定第二設備序列下限值;
第二生成單元43,可以在第二設備在首次生成序列值時,并確定出當前時間戳大于第二設備序列下限值中包含的時間戳時,根據(jù)當前時間戳生成序列值。
在一種實施方式中,第一生成單元31,可以根據(jù)時間戳以及自增序列生成序列值;
則第二生成單元41,可以根據(jù)當前時間戳以及自增序列生成序列值。
在一種實施方式中,第二確定單元42,可以
根據(jù)大于最大序列值中時間戳至少一個時間周期的時間戳,確定第二設備序列下限值。
在一種實施方式中,該裝置還包括第二備份單元,可以
將首次生成的序列值發(fā)送到備份記錄中。
在一種實施方式中,第一生成單元31,可以
當?shù)谝辉O備正常運行時,根據(jù)時間戳生成候選序列值;
當候選序列值不大于第一設備序列上限值,將候選序列值確定為序列值。
在一種實施方式中,第一備份單元32,可以
按照預設時間周期,將生成的序列值發(fā)送到備份記錄中;
該裝置還可以包括第一更新單元,可以更新第一設備序列上限值。
在一種實施方式中,第一更新單元,可以
根據(jù)大于序列值中時間戳至少一個時間周期的時間戳,更新第一設備序列上限值。
在一種實施方式中,第一生成單元31,可以根據(jù)時間戳生成候選序列值;
當候選序列值大于第一設備序列下限值,將候選序列值確定為序列值,第一設備序列下限值為第一設備首次接收序列請求時確定的序列值。
實施例4
基于相同的發(fā)明構思,實施例4提供了一種序列值生成系統(tǒng),用于在設備正常運行狀態(tài)下,保證生成的序列值嚴格遞增,并且當設備出現(xiàn)宕機時,也能保證生成的序列值嚴格遞增。圖9為該系統(tǒng)的結構圖,該業(yè)務監(jiān)控系統(tǒng)50包括:第一設備、第二設備、備份記錄,其中,
第一設備,可以在正常運行時,根據(jù)時間戳生成序列值,并將生成的序列值發(fā)送到備份記錄中;
第二設備,可以當?shù)谝辉O備宕機,從備份記錄中查找對應第一設備發(fā)送的最大序列值;
根據(jù)最大序列值,確定第二設備序列下限值;
在第二設備首次生成序列值,且當前時間戳大于第二設備序列下限值中包含的時間戳時,根據(jù)當前時間戳生成序列值;
將首次生成的序列值發(fā)送到備份記錄中;
備份記錄,可以接收第一設備發(fā)送的序列值;響應第二設備的查詢請求。
在一種實施方式中,第一設備,可以根據(jù)時間戳以及自增序列生成序列值;
則第二設備,可以根據(jù)當前時間戳以及自增序列生成序列值。
在一種實施方式中,第二設備,可以
根據(jù)大于最大序列值中時間戳至少一個時間周期的時間戳,確定第二設備序列下限值。
在一種實施方式中,第一設備,可以
當正常運行時,根據(jù)時間戳生成候選序列值;
當候選序列值不大于第一設備序列上限值,且當候選序列值大于第一設備序列下限值,將候選序列值確定為序列值,第一設備序列下限值為第一設備首次接收序列請求時確定的序列值。
在一種實施方式中,第一設備,可以
按照預設時間周期,將生成的序列值發(fā)送到備份記錄中,并更新第一設備序列上限值。
在一種實施方式中,第一設備,可以
根據(jù)大于序列值中時間戳至少一個時間周期的時間戳,更新第一設備序列上限值。
在實際應用中,該系統(tǒng)還可以包括業(yè)務服務器,用于發(fā)送序列請求,以及路由裝置,業(yè)務服務器向路由裝置發(fā)送包含業(yè)務標識的序列請求,路由裝置根據(jù)序列請求中的業(yè)務標識,通過一致性哈希,找到分布式系統(tǒng)中的具體某個設備,再將該序列請求發(fā)送給該設備。并且當進行業(yè)務遷移,就其他設備替換該設備后,路由裝置也需要及時調整路由設置,保證業(yè)務的序列請求能夠正確到達對應的設備。
采用實施例4提供的系統(tǒng),當?shù)谝辉O備正常運行時,根據(jù)時間戳生成序列值,并進行備份。當?shù)谝辉O備出現(xiàn)宕機,第二設備從備份記錄中找到第一設備最后一次備份的最大序列值,將該最大序列值設置為第二設備的下限值,并在首次生成序列值時,以該設備的下限值為準,生成大于該下限值的序列值,并完成接替。通過在正常運行時備份序列值,在其他設備接替時,保證了序列嚴格遞增。通過在正常運行的設備中設定上限值,保證生成的序列值嚴格遞增的同時,提高生成序列值的正確性,并且當設備出現(xiàn)宕機時,也能保證生成的序列值嚴格遞增的同時,降低業(yè)務遷移時出現(xiàn)序列沖突的可能性。
本領域內的技術人員應明白,本申請的實施例可提供為方法、系統(tǒng)、或計算機程序產品。因此,本申請可采用完全硬件實施例、完全軟件實施例、或結合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(包括但不限于磁盤存儲器、CD-ROM、光學存儲器等)上實施的計算機程序產品的形式。
本申請是參照根據(jù)本申請實施例的方法、設備(系統(tǒng))、和計算機程序產品的流程圖和/或方框圖來描述的。應理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結合。可提供這些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設備的處理器以產生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設備的處理器執(zhí)行的指令產生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些計算機程序指令也可存儲在能引導計算機或其他可編程數(shù)據(jù)處理設備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設備上,使得在計算機或其他可編程設備上執(zhí)行一系列操作步驟以產生計算機實現(xiàn)的處理,從而在計算機或其他可編程設備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
在一個典型的配置中,計算設備包括一個或多個處理器(CPU)、輸入/輸出接口、網(wǎng)絡接口和內存。
內存可能包括計算機可讀介質中的非永久性存儲器,隨機存取存儲器(RAM)和/或非易失性內存等形式,如只讀存儲器(ROM)或閃存(flash RAM)。內存是計算機可讀介質的示例。
計算機可讀介質包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術來實現(xiàn)信息存儲。信息可以是計算機可讀指令、數(shù)據(jù)結構、程序的模塊或其他數(shù)據(jù)。計算機的存儲介質的例子包括,但不限于相變內存(PRAM)、靜態(tài)隨機存取存儲器(SRAM)、動態(tài)隨機存取存儲器(DRAM)、其他類型的隨機存取存儲器(RAM)、只讀存儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)、快閃記憶體或其他內存技術、只讀光盤只讀存儲器(CD-ROM)、數(shù)字多功能光盤(DVD)或其他光學存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設備或任何其他非傳輸介質,可用于存儲可以被計算設備訪問的信息。按照本文中的界定,計算機可讀介質不包括暫存電腦可讀媒體(transitory media),如調制的數(shù)據(jù)信號和載波。
還需要說明的是,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括要素的過程、方法、商品或者設備中還存在另外的相同要素。
本領域技術人員應明白,本申請的實施例可提供為方法、系統(tǒng)或計算機程序產品。因此,本申請可采用完全硬件實施例、完全軟件實施例或結合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(包括但不限于磁盤存儲器、CD-ROM、光學存儲器等)上實施的計算機程序產品的形式。
以上僅為本申請的實施例而已,并不用于限制本申請。對于本領域技術人員來說,本申請可以有各種更改和變化。凡在本申請的精神和原理之內所作的任何修改、等同替換、改進等,均應包含在本申請的權利要求范圍之內。