本發(fā)明涉及路由器技術(shù)領(lǐng)域,具體涉及一種id標(biāo)識(shí)分配與持久化方法及系統(tǒng)。
背景技術(shù):
路由器產(chǎn)品包括許多子系統(tǒng),每個(gè)子系統(tǒng)包括許多業(yè)務(wù)模塊,各個(gè)業(yè)務(wù)模塊需要為業(yè)務(wù)關(guān)鍵字key分配id,并且實(shí)時(shí)保持它們之間的映射關(guān)系,保證數(shù)據(jù)的一致性。在這種復(fù)雜環(huán)境下,如何管理id標(biāo)識(shí)的分配與持久化尤為重要。現(xiàn)有的路由器中id標(biāo)識(shí)分配與持久化由各個(gè)模塊自己負(fù)責(zé),其缺陷是id標(biāo)識(shí)重新分配,而且,在單主控重啟、主備倒換、分布式板卡等場(chǎng)景下重新分配的key值和id之間的映射關(guān)系,不能保證id的一致性。
因此,亟需一種技術(shù)方案解決路由器產(chǎn)品各業(yè)務(wù)模塊id標(biāo)識(shí)重新分配的問(wèn)題,并通過(guò)恢復(fù)key與id之間的映射關(guān)系來(lái)解決id不一致的問(wèn)題。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明的目的在于提供一種id標(biāo)識(shí)分配與持久化方法及系統(tǒng),避免路由器產(chǎn)品各業(yè)務(wù)模塊id標(biāo)識(shí)重新分配,而是恢復(fù)key與id之間的映射關(guān)系。
為達(dá)到以上目的,本發(fā)明采取的技術(shù)方案是:一種id標(biāo)識(shí)分配與持久化方法,其用于為路由器各業(yè)務(wù)模塊分配持久化的id標(biāo)識(shí),包括以下步驟:
調(diào)用注冊(cè)函數(shù)注冊(cè)idap庫(kù),為路由器每個(gè)業(yè)務(wù)模塊各分配一個(gè)idap庫(kù)的模塊索引,設(shè)置id分配規(guī)則、key值類(lèi)型及key值比較函數(shù);注冊(cè)idap庫(kù)后生成idap庫(kù)管理結(jié)構(gòu),所述idap庫(kù)管理結(jié)構(gòu)包括idap的模塊索引、id分配規(guī)則、key值類(lèi)型及key值比較函數(shù);所述idap庫(kù)為一種lib庫(kù),其用于為路由器各業(yè)務(wù)模塊分配持久化的id標(biāo)識(shí);
為每個(gè)模塊索引創(chuàng)建對(duì)應(yīng)的模塊句柄,創(chuàng)建每個(gè)模塊對(duì)應(yīng)的idap庫(kù)文件及idap庫(kù)文件名;
各業(yè)務(wù)模塊為指定的key值分配id時(shí),先使用key值比較函數(shù)查找key值對(duì)應(yīng)的id是否存在,若存在,直接返回已存在的id;若不存在,根據(jù)id分配規(guī)則給調(diào)用的key值分配id,并新增key值與id映射關(guān)系表項(xiàng),所述key值與id映射關(guān)系表項(xiàng)包括id樹(shù)中的存儲(chǔ)節(jié)點(diǎn)、key樹(shù)中的存儲(chǔ)節(jié)點(diǎn)、id、key值、key的長(zhǎng)度以及老化標(biāo)記;
將新增的key值與id映射關(guān)系表項(xiàng)寫(xiě)入idap庫(kù)文件,插入與key值與id映射關(guān)系表項(xiàng)對(duì)應(yīng)的表項(xiàng)句柄;周期性備份idap庫(kù)文件;
模塊重啟或者倒換恢復(fù)時(shí),讀取備份的idap庫(kù)文件,加載idap庫(kù)文件中全部key值與id映射關(guān)系表項(xiàng),讀取表項(xiàng)中的key值及id值并存儲(chǔ)在緩存中,同時(shí)設(shè)置老化標(biāo)記;
在業(yè)務(wù)模塊恢復(fù)過(guò)程中,業(yè)務(wù)模塊為指定的key值分配id時(shí),清除對(duì)應(yīng)的key值與id映射關(guān)系表項(xiàng)的老化標(biāo)記;
在業(yè)務(wù)模塊恢復(fù)后,調(diào)用老化接口老化仍有老化標(biāo)記的key值與id映射關(guān)系表項(xiàng)。
在上述技術(shù)方案的基礎(chǔ)上,所述id分配規(guī)則包括id分配算法,最小分配id及最大分配id。
在上述技術(shù)方案的基礎(chǔ)上,所述模塊索引包括模塊服務(wù)標(biāo)識(shí)和業(yè)務(wù)實(shí)例號(hào),根據(jù)路由器業(yè)務(wù)模塊的服務(wù)領(lǐng)域定義服務(wù)標(biāo)識(shí),每個(gè)路由器業(yè)務(wù)模塊對(duì)應(yīng)一個(gè)業(yè)務(wù)實(shí)例號(hào)。
在上述技術(shù)方案的基礎(chǔ)上,key值類(lèi)型包括字符串和結(jié)構(gòu)體兩種形式,如果key值的類(lèi)型是結(jié)構(gòu)體,則業(yè)務(wù)模塊提供將結(jié)構(gòu)體格式化為字符串的方法。
在上述技術(shù)方案的基礎(chǔ)上,id分配算法包括最小分配算法、順序分配算法和業(yè)務(wù)自定義算法;最小分配算法為每次分配的id都是當(dāng)前可用的最小id;順序分配是指按順序遞增方式分配id;業(yè)務(wù)自定義分配算法根據(jù)業(yè)務(wù)實(shí)際情況分配id,需要業(yè)務(wù)模塊提供具體分配算法。
在上述技術(shù)方案的基礎(chǔ)上,idap庫(kù)管理結(jié)構(gòu)還包括idap延遲寫(xiě)定時(shí)器、最后一次寫(xiě)文件時(shí)間以及是否啟動(dòng)延遲寫(xiě)定時(shí)器,所述延遲寫(xiě)定時(shí)器用于周期性將新增的key值與id映射關(guān)系表項(xiàng)寫(xiě)入idap庫(kù)文件。
本發(fā)明還公開(kāi)了一種id標(biāo)識(shí)分配與持久化系統(tǒng),其用于為路由器各業(yè)務(wù)模塊分配持久化的id標(biāo)識(shí),包括:
idap庫(kù)注冊(cè)模塊,所述idap庫(kù)注冊(cè)模塊用于調(diào)用注冊(cè)函數(shù)注冊(cè)idap庫(kù),為路由器每個(gè)業(yè)務(wù)模塊各分配一個(gè)idap庫(kù)的模塊索引,設(shè)置id分配規(guī)則、key值類(lèi)型及key值比較函數(shù);生成idap庫(kù)管理結(jié)構(gòu),所述idap庫(kù)管理結(jié)構(gòu)包括idap的模塊索引、id分配規(guī)則、key值類(lèi)型及key值比較函數(shù);所述idap庫(kù)為一種lib庫(kù),其用于為路由器各業(yè)務(wù)模塊分配持久化的id標(biāo)識(shí);為每個(gè)模塊索引創(chuàng)建對(duì)應(yīng)的模塊句柄,創(chuàng)建每個(gè)模塊句柄對(duì)應(yīng)的idap庫(kù)文件及idap庫(kù)文件名;
id分配模塊,所述id分配模塊用于在各業(yè)務(wù)模塊調(diào)用key值時(shí),先使用key值比較函數(shù)查找key值對(duì)應(yīng)的id是否存在,若存在,直接返回已存在的id;若不存在,根據(jù)id分配規(guī)則給指定的key值分配id;
表項(xiàng)生成模塊,所述表項(xiàng)生成模塊用于id分配模塊根據(jù)id分配規(guī)則給調(diào)用的key值分配新id時(shí),新增key值與id映射關(guān)系表項(xiàng),所述key值與id映射關(guān)系表項(xiàng)包括id樹(shù)中的存儲(chǔ)節(jié)點(diǎn)、key樹(shù)中的存儲(chǔ)節(jié)點(diǎn)、id、key值、key的長(zhǎng)度、key的標(biāo)記;
表項(xiàng)存儲(chǔ)模塊,所述表項(xiàng)存儲(chǔ)模塊用于將新增的key值與id映射關(guān)系表項(xiàng)寫(xiě)入idap庫(kù)文件,插入與key值與id映射關(guān)系表項(xiàng)對(duì)應(yīng)的表項(xiàng)句柄;周期性備份idap庫(kù)文件;
表項(xiàng)恢復(fù)模塊,所述表項(xiàng)恢復(fù)模塊用于模塊重啟或者倒換恢復(fù)時(shí),讀取備份的idap庫(kù)文件,加載idap庫(kù)文件中全部key值與id映射關(guān)系表項(xiàng),讀取表項(xiàng)中的key值及id值并存儲(chǔ)在緩存中,同時(shí)設(shè)置才化標(biāo)記。
在上述技術(shù)方案的基礎(chǔ)上,所述id標(biāo)識(shí)分配與持久化系統(tǒng)還包括老化模塊,所述老化模塊用于系統(tǒng)重啟或者倒換恢復(fù)時(shí),給所有加載的key值與id映射關(guān)系表項(xiàng)設(shè)置老化標(biāo)記,在業(yè)務(wù)模塊恢復(fù)過(guò)程中,清除業(yè)務(wù)模塊命中的表項(xiàng)老化標(biāo)記;在業(yè)務(wù)模塊恢復(fù)后,調(diào)用老化接口老化仍有老化標(biāo)記的key值與id映射關(guān)系表項(xiàng)。
在上述技術(shù)方案的基礎(chǔ)上,所述模塊索引包括模塊服務(wù)標(biāo)識(shí)和業(yè)務(wù)實(shí)例號(hào),根據(jù)路由器業(yè)務(wù)模塊的服務(wù)領(lǐng)域定義服務(wù)標(biāo)識(shí),每個(gè)路由器業(yè)務(wù)模塊的一個(gè)服務(wù)可以對(duì)應(yīng)多個(gè)業(yè)務(wù)實(shí)例,通過(guò)業(yè)務(wù)實(shí)例號(hào)來(lái)區(qū)分不同實(shí)例。
在上述技術(shù)方案的基礎(chǔ)上,idap庫(kù)管理結(jié)構(gòu)還包括idap延遲寫(xiě)定時(shí)器、最后一次寫(xiě)文件時(shí)間以及是否啟動(dòng)延遲寫(xiě)定時(shí)器,所述延遲寫(xiě)定時(shí)器用于周期性將新增的key值與id映射關(guān)系表項(xiàng)寫(xiě)入idap庫(kù)文件。
與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)在于:
本發(fā)明調(diào)用注冊(cè)函數(shù)注冊(cè)idap庫(kù),為路由器每個(gè)業(yè)務(wù)模塊各分配一個(gè)idap庫(kù)的模塊索引,設(shè)置id分配規(guī)則、key值類(lèi)型及key值比較函數(shù);在各業(yè)務(wù)模塊需要為指定的key值分配id時(shí),根據(jù)id分配規(guī)則給指定的key值分配id;模塊重啟或者倒換恢復(fù)時(shí),讀取備份的idap庫(kù)文件,加載idap庫(kù)文件中全部key值與id映射關(guān)系表項(xiàng),讀取表項(xiàng)中的key值及id值并存儲(chǔ)在緩存中,同時(shí)設(shè)置老化標(biāo)記,從而避免路由器產(chǎn)品各業(yè)務(wù)模塊id標(biāo)識(shí)的重新分配,恢復(fù)之前的key與id之間的映射關(guān)系。
附圖說(shuō)明
圖1為本發(fā)明實(shí)施例中一種id標(biāo)識(shí)分配與持久化方法的流程示意圖;
圖2為本發(fā)明實(shí)施例中一種id標(biāo)識(shí)分配與持久化系統(tǒng)的結(jié)構(gòu)示意圖。
具體實(shí)施方式
以下結(jié)合附圖及實(shí)施例對(duì)本發(fā)明作進(jìn)一步詳細(xì)說(shuō)明。
參見(jiàn)圖1所示,本發(fā)明實(shí)施例提供一種id標(biāo)識(shí)分配與持久化方法,其用于為路由器各業(yè)務(wù)模塊分配id標(biāo)識(shí)及持久化分配的id標(biāo)識(shí),包括以下步驟:
s1,調(diào)用注冊(cè)函數(shù)注冊(cè)idap庫(kù),為路由器每個(gè)業(yè)務(wù)模塊各分配一個(gè)idap庫(kù)的模塊索引,設(shè)置id分配規(guī)則、key值類(lèi)型及key值比較函數(shù);注冊(cè)idap庫(kù)后生成idap庫(kù)管理結(jié)構(gòu),idap庫(kù)管理結(jié)構(gòu)包括idap的模塊索引、id分配規(guī)則、key值類(lèi)型及key值比較函數(shù);idap庫(kù)為一種lib庫(kù),其用于為路由器各業(yè)務(wù)模塊分配持久化的id標(biāo)識(shí);模塊索引包括模塊服務(wù)標(biāo)識(shí)和業(yè)務(wù)實(shí)例號(hào),根據(jù)路由器業(yè)務(wù)模塊的服務(wù)領(lǐng)域定義服務(wù)標(biāo)識(shí),每個(gè)路由器業(yè)務(wù)模塊對(duì)應(yīng)一個(gè)業(yè)務(wù)實(shí)例號(hào)。key值類(lèi)型包括字符串和結(jié)構(gòu)體兩種形式,如果key值的類(lèi)型是結(jié)構(gòu)體,則業(yè)務(wù)模塊提供將結(jié)構(gòu)體格式化為字符串的方法。
s2,為每個(gè)模塊索引創(chuàng)建對(duì)應(yīng)的模塊句柄,創(chuàng)建每個(gè)模塊句柄對(duì)應(yīng)的idap庫(kù)文件及idap庫(kù)文件名;
s3,各業(yè)務(wù)模塊為指定的key值分配id時(shí),先使用key值比較函數(shù)查找key值對(duì)應(yīng)的id是否存在,若存在,直接返回已存在的id;若不存在,根據(jù)id分配規(guī)則給調(diào)用的key值分配id,并新增key值與id映射關(guān)系表項(xiàng),key值與id映射關(guān)系表項(xiàng)包括id樹(shù)中的存儲(chǔ)節(jié)點(diǎn)、key樹(shù)中的存儲(chǔ)節(jié)點(diǎn)、id、key值、key的長(zhǎng)度;id分配規(guī)則包括id分配算法,最小分配id及最大分配id。id分配算法包括最小分配算法、順序分配算法和業(yè)務(wù)自定義算法;最小分配算法為每次分配的id都是當(dāng)前可用的最小id;順序分配是指按順序遞增方式分配id;業(yè)務(wù)自定義分配算法根據(jù)業(yè)務(wù)實(shí)際情況分配id。
s4,將新增的key值與id映射關(guān)系表項(xiàng)寫(xiě)入idap庫(kù)文件,插入key值與id映射關(guān)系表項(xiàng)對(duì)應(yīng)的表項(xiàng)句柄;周期性備份idap庫(kù)文件;
s5,模塊重啟或者倒換恢復(fù)時(shí),讀取備份的idap庫(kù)文件,加載idap庫(kù)文件中全部key值與id映射關(guān)系表項(xiàng),讀取表項(xiàng)中的key值及id值并存儲(chǔ)在緩存中,同時(shí)設(shè)置老化標(biāo)記;
s6,業(yè)務(wù)模塊恢復(fù)過(guò)程中調(diào)用緩存中的key值或id時(shí),清除對(duì)應(yīng)的key值與id映射關(guān)系表項(xiàng)的老化標(biāo)記;
s7,業(yè)務(wù)模塊恢復(fù)后,調(diào)用老化接口老化仍有老化標(biāo)記的key值與id映射關(guān)系表項(xiàng),結(jié)束。
idap庫(kù)管理結(jié)構(gòu)還包括idap延遲寫(xiě)定時(shí)器、最后一次寫(xiě)文件時(shí)間以及是否啟動(dòng)延遲寫(xiě)定時(shí)器,延遲寫(xiě)定時(shí)器用于周期性將新增的key值與id映射關(guān)系表項(xiàng)寫(xiě)入idap庫(kù)文件。
本發(fā)明還公開(kāi)了一種id標(biāo)識(shí)分配與持久化系統(tǒng),其用于為路由器各業(yè)務(wù)模塊分配id標(biāo)識(shí)及持久化分配的id標(biāo)識(shí),包括:
idap庫(kù)注冊(cè)模塊,idap庫(kù)注冊(cè)模塊用于調(diào)用注冊(cè)函數(shù)注冊(cè)idap庫(kù),為路由器每個(gè)業(yè)務(wù)模塊各分配一個(gè)idap庫(kù)的模塊索引,設(shè)置id分配規(guī)則、key值類(lèi)型及key值比較函數(shù);生成idap庫(kù)管理結(jié)構(gòu),idap庫(kù)管理結(jié)構(gòu)包括idap的模塊索引、id分配規(guī)則、key值類(lèi)型及key值比較函數(shù);idap庫(kù)為一種lib庫(kù),其用于為路由器各業(yè)務(wù)模塊分配id標(biāo)識(shí)及持久化分配的id標(biāo)識(shí);為每個(gè)模塊索引創(chuàng)建對(duì)應(yīng)的模塊句柄,創(chuàng)建每個(gè)模塊句柄對(duì)應(yīng)的idap庫(kù)文件及idap庫(kù)文件名;
id分配模塊,id分配模塊用于在各業(yè)務(wù)模塊調(diào)用key值時(shí),先使用key值比較函數(shù)查找key值對(duì)應(yīng)的id是否存在,若存在,直接返回已存在的id;若不存在,根據(jù)id分配規(guī)則給調(diào)用的key值分配id;
表項(xiàng)生成模塊,表項(xiàng)生成模塊用于id分配模塊根據(jù)id分配規(guī)則給調(diào)用的key值分配新id時(shí),新增key值與id映射關(guān)系表項(xiàng),key值與id映射關(guān)系表項(xiàng)包括id樹(shù)中的存儲(chǔ)節(jié)點(diǎn)、key樹(shù)中的存儲(chǔ)節(jié)點(diǎn)、id、key值、key的長(zhǎng)度;
表項(xiàng)存儲(chǔ)模塊,表項(xiàng)處理模塊用于將新增的key值與id映射關(guān)系表項(xiàng)寫(xiě)入idap庫(kù)文件,插入與key值與id映射關(guān)系表項(xiàng)對(duì)應(yīng)的表項(xiàng)句柄;周期性備份idap庫(kù)文件;
表項(xiàng)恢復(fù)模塊,表項(xiàng)恢復(fù)模塊用于模塊重啟或者倒換恢復(fù)時(shí),讀取備份的idap庫(kù)文件,加載idap庫(kù)文件中全部key值與id映射關(guān)系表項(xiàng),讀取表項(xiàng)中的key值及id值并存儲(chǔ)在緩存中,同時(shí)設(shè)置老化標(biāo)記。
id標(biāo)識(shí)分配與持久化系統(tǒng)還包括老化模塊,系統(tǒng)重啟或者倒換恢復(fù)時(shí),給所有加載的key值與id映射關(guān)系表項(xiàng)設(shè)置老化標(biāo)記,在業(yè)務(wù)模塊恢復(fù)過(guò)程中,清除業(yè)務(wù)模塊命中的表項(xiàng)老化標(biāo)記;在業(yè)務(wù)模塊恢復(fù)后,調(diào)用老化接口老化仍有老化標(biāo)記的key值與id映射關(guān)系表項(xiàng)。
模塊索引包括模塊服務(wù)標(biāo)識(shí)和業(yè)務(wù)實(shí)例號(hào),根據(jù)路由器業(yè)務(wù)模塊的服務(wù)領(lǐng)域定義服務(wù)標(biāo)識(shí),每個(gè)路由器業(yè)務(wù)模塊對(duì)應(yīng)一個(gè)業(yè)務(wù)實(shí)例號(hào)。
idap庫(kù)管理結(jié)構(gòu)還包括idap延遲寫(xiě)定時(shí)器、最后一次寫(xiě)文件時(shí)間以及是否啟動(dòng)延遲寫(xiě)定時(shí)器,延遲寫(xiě)定時(shí)器用于周期性將新增的key值與id映射關(guān)系表項(xiàng)寫(xiě)入idap庫(kù)文件。
本發(fā)明不局限于上述實(shí)施方式,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也視為本發(fā)明的保護(hù)范圍之內(nèi)。本說(shuō)明書(shū)中未作詳細(xì)描述的內(nèi)容屬于本領(lǐng)域?qū)I(yè)技術(shù)人員公知的現(xiàn)有技術(shù)。