專利名稱:分布式系統(tǒng)業(yè)務(wù)分發(fā)的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于通信技術(shù)領(lǐng)域,尤其涉及分布式系統(tǒng)業(yè)務(wù)分發(fā)的方法和系統(tǒng)。
背景技術(shù):
在大容量的通信系統(tǒng)中,對于龐大的信令業(yè)務(wù)處理要求,采用集中式處理方式一般難以勝任,為了提高信令業(yè)務(wù)的處理能力,目前多采用分布式的業(yè)務(wù)處理系統(tǒng)。與集中式系統(tǒng)單模塊處理方式的不同之處在于,分布式系統(tǒng)中的某種業(yè)務(wù)分散由多個結(jié)構(gòu)相同的處理模塊分擔(dān)處理,因此,分布式系統(tǒng)具有更大的系統(tǒng)容量和更高的業(yè)務(wù)處理效率。
針對分布式系統(tǒng),有兩種信令業(yè)務(wù)分發(fā)的方案,下面分別進行描述方案一、“保存全部業(yè)務(wù)索引”法系統(tǒng)設(shè)置一個分發(fā)模塊和多個信令業(yè)務(wù)處理模塊,分發(fā)模塊負責(zé)把所有信令業(yè)務(wù)分發(fā)給各個處理模塊。分發(fā)模塊保存和維護一個記錄當(dāng)前所有業(yè)務(wù)實例的特征關(guān)鍵字的表,該表記錄了當(dāng)前每個業(yè)務(wù)實例的處理模塊。在業(yè)務(wù)實例的開始和結(jié)束時,分發(fā)模塊負責(zé)“特征關(guān)鍵字表”中對應(yīng)項目的創(chuàng)建和注銷。分發(fā)模塊通過查詢“特征關(guān)鍵字表”來分發(fā)所有的信令業(yè)務(wù),找到對應(yīng)的處理模塊。
上述方案中,業(yè)務(wù)的分發(fā)依賴于分發(fā)模塊中維護的所述業(yè)務(wù)實例與特征關(guān)鍵字對應(yīng)關(guān)系的表,而在大容量系統(tǒng)中,由于業(yè)務(wù)實例非常多,導(dǎo)致記錄所有業(yè)務(wù)實例的“特征關(guān)鍵字表”非常龐大,因此,“特征關(guān)鍵字表”會占用巨大的內(nèi)存資源。由于“特征關(guān)鍵字表”的龐大,分發(fā)模塊將消耗較多的時間查詢對應(yīng)的處理模塊,導(dǎo)致分發(fā)模塊分發(fā)的效率降低,進而影響分布式系統(tǒng)的業(yè)務(wù)處理效率。
方案二、“直接散列”負荷分布方案,具體為系統(tǒng)設(shè)置一個分發(fā)模塊和多個信令業(yè)務(wù)處理模塊,分發(fā)模塊執(zhí)行散列算法得到對應(yīng)的處理模塊,并向該模塊分發(fā)信令業(yè)務(wù)。
簡單舉例說明對所有的業(yè)務(wù)實例,按照特征關(guān)鍵字,計算出特征值,并用處理模塊個數(shù)模除特征值,從而得到信令業(yè)務(wù)對應(yīng)的處理模塊,并向?qū)?yīng)處理模塊分發(fā)業(yè)務(wù)??梢钥闯觯撋⒘兴惴ㄖ?,模除用的處理模塊個數(shù)決定了信令業(yè)務(wù)與處理模塊的對應(yīng)關(guān)系,當(dāng)該值改變時,信令業(yè)務(wù)與處理模塊的對應(yīng)關(guān)系將發(fā)生很大變化,如果將某處理模塊處理的信令業(yè)務(wù)重新分配到另一處理模塊,可能導(dǎo)致已經(jīng)建立的業(yè)務(wù)大范圍中斷。
采用散列算法,將信令業(yè)務(wù)直接映射到對應(yīng)的處理模塊,從而解決了方案一中占用內(nèi)存資源較多和分發(fā)效率較低的問題,然而,一旦算法確定,特征關(guān)鍵字與處理模塊的關(guān)系也就確定了,在調(diào)整個別信令業(yè)務(wù)所分配的處理模塊時,散列算法稍加改變,信令業(yè)務(wù)與處理模塊的對應(yīng)關(guān)系即會發(fā)生很大變化,導(dǎo)致已經(jīng)建立的業(yè)務(wù)受到大范圍影響。因此,對信令業(yè)務(wù)所分配的處理模塊進行調(diào)整的方案無法實際應(yīng)用,因而造成下述缺陷1)在多個處理模塊中的某個處理模塊故障時,因為通過散列算法分配給該處理模塊的業(yè)務(wù)不能被調(diào)整到其它處理模塊,將導(dǎo)致該模塊所對應(yīng)的業(yè)務(wù)不能處理,因此,不能滿足通信系統(tǒng)高可靠性的要求;2)當(dāng)隔離某處理模塊進行維護時,分發(fā)模塊仍然執(zhí)行原來的散列算法向該處理模塊分發(fā)業(yè)務(wù),隔離操作無法完成,因此,無法滿足通信系統(tǒng)操作維護靈活方便的要求;3)當(dāng)對系統(tǒng)進行擴容時,為了將原來由其它處理模塊處理的業(yè)務(wù)部分調(diào)整到新加入的處理模塊,只有改變散列算法,將導(dǎo)致處理模塊上正在進行的業(yè)務(wù)大范圍中斷,因此,該方案無法實現(xiàn)動態(tài)擴容。
因此,在處理模塊脫離/加入系統(tǒng)時,若對負荷進行調(diào)整,將對業(yè)務(wù)造成很大影響。
綜上所述,方案一存在內(nèi)存資源消耗巨大和分發(fā)處理性能低下的問題,而方案二無法實現(xiàn)不影響業(yè)務(wù)的負荷動態(tài)調(diào)整。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的主要目的在于提供分布式系統(tǒng)業(yè)務(wù)分發(fā)的方法和系統(tǒng),該方案能夠?qū)崿F(xiàn)不影響業(yè)務(wù)處理的負荷動態(tài)調(diào)整,并避免了內(nèi)存資源消耗巨大和分發(fā)處理性能低下的問題。
為實現(xiàn)上述目的,本發(fā)明提供了一種分布式系統(tǒng)業(yè)務(wù)分發(fā)的方法,該方法包括步驟1)根據(jù)業(yè)務(wù)特征關(guān)鍵字執(zhí)行散列算法得到散列值,以大于處理模塊個數(shù)的值M為模,對所述散列值取余,將業(yè)務(wù)散列為M個業(yè)務(wù)組;2)將所述業(yè)務(wù)組分發(fā)到各組分配的處理模塊處理。
其中,步驟2)所述的處理模塊處理業(yè)務(wù)的步驟具體為a1)處理模塊判斷接收到的業(yè)務(wù)是否為初始業(yè)務(wù),如果是,則創(chuàng)建業(yè)務(wù)實例并處理業(yè)務(wù);否則,執(zhí)行步驟a2);a2)從已經(jīng)創(chuàng)建的業(yè)務(wù)實例中根據(jù)關(guān)鍵字查找,如果存在對應(yīng)的業(yè)務(wù)實例,則處理業(yè)務(wù)。
處理模塊間進一步建立主從關(guān)系,步驟a2)還包括如果不存在對應(yīng)的業(yè)務(wù)實例,則執(zhí)行散列算法得到對應(yīng)的業(yè)務(wù)組,若所述業(yè)務(wù)組建立了從處理模塊,則轉(zhuǎn)發(fā)業(yè)務(wù)到該從處理模塊處理。進一步設(shè)置有效時限(Time to Live,TTL)限制從處理模塊的存在時間,若TTL超時,取消對應(yīng)業(yè)務(wù)組的從處理模塊。
若處理模塊發(fā)生故障/被隔離,在步驟2)之前還包括步驟t1)改變對應(yīng)業(yè)務(wù)組分配的處理模塊。
其中,所述步驟t1)具體為t11)計算某個非故障/被隔離處理模塊當(dāng)前應(yīng)處理的業(yè)務(wù)組數(shù);t12)判斷該處理模塊作為主處理模塊數(shù)是否小于所述業(yè)務(wù)組數(shù),如果是,則選取該模塊用于處理故障/被隔離模塊對應(yīng)的業(yè)務(wù)組。
其中,選取故障/被隔離處理模塊對應(yīng)業(yè)務(wù)組為當(dāng)前選出的非故障/未被隔離模塊的步驟為b1)如果當(dāng)前故障/被隔離處理模塊所對應(yīng)業(yè)務(wù)組的從處理模塊為當(dāng)前選出的非故障/未被隔離處理模塊,則改變對應(yīng)業(yè)務(wù)組分配的處理模塊為該處理模塊;否則,執(zhí)行步驟b2);b2)如果當(dāng)前故障/被隔離處理模塊所對應(yīng)業(yè)務(wù)組的從處理模塊不存在,則改變對應(yīng)業(yè)務(wù)組分配的處理模塊為該處理模塊;否則,執(zhí)行步驟b3);b3)如果當(dāng)前故障/被隔離處理模塊所對應(yīng)業(yè)務(wù)的從處理模塊為其它非故障/未被隔離的處理模塊,則改變對應(yīng)業(yè)務(wù)組分配的處理模塊為該處理模塊。對故障處理模塊,進一步取消其對應(yīng)業(yè)務(wù)組的從處理模塊;對被隔離處理模塊,進一步置其為對應(yīng)業(yè)務(wù)組的從處理模塊。
若處理模塊取消隔離/有新的處理模塊增加,在步驟2)之前還包括步驟t2)分配業(yè)務(wù)組到取消隔離/新增的處理模塊。
其中,步驟t2)具體為t21)計算某個原來的處理模塊當(dāng)前應(yīng)處理的業(yè)務(wù)組數(shù);t22)判斷該處理模塊作為主處理模塊數(shù)是否大于所述業(yè)務(wù)組數(shù),如果是,則選取該模塊所對應(yīng)的業(yè)務(wù)組分配到取消隔離/新增的處理模塊。
其中,選取某個原來的處理模塊所對應(yīng)的業(yè)務(wù)組分配到取消隔離的處理模塊的步驟為c1)如果當(dāng)前選出的處理模塊所對應(yīng)業(yè)務(wù)組的從處理模塊為取消隔離的處理模塊,則分配對應(yīng)業(yè)務(wù)組到取消隔離的處理模塊;否則,執(zhí)行步驟c2);c2)如果當(dāng)前選出的處理模塊所對應(yīng)業(yè)務(wù)組的從處理模塊不存在,則分配對應(yīng)業(yè)務(wù)組到取消隔離的處理模塊;否則,執(zhí)行步驟c3);c3)如果當(dāng)前選出的處理模塊所對應(yīng)業(yè)務(wù)組的從處理模塊為其它的處理模塊,則分配對應(yīng)業(yè)務(wù)組到取消隔離的處理模塊。
其中,選取某個原來的處理模塊所對應(yīng)的業(yè)務(wù)組分配到新增加的處理模塊的步驟為d1)如果當(dāng)前選出的處理模塊所對應(yīng)業(yè)務(wù)組的從處理模塊不存在,則分配對應(yīng)業(yè)務(wù)組到新增的處理模塊;否則,執(zhí)行步驟d2);d2)如果當(dāng)前選出的處理模塊所對應(yīng)業(yè)務(wù)組的從處理模塊為其它的處理模塊,則分配對應(yīng)業(yè)務(wù)組到新增的處理模塊。
進一步置所述業(yè)務(wù)組原來的主處理模塊為該業(yè)務(wù)組的從處理模塊。
為實現(xiàn)發(fā)明目的,本發(fā)明提供了一種分布式系統(tǒng)業(yè)務(wù)分發(fā)的系統(tǒng),該系統(tǒng)包括分發(fā)模塊、至少兩個處理模塊,其中分發(fā)模塊,用于保存各業(yè)務(wù)組分配的處理模塊的標識,根據(jù)業(yè)務(wù)特征關(guān)鍵字執(zhí)行散列算法得到散列值,以大于處理模塊個數(shù)的值M為模,對所述散列值取余,將業(yè)務(wù)散列為M個業(yè)務(wù)組,將所述業(yè)務(wù)組分發(fā)到各組分配的處理模塊處理。
處理模塊,用于處理接收到的業(yè)務(wù)。
其中,所述的分發(fā)模塊還用于建立并保存各業(yè)務(wù)組的處理模塊的主從關(guān)系,主處理模塊將業(yè)務(wù)組轉(zhuǎn)發(fā)到有該業(yè)務(wù)組對應(yīng)業(yè)務(wù)實例的從處理模塊處理。
分發(fā)模塊還用于維護對應(yīng)業(yè)務(wù)組分配的處理模塊。
為實現(xiàn)發(fā)明目的,本發(fā)明提供了一種分布式系統(tǒng)業(yè)務(wù)分發(fā)的系統(tǒng),該系統(tǒng)包括至少兩個處理模塊,各處理模塊保存各業(yè)務(wù)組分配的處理模塊的標識,根據(jù)業(yè)務(wù)特征關(guān)鍵字執(zhí)行散列算法得到散列值,以大于處理模塊個數(shù)的值M為模,對所述散列值取余,將業(yè)務(wù)散列為M個業(yè)務(wù)組,將所述業(yè)務(wù)組分發(fā)到各組分配的處理模塊處理,并對接收到的業(yè)務(wù)進行處理。
其中,所述的處理模塊還用于建立并保存各業(yè)務(wù)組的處理模塊的主從關(guān)系,主處理模塊將業(yè)務(wù)組轉(zhuǎn)發(fā)到有該業(yè)務(wù)組對應(yīng)業(yè)務(wù)實例的從處理模塊處理。
系統(tǒng)還包括功能維護模塊,用于維護對應(yīng)業(yè)務(wù)組分配的處理模塊。
可見,本發(fā)明所提供的系統(tǒng)根據(jù)業(yè)務(wù)特征關(guān)鍵字執(zhí)行散列算法得到散列值,以大于處理模塊個數(shù)的值M為模,對所述散列值取余,將業(yè)務(wù)散列為M個業(yè)務(wù)組,將所述業(yè)務(wù)組分發(fā)到各組分配的處理模塊處理。
采用散列算法,與現(xiàn)有技術(shù)方案一相比,避免了占用巨大的系統(tǒng)資源以及分發(fā)處理性能低下的問題。
將業(yè)務(wù)散列為M組后,特征關(guān)鍵字與M個組相對應(yīng),而不是直接映射到具體的處理模塊,當(dāng)改變個別業(yè)務(wù)組對應(yīng)的處理模塊時,不會改變特征關(guān)鍵字與各個業(yè)務(wù)組的關(guān)系,不需要改變散列算法,因此不會對其它業(yè)務(wù)組造成影響,即不會影響其它處理模塊上正在進行的業(yè)務(wù),從而實現(xiàn)了負荷的動態(tài)調(diào)整,而在現(xiàn)有技術(shù)中,由于無法實現(xiàn)負荷的動態(tài)調(diào)整,在處理模塊故障、進行維護或擴容時,會對業(yè)務(wù)造成很大影響。
因此,本發(fā)明與所述現(xiàn)有技術(shù)的方案二相比,具有如下優(yōu)點1)當(dāng)系統(tǒng)中某個處理模塊發(fā)生故障時,該處理模塊上的業(yè)務(wù)由其它非故障處理模塊進行處理,不會影響由該模塊處理的后續(xù)業(yè)務(wù),提高了系統(tǒng)的可靠性。
2)當(dāng)需要對某處理模塊進行隔離維護時,該處理模塊所分配的業(yè)務(wù)由其它未被隔離的處理模塊處理,不影響后續(xù)業(yè)務(wù);當(dāng)對某處理模塊取消隔離時,將原來處理模塊上的部分業(yè)務(wù)組分配到該處理模塊處理即可,方便了系統(tǒng)的維護。
3)當(dāng)增加新的處理模塊時,只需改變原來處理模塊所對應(yīng)的部分業(yè)務(wù)組到該處理模塊,從而實現(xiàn)不影響業(yè)務(wù)的動態(tài)擴容。
更進一步,處理模塊間建立主從關(guān)系時,在對處理模塊進行隔離、取消隔離,以及增加新的處理模塊時,將被隔離模塊以及原來的主處理模塊上正在進行的業(yè)務(wù)轉(zhuǎn)由從處理模塊進行處理,使所有的處理模塊當(dāng)前正在進行的業(yè)務(wù)也不會受到影響,因而所有的業(yè)務(wù)都不會受到影響,進一步提高了系統(tǒng)的可靠性。
在處理模塊發(fā)生故障/被隔離時,將該模塊上的業(yè)務(wù)轉(zhuǎn)移到業(yè)務(wù)量較少的處理模塊上,在處理模塊取消隔離或增加新的處理模塊時,由該處理模塊分擔(dān)業(yè)務(wù)量較多的處理模塊上的負荷,從而使負荷更加均衡。
增加TTL,使得業(yè)務(wù)組與處理模塊的關(guān)系最大程度上保持初始化時的狀態(tài),避免了業(yè)務(wù)的不必要轉(zhuǎn)發(fā),提高了系統(tǒng)效率。
圖1為本發(fā)明實施例的系統(tǒng)結(jié)構(gòu)圖;圖2為本發(fā)明系統(tǒng)為固定分發(fā)模式時系統(tǒng)正常運行的業(yè)務(wù)處理流程圖;圖3為本發(fā)明系統(tǒng)為固定分發(fā)模式時處理模塊發(fā)生故障時的流程圖;圖4為本發(fā)明系統(tǒng)為固定分發(fā)模式時處理模塊被隔離時的流程圖;圖5為本發(fā)明系統(tǒng)為固定分發(fā)模式時處理模塊取消隔離時的流程圖;圖6為本發(fā)明系統(tǒng)為固定分發(fā)模式時增加新的處理模塊時的流程圖;圖7為本發(fā)明系統(tǒng)為全分布式時正常運行的業(yè)務(wù)處理流程圖;圖8為本發(fā)明系統(tǒng)為全分布式時處理模塊發(fā)生故障時的流程圖;圖9為本發(fā)明系統(tǒng)為全分布式時處理模塊被隔離時的流程圖;圖10為本發(fā)明系統(tǒng)為全分布式時處理模塊隔離取消時的流程圖;圖11為本發(fā)明系統(tǒng)為全分布式時增加新的處理模塊時的流程圖。
具體實施例方式
本發(fā)明為分布式系統(tǒng)業(yè)務(wù)分發(fā)的方法和系統(tǒng),其核心思想為根據(jù)業(yè)務(wù)特征關(guān)鍵字執(zhí)行散列算法得到散列值,以大于處理模塊個數(shù)的值M為模,對所述散列值取余,將業(yè)務(wù)散列為M個業(yè)務(wù)組,并將所述業(yè)務(wù)組分發(fā)到各組分配的處理模塊處理。
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚明白,以下參照附圖并舉實施例,對本發(fā)明進一步詳細說明。
在本發(fā)明中,業(yè)務(wù)分發(fā)可以分別采用固定分發(fā)模塊模式和全分布式兩種方案,下面分別針對這兩種情況,對本發(fā)明進行詳細描述(一)業(yè)務(wù)分發(fā)采用固定分發(fā)模塊模式參見圖1,業(yè)務(wù)分發(fā)采用固定分發(fā)模塊式,即分發(fā)模塊向多個處理模塊分發(fā)業(yè)務(wù),本發(fā)明所提供的處理業(yè)務(wù)的系統(tǒng)包括分發(fā)模塊、至少兩個處理模塊,其中分發(fā)模塊,用于保存各業(yè)務(wù)組分配的處理模塊的標識,根據(jù)業(yè)務(wù)特征關(guān)鍵字執(zhí)行散列算法得到散列值,以大于處理模塊個數(shù)的值M為模,對所述散列值取余,將業(yè)務(wù)散列為M個業(yè)務(wù)組,并分發(fā)給M個業(yè)務(wù)組對應(yīng)的處理模塊,并可通過改變業(yè)務(wù)組對應(yīng)的處理模塊來動態(tài)調(diào)整業(yè)務(wù)負荷。
處理模塊,用于接收業(yè)務(wù)并進行處理。
上述分發(fā)模塊對散列值取余所得的余數(shù)可以與業(yè)務(wù)組的標號相同或一一對應(yīng)。所述M取值必須大于實際的處理模塊的個數(shù),M取值越大,負荷越均衡,其中,當(dāng)M值為小于等于實際處理模塊個數(shù)的所有數(shù)的最小公倍數(shù)時,M相對較大又使各個模塊上分配的業(yè)務(wù)組相等,負荷非常均衡。例如,實際有7個處理模塊,M取值可為1、2、3、4、5、6、7的最小公倍數(shù)420。
可以通過業(yè)務(wù)分發(fā)表的方式來建立和維護業(yè)務(wù)組與處理模塊的對應(yīng)關(guān)系。業(yè)務(wù)分發(fā)表由M個業(yè)務(wù)組組成,在初始化時可以輪流填充每個業(yè)務(wù)組對應(yīng)處理模塊的標識,以保證負荷分擔(dān)盡量均衡。
為了在改變業(yè)務(wù)組對應(yīng)的處理模塊時,不使原處理模塊上已經(jīng)建立的業(yè)務(wù)中斷,每個業(yè)務(wù)組還可以分配一個從處理模塊,將原來的處理模塊作為從處理模塊,處理該模塊上已經(jīng)建立的業(yè)務(wù)。為了避免業(yè)務(wù)的過多轉(zhuǎn)發(fā),在初始化時將從處理模塊初始化為空。
為了保持業(yè)務(wù)分發(fā)表初始化時的狀態(tài),避免在經(jīng)過了較長時間后,過多的信令業(yè)務(wù)進行不必要的轉(zhuǎn)發(fā),浪費系統(tǒng)資源,業(yè)務(wù)分發(fā)表還可以包括有效時限(Time to Live,TTL),如圖1所示。
該業(yè)務(wù)分發(fā)表共有M個業(yè)務(wù)組,對每個業(yè)務(wù)組,業(yè)務(wù)分發(fā)表包括主、從處理模塊的標識以及從處理模塊的TTL值三個屬性。主處理模塊屬性非空,表示對應(yīng)業(yè)務(wù)組的處理模塊。從處理模塊在TTL非0的時候可以非空,表示在某段時間,該組的某些信令業(yè)務(wù)仍然是由從處理模塊處理的。例如,當(dāng)設(shè)置從處理模塊時,對應(yīng)TTL值設(shè)置為64,TTL值從64往下計數(shù),后續(xù)每隔一個固定時間TTL值遞減一,當(dāng)TTL值為0時,清除對應(yīng)組的從處理模塊。當(dāng)然,TTL值也可根據(jù)實際業(yè)務(wù)的處理時間及各個從處理模塊的具體負荷能力來設(shè)置,以保證原有以建立的業(yè)務(wù)處理完畢而又避免后續(xù)業(yè)務(wù)的不必要轉(zhuǎn)發(fā)。初始化時該值設(shè)置為0。
分發(fā)模塊的分發(fā)規(guī)則為根據(jù)各業(yè)務(wù)的特征關(guān)鍵字,比如移動用戶識別碼(Mobile Station Identification,MSID)、國際移動用戶識別碼(InternationalMobile Station Identification,IMSI)或電子串號(Electronic Serial Number,ESN),執(zhí)行散列算法得到唯一的散列值,以大于處理模塊個數(shù)的值M為模,對所述散列值取余,將信令業(yè)務(wù)散列為M組,并把信令業(yè)務(wù)分發(fā)給業(yè)務(wù)分發(fā)表中記錄的對應(yīng)業(yè)務(wù)組的主處理模塊。
每個處理模塊內(nèi)部還可保存一個從處理模塊記錄表,以避免轉(zhuǎn)發(fā)時需要從分發(fā)模塊獲得從處理模塊地址,給分發(fā)模塊增加不必要的負荷。該表記錄有每個業(yè)務(wù)組對應(yīng)的從處理模塊,對每個處理模塊的從處理模塊記錄表,該表中記錄的業(yè)務(wù)組分配的處理模塊的標識與業(yè)務(wù)分發(fā)表中該處理模塊所對應(yīng)的所有業(yè)務(wù)組的從處理模塊標識相同。例如,當(dāng)某個處理模塊故障或被隔離時,分發(fā)模塊改變業(yè)務(wù)分發(fā)表后,立即通知處理模塊改變從處理模塊記錄表,即可實現(xiàn)二者同步。
處理模塊對接收到信令業(yè)務(wù)的處理規(guī)則為判斷如果是初始信令業(yè)務(wù),則創(chuàng)建業(yè)務(wù)實例并處理信令業(yè)務(wù),否則,從已經(jīng)創(chuàng)建的業(yè)務(wù)實例中根據(jù)關(guān)鍵字查找,如果存在對應(yīng)的業(yè)務(wù)實例,則處理信令,否則,執(zhí)行散列算法得到對應(yīng)的業(yè)務(wù)組,查找從處理模塊記錄表中對應(yīng)的記錄,如果為空或是自身,則丟棄該信令,否則,轉(zhuǎn)發(fā)信令給對應(yīng)的從處理模塊。
為了方便起見,每個處理模塊也可保存和維護一個業(yè)務(wù)分發(fā)表,即每個模塊中的表都是相同的。
以上為本發(fā)明所提供的系統(tǒng)的描述,下面結(jié)合附圖,對在業(yè)務(wù)分發(fā)采用固定分發(fā)模塊模式的情況下,本發(fā)明所提供的方法進行詳細描述實施例一、參見圖2,實現(xiàn)本發(fā)明需要以下步驟步驟200分發(fā)模塊創(chuàng)建業(yè)務(wù)分發(fā)表并進行初始化假設(shè)有7個處理模塊,令M等于420,把各處理模塊的標識如地址作為編號輪流填寫到主處理模塊屬性中,以保證各處理模塊在業(yè)務(wù)分發(fā)表的主處理模塊標識中出現(xiàn)的次數(shù)大致相同;從處理模塊標識初始化為空,TTL值初始化為0。各處理模塊初始化從處理模塊記錄表令M等于420,從處理模塊屬性初始化為空。
步驟201分發(fā)模塊根據(jù)各信令業(yè)務(wù)中的MSID,執(zhí)行設(shè)定的散列算法得到唯一的散列值,并按M模取余,將信令業(yè)務(wù)散列為M個組,M等于420,并把信令業(yè)分發(fā)給業(yè)務(wù)分發(fā)表中記錄的對應(yīng)業(yè)務(wù)組的主處理模塊。
步驟202處理模塊接收信令業(yè)務(wù)。
步驟203處理模塊判斷是否為初始信令業(yè)務(wù),如果是,則執(zhí)行步驟211;如果否,則執(zhí)行步驟204。
步驟204各處理模塊從已經(jīng)創(chuàng)建的業(yè)務(wù)實例中根據(jù)MSID查找。
步驟205判斷是否存在對應(yīng)的業(yè)務(wù)實例,如果是,則執(zhí)行步驟210;否則,執(zhí)行步驟206。
步驟206執(zhí)行散列算法得到對應(yīng)的業(yè)務(wù)組。
步驟207判斷對應(yīng)業(yè)務(wù)組從處理模塊屬性是否為空或是自身,如果是,則執(zhí)行步驟209;如果否,則執(zhí)行步驟208。
步驟208轉(zhuǎn)發(fā)信令業(yè)務(wù)給對應(yīng)的從處理模塊。
步驟209處理模塊將該信令丟棄。
步驟210處理模塊對該信令進行處理。
步驟211處理模塊創(chuàng)建業(yè)務(wù)實例,并處理該初始信令。
上述步驟202~步驟211為處理模塊處理業(yè)務(wù)的過程。
在步驟200中,將業(yè)務(wù)分發(fā)表及從處理模塊記錄表中的從處理模塊初始化為空,避免了信令業(yè)務(wù)的二次轉(zhuǎn)發(fā),節(jié)約了資源,提高了系統(tǒng)效率。
步驟201中所述的特征關(guān)鍵字MSID也可以是IMSI或ESN。
如果不設(shè)置從處理模塊,則初始化時只需初始化業(yè)務(wù)分發(fā)表中的處理模塊即可。
實施例二、當(dāng)某處理模塊發(fā)生故障時,如圖3所示,假設(shè)處理模塊F發(fā)生故障,實現(xiàn)本發(fā)明需要以下步驟步驟301分發(fā)模塊計算非故障處理模塊應(yīng)該處理的業(yè)務(wù)組的個數(shù)K。設(shè)有N個非故障處理模塊,分發(fā)模塊初始化時是按輪流循環(huán)的方式將各個處理模塊地址填入業(yè)務(wù)分發(fā)表的主處理模塊中,則前面M%N個處理模塊應(yīng)處理M/N+1個業(yè)務(wù)組,后面的處理模塊應(yīng)處理M/N個業(yè)務(wù)組。
步驟302分發(fā)模塊判斷非故障處理模塊的個數(shù)N是否大于0,如果是,則執(zhí)行步驟303;如果否,則執(zhí)行步驟309。
步驟303設(shè)D為下一個非故障處理模塊,判斷D在業(yè)務(wù)分發(fā)表中作為主處理模塊的次數(shù)是否大于等于其應(yīng)該處理的業(yè)務(wù)組的個數(shù)K,如果是,執(zhí)行步驟308;如果否,執(zhí)行步驟304。
步驟304判斷是否存在主處理模塊為F且從處理模塊為D的業(yè)務(wù)組,如果是,執(zhí)行步驟307;如果否,執(zhí)行步驟305。
步驟305判斷是否存在主處理模塊為F且從處理模塊為空的業(yè)務(wù)組,如果是,執(zhí)行步驟307;如果否,執(zhí)行步驟306。
步驟306判斷是否存在主處理模塊為F的業(yè)務(wù)組,如果是,執(zhí)行步驟307;否則,執(zhí)行步驟308。
步驟307對選取的業(yè)務(wù)組進行操作置業(yè)務(wù)組的主處理模塊為該非故障處理模塊D,從處理模塊為空,TTL值為0;并通知D改變其從處理模塊記錄表中對應(yīng)業(yè)務(wù)組的從處理模塊屬性為空;然后執(zhí)行步驟303。
步驟308N遞減一,并執(zhí)行步驟301。
步驟309分發(fā)模塊分發(fā)信令業(yè)務(wù)。分發(fā)模塊根據(jù)各信令業(yè)務(wù)的特征關(guān)鍵字,如MSID、IMSI、ESN等,執(zhí)行預(yù)設(shè)的散列算法得到唯一的散列值,并按M模取余,將信令業(yè)務(wù)散列為M個組,并把信令業(yè)分發(fā)給業(yè)務(wù)分發(fā)表對應(yīng)業(yè)務(wù)組的主處理模塊。
步驟310處理模塊處理信令業(yè)務(wù)。處理模塊接收信令業(yè)務(wù)并判斷是否是初始信令業(yè)務(wù),如果是,則創(chuàng)建業(yè)務(wù)實例并處理該初始信令業(yè)務(wù);如果否,則從已經(jīng)創(chuàng)建的業(yè)務(wù)實例中根據(jù)特征關(guān)鍵字進行查找,如果找到對應(yīng)的業(yè)務(wù)實例,則對該信令業(yè)務(wù)進行處理;否則,執(zhí)行設(shè)定的散列算法得到對應(yīng)的業(yè)務(wù)組,查找從處理模塊記錄表中對應(yīng)的記錄,如果非空或不是自身,則轉(zhuǎn)發(fā)該信令業(yè)務(wù)給對應(yīng)的從處理模塊;否則丟棄該信令。
步驟302~步驟308為分發(fā)模塊改變業(yè)務(wù)分發(fā)表,處理模塊調(diào)整從處理模塊記錄表的過程。在步驟307中將處理模塊F對應(yīng)的業(yè)務(wù)調(diào)整到其它非故障處理模塊上,這些信令業(yè)務(wù)得以繼續(xù)處理。
上述步驟304至步驟306為從處理模塊F的處理模塊中按優(yōu)先級選取業(yè)務(wù)組的過程,這樣對業(yè)務(wù)分發(fā)表的所做的調(diào)整最小,同時不至于使某個模塊上的負荷陡增,保持負荷均衡,從而實現(xiàn)負荷的動態(tài)調(diào)整。
從步驟308和步驟309可以看出,所述的分發(fā)模塊分發(fā)信令業(yè)務(wù)和處理模塊處理信令業(yè)務(wù)的步驟與實施例一中的步驟相同,與實施例一的不同之處在于,需要在分發(fā)前對業(yè)務(wù)分發(fā)表及從處理模塊記錄表進行改變。
實施例三、當(dāng)用戶維護處理模塊,某處理模塊被隔離時,參見圖4,設(shè)處理模塊F被隔離,下面描述改變業(yè)務(wù)分發(fā)表及從處理模塊記錄表的具體步驟。
步驟401分發(fā)模塊計算未被隔離處理模塊應(yīng)該處理的業(yè)務(wù)組的個數(shù)K。設(shè)有N個未被隔離的處理模塊,分發(fā)模塊初始化時是按輪流循環(huán)的方式將各處理模塊ID填入業(yè)務(wù)分發(fā)表的主處理模塊屬性中,則前面M%N個處理模塊應(yīng)處理M/N+1個業(yè)務(wù)組,后面的處理模塊應(yīng)處理M/N個業(yè)務(wù)組。
步驟402分發(fā)模塊判斷非故障處理模塊的個數(shù)N是否大于0,如果是,執(zhí)行步驟403;如果否,結(jié)束循環(huán)。
步驟403設(shè)D為下一個未被隔離的處理模塊,判斷D在業(yè)務(wù)分發(fā)表中作為主處理模塊的次數(shù)是否大于等于其應(yīng)該處理的業(yè)務(wù)組的個數(shù)K,如果是,執(zhí)行步驟408;如果否,執(zhí)行步驟404。
步驟404判斷是否存在主處理模塊為F且從處理模塊為D的業(yè)務(wù)組,如果是,執(zhí)行步驟407;如果否,執(zhí)行步驟405。
步驟405判斷是否存在主處理模塊為F且從處理模塊為空的業(yè)務(wù)組,如果是,執(zhí)行步驟407;如果否,執(zhí)行步驟406。
步驟406判斷是否存在主處理模塊為F的業(yè)務(wù)組,如果是,執(zhí)行步驟407;否則,執(zhí)行步驟408。
步驟407對選取的業(yè)務(wù)組進行操作置業(yè)務(wù)組的主處理模塊為該未被隔離處理模塊D,從處理模塊為被隔離處理模塊F的ID,TTL值為預(yù)設(shè)的最大值;并通知D改變其從處理模塊記錄表中對應(yīng)業(yè)務(wù)組的從處理模塊屬性為被隔離處理模塊F的ID;然后執(zhí)行步驟403。
步驟408N遞減一,并執(zhí)行步驟401。
業(yè)務(wù)分發(fā)表及從處理模塊記錄表改變后,分發(fā)模塊將信令業(yè)務(wù)分發(fā)到對應(yīng)的處理模塊并進行處理,如上述實施例二步驟309和步驟310所示,不再詳細描述。
本實施例中,與處理模塊故障時采取的不同措施在于,置選取的業(yè)務(wù)組的從處理模塊為被隔離的處理模塊,TTL為預(yù)設(shè)最大值,使被隔離處理模塊上正在進行的業(yè)務(wù)得到處理。
實施例四、當(dāng)處理模塊取消隔離時的方案。
同實施例二的流程大致相同,下面僅對業(yè)務(wù)分發(fā)表以及從處理模塊記錄表的維護與改變進行描述。
如圖5所示,當(dāng)處理模塊F取消隔離時,需要采取以下步驟步驟501當(dāng)分發(fā)模塊檢測到處理模塊F取消隔離的請求后,首先計算加入取消隔離的處理模塊后每個處理模塊應(yīng)該處理的業(yè)務(wù)組的個數(shù)設(shè)加入F后處理模塊的個數(shù)為N,第N個處理模塊應(yīng)該處理的業(yè)務(wù)組的個數(shù)為K,則其中M%N個處理模塊應(yīng)該處理M/N+1個業(yè)務(wù)組,其它的處理模塊應(yīng)該處理M/N個業(yè)務(wù)組,這個可以用統(tǒng)計的方法獲得。
步驟502判斷N是否大于0,如果是,則執(zhí)行步驟503;如果否,則結(jié)束循環(huán)。
步驟503設(shè)D為下一個原來的處理模塊,判斷D在業(yè)務(wù)分發(fā)表的處理模塊屬性中出現(xiàn)的次數(shù)是否小于等于K,如果是,執(zhí)行步驟508;否則,執(zhí)行步驟504。
步驟504判斷是否存在主處理模塊D且從處理模塊為F的業(yè)務(wù)組,如果是,執(zhí)行步驟507;否則,執(zhí)行步驟505。
步驟505判斷是否存在主處理模塊為D且從處理模塊為空的業(yè)務(wù)組,如果是,執(zhí)行步驟507;否則,執(zhí)行步驟506。
步驟506判斷是否存在出來模塊為D的業(yè)務(wù)組,如果是,執(zhí)行步驟507;否則,執(zhí)行步驟508。
步驟507對選取的業(yè)務(wù)組進行操作置其從處理模塊為當(dāng)前主處理模塊,設(shè)為MD,置其主處理模塊為F,TTL值置為最大值;通知MD改變其從處理模塊記錄表中對應(yīng)業(yè)務(wù)組的從處理模塊屬性為空,通知F改變其從處理模塊記錄表中對應(yīng)業(yè)務(wù)組的從處理模塊為MD;然后執(zhí)行步驟503。
步驟508N遞減一,并執(zhí)行步驟501。
實施例五、當(dāng)系統(tǒng)需要擴展,有新的處理模塊需要增加時的方案,如圖6所示,需要采取以下步驟步驟601當(dāng)分發(fā)模塊檢測到新的處理模塊G的添加請求后,首先計算加入新的處理模塊G后每個處理模塊應(yīng)該處理的業(yè)務(wù)組的個數(shù)設(shè)加入G后處理模塊的個數(shù)為N,第N個處理模塊應(yīng)該處理的業(yè)務(wù)組的個數(shù)為K,為了保證均衡,在初始化時仍輪流將各處理模塊填寫到業(yè)務(wù)分發(fā)表中的主處理模塊屬性中,前面的M%N個處理模塊應(yīng)該處理M/N+1個業(yè)務(wù)組,其它的處理模塊應(yīng)該處理M/N個業(yè)務(wù)組。
步驟602判斷N是否大于0,如果是,執(zhí)行步驟603;否則,結(jié)束循環(huán)。
步驟603設(shè)D為下一個原來的處理模塊,判斷D在業(yè)務(wù)分發(fā)表的主處理模塊屬性中出現(xiàn)的次數(shù)是否小于等于K,如果是,執(zhí)行步驟607;否則,執(zhí)行步驟604。
步驟604判斷是否存在主處理模塊為D且從處理模塊為空的業(yè)務(wù)組,如果是,則執(zhí)行步驟606;否則,執(zhí)行步驟605。
步驟605判斷是否存在主處理模塊為D的業(yè)務(wù)組,如果是,執(zhí)行步驟606;否則,執(zhí)行步驟607。
步驟606對選取的業(yè)務(wù)組進行操作置其從處理模塊為當(dāng)前主處理模塊,設(shè)為MD,置其主處理模塊為G,TTL值置為最大值;通知MD改變其從處理模塊記錄表中對應(yīng)業(yè)務(wù)組的從處理模塊屬性為空,通知G改變其從處理模塊記錄表中對應(yīng)業(yè)務(wù)組的從處理模塊為MD;然后執(zhí)行步驟603。
步驟607N遞減一,并執(zhí)行步驟601。
與上述兩實施例相同,當(dāng)檢測到處理模塊脫離或加入時,分發(fā)模塊完成對業(yè)務(wù)分發(fā)表的改變,相應(yīng)的處理模塊完成對從處理模塊記錄表的改變后,分發(fā)模塊即可根據(jù)業(yè)務(wù)分發(fā)表來分發(fā)信令業(yè)務(wù),處理模塊對接收到的信令業(yè)務(wù)進行處理,從而完成整個分布式系統(tǒng)的業(yè)務(wù)處理。整個過程中保證了負荷的均衡,且這種動態(tài)調(diào)整不會對業(yè)務(wù)產(chǎn)生影響,保證系統(tǒng)的可靠性和處理效率,便于維護和擴充系統(tǒng)容量。
當(dāng)然,如果處理模塊中沒有從處理模塊記錄表,則只需調(diào)整分發(fā)模塊中業(yè)務(wù)分發(fā)表的相應(yīng)業(yè)務(wù)組的主處理模塊屬性值。在處理模塊需要轉(zhuǎn)發(fā)信令業(yè)務(wù)時,從分發(fā)模塊中獲得相應(yīng)的業(yè)務(wù)地址。
如果從處理模塊中保存的也為主從結(jié)構(gòu)業(yè)務(wù)分發(fā)表,在分發(fā)模塊中的主從結(jié)構(gòu)業(yè)務(wù)分發(fā)表改變后,同步給各處理模塊即可。
以上為分發(fā)業(yè)務(wù)采用固定分發(fā)模塊模式時業(yè)務(wù)分發(fā)的具體描述,下面對分發(fā)業(yè)務(wù)采用全分布式模式時本發(fā)明所提供的系統(tǒng)和方法進行詳細描述。
(二)業(yè)務(wù)分發(fā)采用全分布式結(jié)構(gòu)本發(fā)明的業(yè)務(wù)分發(fā)也可采用全分布式結(jié)構(gòu),系統(tǒng)不設(shè)置專門的分發(fā)模塊,只有處理模塊,分發(fā)模塊的功能由各個處理模塊來完成,各個處理模塊內(nèi)部都保存和維護有一個業(yè)務(wù)分發(fā)表,該表與系統(tǒng)一中的業(yè)務(wù)分發(fā)表結(jié)構(gòu)相同,對每個業(yè)務(wù)組,也可以擴展從處理模塊及TTL。
該系統(tǒng)的分發(fā)規(guī)則為根據(jù)業(yè)務(wù)特征關(guān)鍵字執(zhí)行散列算法得到散列值,以大于處理模塊個數(shù)的值M為模,對所述散列值取余,將業(yè)務(wù)散列為M個業(yè)務(wù)組,并將所述業(yè)務(wù)組分發(fā)到各組分配的處理模塊處理。
在建立業(yè)務(wù)分發(fā)表的基礎(chǔ)上,將信令業(yè)務(wù)散列到業(yè)務(wù)分發(fā)表中對應(yīng)的M個業(yè)務(wù)組,所述分發(fā)模塊對散列值取余所得的余數(shù)可以與業(yè)務(wù)分發(fā)表中業(yè)務(wù)組的標號相同或一一對應(yīng)。M取值必須大于實際的處理模塊的個數(shù),M取值越大,負荷越均衡,其中,當(dāng)M值為小于等于實際處理模塊個數(shù)的所有數(shù)的最小公倍數(shù)時,M相對較大又使各個模塊上分配的業(yè)務(wù)組相等,負荷非常均衡。
若沒有設(shè)置從處理模塊,則把信令業(yè)務(wù)分發(fā)給業(yè)務(wù)分發(fā)表中各業(yè)務(wù)組對應(yīng)的處理模塊并由該模塊處理。
若設(shè)有從處理模塊,判斷如果該業(yè)務(wù)組的從處理模塊是自身,則直接處理該信令。對從處理模塊不是自身的信令業(yè)務(wù),如果該業(yè)務(wù)組的主處理模塊也不是自身,則把信令業(yè)務(wù)分發(fā)給業(yè)務(wù)分發(fā)表中記錄的對應(yīng)組的主處理模塊;若該業(yè)務(wù)組的主處理模塊是自身,對初始信令,創(chuàng)建業(yè)務(wù)實例并直接處理之;對其它信令,如果能夠找到對應(yīng)的業(yè)務(wù)實例,則直接處理,否則轉(zhuǎn)發(fā)給其它從處理模塊。
各個處理模塊還用于維護業(yè)務(wù)分發(fā)表,例如當(dāng)某模塊發(fā)生故障或被隔離等異常情況下,該模塊首先修改其內(nèi)部的業(yè)務(wù)分發(fā)表,并廣播通知其它處理模塊。
為了節(jié)約資源,并使各個處理模塊內(nèi)部的主從結(jié)構(gòu)業(yè)務(wù)分發(fā)表保持一致,處理模塊的維護功能也可由單獨的某一處理模塊來完成并同步給其它處理模塊。維護模塊的選取可以采用令牌的方式,用于令牌的模塊作為業(yè)務(wù)分發(fā)表的維護模塊。各個處理模塊可以輪流擁有令牌,也可以確定由某一處理模塊擁有令牌,如果擁有該令牌的處理模塊發(fā)生故障,則可以把令牌交給相鄰的處理模塊,也可以采用其它的令牌傳遞規(guī)則,以保持系統(tǒng)的可靠。
當(dāng)然,為了簡便起見,可以由用戶直接指定一個處理模塊承擔(dān)維護業(yè)務(wù)分發(fā)表的功能。當(dāng)該模塊故障時,由用戶指定另外一個處理模塊進行維護,以避免復(fù)雜的令牌轉(zhuǎn)移算法。
以上為本發(fā)明所提供的系統(tǒng)的描述,下面對利用該系統(tǒng)所提供的方法進行詳細描述。
實施例一、處理模塊正常運行時的方案。
如圖7所示,實現(xiàn)本發(fā)明需要以下步驟步驟701處理模塊根據(jù)接收到的各信令的特征關(guān)鍵字執(zhí)行散列算法得到唯一的散列值,并對該值M模取余,將信令業(yè)務(wù)散列為業(yè)務(wù)分發(fā)表中對應(yīng)的M個業(yè)務(wù)組。
步驟702處理模塊在業(yè)務(wù)分發(fā)表中查找,判斷自身是否為對應(yīng)業(yè)務(wù)組的處理模塊,如果是,執(zhí)行步驟703;如果否,執(zhí)行步驟711。
步驟703處理模塊判斷信令業(yè)務(wù)是否為初始信令業(yè)務(wù),如果是,執(zhí)行步驟709;否則,執(zhí)行步驟704。
步驟704處理模塊從已經(jīng)創(chuàng)建的業(yè)務(wù)實例中根據(jù)關(guān)鍵字查找。
步驟705判斷是否存在對應(yīng)的業(yè)務(wù)實例,如果是,執(zhí)行步驟710;否則,執(zhí)行步驟706。
步驟706處理模塊判斷業(yè)務(wù)分發(fā)表中對應(yīng)的從處理模塊屬性是否為空,如果是,執(zhí)行步驟707;否則,執(zhí)行步驟708。
步驟707丟棄該信令業(yè)務(wù)。
步驟708轉(zhuǎn)發(fā)該信令給對應(yīng)的從處理模塊。
步驟709處理模塊創(chuàng)建業(yè)務(wù)實例,并處理該初始信令業(yè)務(wù)。
步驟710對該信令業(yè)務(wù)進行處理。
步驟711判斷信令發(fā)送模塊是否為主處理模塊,如果是,執(zhí)行步驟712;否則,執(zhí)行步驟716。
步驟712根據(jù)業(yè)務(wù)分發(fā)表判斷自身是否為從處理模塊,如果是,執(zhí)行步驟713;否則,執(zhí)行步驟715。
步驟713從已經(jīng)創(chuàng)建的業(yè)務(wù)實例中根據(jù)特征關(guān)鍵字查找,如果存在對應(yīng)的業(yè)務(wù)實例,執(zhí)行步驟714;否則,執(zhí)行步驟715。
步驟714處理該信令業(yè)務(wù)。
步驟715丟棄該信令業(yè)務(wù)。
步驟716轉(zhuǎn)發(fā)信令給對應(yīng)的業(yè)務(wù)實例。
系統(tǒng)開始工作前同樣需要對業(yè)務(wù)分發(fā)表初始化,與系統(tǒng)一相同,不再詳細描述。
實施例二、當(dāng)處理模塊發(fā)生故障時,首先由功能維護模塊負責(zé)處理模塊維護業(yè)務(wù)分發(fā)表,然后處理模塊按照改變后的業(yè)務(wù)分發(fā)表分發(fā)信令業(yè)務(wù)和處理信令業(yè)務(wù)。處理模塊進行信令的分發(fā)與業(yè)務(wù)的處理與實施例一流程相同,以下僅就功能維護模塊改變業(yè)務(wù)分發(fā)表的操作進行詳細描述,參見圖8。
步驟801功能維護模塊檢測到處理模塊F發(fā)生故障,首先計算非故障處理模塊應(yīng)該處理的業(yè)務(wù)組的個數(shù)設(shè)非故障處理模塊的個數(shù)為N,第N個處理模塊應(yīng)該處理的業(yè)務(wù)組的個數(shù)為K,則其中M%N個處理模塊應(yīng)該處理M/N+1個業(yè)務(wù)組,其它的處理模塊應(yīng)該處理M/N個業(yè)務(wù)組。
步驟802功能維護模塊判斷N是否大于0,如果是,則執(zhí)行步驟803;若N<0,則所有非故障處理模塊在業(yè)務(wù)分發(fā)表中都經(jīng)過調(diào)整,執(zhí)行步驟809。
步驟803為描述方便,設(shè)D為下一個非故障處理模塊,功能維護模塊判斷D在業(yè)務(wù)分發(fā)表中作為主處理模塊的次數(shù)是否大于等于K,如果是,執(zhí)行步驟808;否則執(zhí)行步驟804。
步驟804判斷是否存在主處理模塊為F且從處理模塊為D的業(yè)務(wù)組,如果是,執(zhí)行步驟807;否則,執(zhí)行步驟805。
步驟805判斷是否存在主處理模塊為F且從處理模塊為空的業(yè)務(wù)組,如果是,執(zhí)行步驟807;如果否,執(zhí)行步驟806。
步驟806判斷是否存在主處理模塊F的業(yè)務(wù)組,如果是,執(zhí)行步驟807;否則,執(zhí)行步驟808。
步驟807功能維護模塊對選取的業(yè)務(wù)組進行操作置其主處理模塊為D,從處理模塊屬性為空,TTL值置為0,并執(zhí)行步驟803,以判定D作為主處理模塊屬性的次數(shù)是否不大于應(yīng)該處理的業(yè)務(wù)組的個數(shù),保持負荷均衡。
步驟808N遞減一,將非故障處理模塊已改變過的及不需要改變的排除在外,并執(zhí)行步驟801。
步驟809功能維護模塊將改變同步給其它所有的處理模塊。
業(yè)務(wù)分發(fā)表改變完畢后,處理模塊按照改變后的業(yè)務(wù)分發(fā)表來分發(fā)信令業(yè)務(wù)并進行相應(yīng)處理,步驟與正常工作情況下的流程相同,不再詳細描述。
實施例三、當(dāng)處理模塊被隔離時,首先由功能維護模塊負改變業(yè)務(wù)分發(fā)表,然后處理模塊按照改變后的業(yè)務(wù)分發(fā)表來分發(fā)信令業(yè)務(wù)和處理信令業(yè)務(wù)。處理模塊進行信令的分發(fā)與業(yè)務(wù)的處理與實施例一流程相同,以下僅就功能維護模塊改變業(yè)務(wù)分發(fā)表的操作進行詳細描述,參見圖9。
步驟901功能維護模塊檢測到處理模塊F被隔離,首先計算未被隔離的處理模塊應(yīng)該處理的業(yè)務(wù)組的個數(shù)設(shè)未被隔離的處理模塊的個數(shù)為N,第N個處理模塊應(yīng)該處理的業(yè)務(wù)組的個數(shù)為K,初始化時仍按循環(huán)輪流方式將各處理模塊地址填入各業(yè)務(wù)組對應(yīng)的主處理模塊中,則前面M%N個處理模塊應(yīng)該處理M/N+1個業(yè)務(wù)組,后面的處理模塊應(yīng)該處理M/N個業(yè)務(wù)組。
步驟902功能維護模塊判斷N是否大于0,如果是,則執(zhí)行步驟903;若N<0,則所有非故障處理模塊在業(yè)務(wù)分發(fā)表中都經(jīng)過調(diào)整,執(zhí)行步驟909。
步驟903為描述方便,設(shè)D為下一個未被隔離的處理模塊,功能維護模塊判斷D在業(yè)務(wù)分發(fā)表中作為主處理模塊的次數(shù)是否大于等于K,如果是,執(zhí)行步驟908;否則執(zhí)行步驟904。
步驟904判斷是否存在主處理模塊為F且從處理模塊為D的業(yè)務(wù)組,如果是,執(zhí)行步驟907;否則,執(zhí)行步驟905。
步驟905判斷是否存在主處理模塊為F且從處理模塊為空的業(yè)務(wù)組,如果是,執(zhí)行步驟907;如果否,執(zhí)行步驟906。
步驟906判斷是否存在主處理模塊F的業(yè)務(wù)組,如果是,執(zhí)行步驟907;否則,執(zhí)行步驟908。
步驟907功能維護模塊對選取的業(yè)務(wù)組進行操作置其主處理模塊為D,從處理模塊屬性為被隔離處理F,TTL值置為預(yù)設(shè)最大值,并執(zhí)行步驟903,以判定D作為主處理模塊屬性的次數(shù)是否不大于應(yīng)該處理的業(yè)務(wù)組的個數(shù),保持負荷均衡。
步驟908N遞減一,將未被隔離的處理模塊已改變過的及不需要改變的排除在外,并執(zhí)行步驟901。
步驟909功能維護模塊將改變同步給其它所有的處理模塊。
在本實施例中,將所選取業(yè)務(wù)組的從處理模塊屬性值設(shè)置為被隔離的處理模塊,將TTL至為預(yù)設(shè)最大值,從而使得被隔離處理模塊上正在進行的業(yè)務(wù)不會因為業(yè)務(wù)分發(fā)表的改變而中斷,使業(yè)務(wù)最大限度地不受影響。
業(yè)務(wù)分發(fā)表改變完畢后,處理模塊按照改變后的業(yè)務(wù)分發(fā)表分發(fā)信令業(yè)務(wù)并進行相應(yīng)處理,步驟與正常工作情況下的流程相同,不再詳細描述。
實施例四、當(dāng)處理模塊隔離取消時的方案。
參照圖10,功能維護模塊仍然采取類似的步驟,以下僅描述業(yè)務(wù)分發(fā)表的改變過程。
步驟1001當(dāng)功能維護模塊檢測到有被隔離的處理模塊需要取消隔離時,首先計算加入取消隔離的處理模塊后每個處理模塊應(yīng)該處理的業(yè)務(wù)組的個數(shù)設(shè)取消隔離的處理模塊為F,N為加入F后處理模塊的個數(shù),第N個處理模塊應(yīng)該處理的業(yè)務(wù)組的個數(shù)為K,初始化時輪流將各個處理模塊填入業(yè)務(wù)分發(fā)表中各業(yè)務(wù)組對應(yīng)的主處理模塊中,則前面的M%N個處理模塊應(yīng)該處理M/N+1個業(yè)務(wù)組,其它的處理模塊應(yīng)該處理M/N個業(yè)務(wù)組。
步驟1002功能維護模塊判斷N是否大于0,如果是,執(zhí)行步驟1003,如果否,執(zhí)行步驟1009。
步驟1003設(shè)D下一個為原來的處理模塊,功能維護模塊比較D在業(yè)務(wù)分發(fā)表的主處理模塊屬性中出現(xiàn)的次數(shù)是否小于等于K,如果是,則N遞減一,并執(zhí)行步驟1001;否則,執(zhí)行步驟1004。
步驟1004查找主處理模塊D且從處理模塊為F的業(yè)務(wù)組,如果存在,執(zhí)行步驟1007;否則,執(zhí)行步驟1005。
步驟1005查找主處理模塊為D且從處理模塊為空的業(yè)務(wù)組,如果存在,執(zhí)行步驟1007;否則,執(zhí)行步驟1006。
步驟1006查找主處理模塊為D的業(yè)務(wù)組,如果存在,執(zhí)行步驟1007;否則,執(zhí)行步驟1008。
步驟1007對查找到的業(yè)務(wù)組進行操作置其從處理模塊為當(dāng)前主處理模塊,置其主處理模塊為F,TTL值設(shè)置為預(yù)設(shè)的最大值,并執(zhí)行步驟1003。
步驟1008N遞減一,并執(zhí)行步驟1001。
步驟1009同步業(yè)務(wù)分發(fā)表給其它的處理模塊。
實施例五、當(dāng)有新的處理模塊增加時,功能維護模塊與上述實施例四中所采取的措施大致相同,如圖11所示,增加新的處理模塊G,功能維護模塊首先要改變業(yè)務(wù)分發(fā)表中的對應(yīng)業(yè)務(wù)組,業(yè)務(wù)分發(fā)表改變完畢后,處理模塊進行信令業(yè)務(wù)的分發(fā)及處理,下面僅對業(yè)務(wù)分發(fā)表的改變流程進行詳細描述。
步驟1101當(dāng)功能維護模塊檢測到有新的處理模塊G增加時,首先計算加入G后每個處理模塊(包括功能維護模塊自身)應(yīng)該處理的業(yè)務(wù)組的個數(shù)K設(shè)加入G后共有N個處理模塊,業(yè)務(wù)分發(fā)表輪流將處理模塊填入對應(yīng)業(yè)務(wù)組的主處理模塊屬性中,則前面M%N個處理模塊應(yīng)該處理M/N+1個業(yè)務(wù)組,其它的處理模塊應(yīng)該處理M/N個業(yè)務(wù)組。
步驟1102功能維護模塊判斷N是否大于0,如果是,執(zhí)行步驟1103,如果否,執(zhí)行步驟1108。
步驟1103設(shè)D下一個為原來的處理模塊,功能維護模塊比較D在業(yè)務(wù)分發(fā)表的主處理模塊屬性中出現(xiàn)的次數(shù)是否小于等于K,如果是,執(zhí)行步驟1107;否則,執(zhí)行步驟1104。
步驟1104功能維護模塊從業(yè)務(wù)分發(fā)表中查找,如果存在主處理模塊屬性值D且從處理模塊屬性為空的業(yè)務(wù)組,則執(zhí)行步驟1106;否則,執(zhí)行步驟1105。
步驟1105功能維護模塊繼續(xù)在業(yè)務(wù)分發(fā)表中查找主處理模塊屬性值為D的業(yè)務(wù)組,如果存在,則執(zhí)行步驟1106;否則,執(zhí)行步驟1107。
步驟1106對選取的業(yè)務(wù)組進行操作置其從處理模塊屬性為當(dāng)前主處理模塊,置其主處理模塊屬性值為G,TTL值設(shè)置為設(shè)定的最大值,并執(zhí)行步驟1103,以確保負荷均衡。
步驟1107N遞減一,并執(zhí)行步驟1101,對下一個原來的處理模塊進行處理。
步驟1108功能維護模塊將業(yè)務(wù)分發(fā)表同步給其它所有的處理模塊,并按正常流程進行信令業(yè)務(wù)的分發(fā)和處理。
當(dāng)本發(fā)明的功能維護模塊,即業(yè)務(wù)分發(fā)表維護模塊故障時,用戶可從剩余的處理模塊中指定一個新的業(yè)務(wù)分發(fā)表維護模塊。
以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明。例如,分發(fā)模塊可以選取任意一個原來的處理模塊,而不必對該處理模塊應(yīng)該處理的業(yè)務(wù)組數(shù)進行計算及將計算值與該處理模塊作為主處理模塊的次數(shù)進行比較,也不需要考慮其處理模塊的具體情況。事實上,在對原來的處理模塊所對應(yīng)的業(yè)務(wù)組進行選擇時,從處理模塊屬性值可能為該負荷值較小的處理模塊、為空或其它的處理模塊,可以按照上述實施例中的順序選擇,也可以僅考慮其中任意一種或多種可能。對增加新的處理模塊時,則只需在從處理模塊為空或其它的處理模塊兩種可能的業(yè)務(wù)組中任意選取。
凡在本發(fā)明的精神和原則之內(nèi),所作的任何改變、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。
權(quán)利要求
1.一種分布式系統(tǒng)業(yè)務(wù)分發(fā)的方法,其特征在于,該方法包括步驟1)根據(jù)業(yè)務(wù)特征關(guān)鍵字執(zhí)行散列算法得到散列值,以大于處理模塊個數(shù)的值M為模,對所述散列值取余,將業(yè)務(wù)散列為M個業(yè)務(wù)組;2)將所述業(yè)務(wù)組分發(fā)到各組分配的處理模塊處理。
2.如權(quán)利要求1所述的分布式系統(tǒng)業(yè)務(wù)分發(fā)的方法,其特征在于,步驟2)所述的處理模塊處理業(yè)務(wù)的步驟具體為a1)處理模塊判斷接收到的業(yè)務(wù)是否為初始業(yè)務(wù),如果是,則創(chuàng)建業(yè)務(wù)實例并處理業(yè)務(wù);否則,執(zhí)行步驟a2);a2)從已經(jīng)創(chuàng)建的業(yè)務(wù)實例中根據(jù)關(guān)鍵字查找,如果存在對應(yīng)的業(yè)務(wù)實例,則處理業(yè)務(wù)。
3.如權(quán)利要求2所述的分布式系統(tǒng)業(yè)務(wù)分發(fā)的方法,其特征在于,處理模塊間進一步建立主從關(guān)系,步驟a2)還包括如果不存在對應(yīng)的業(yè)務(wù)實例,則執(zhí)行散列算法得到對應(yīng)的業(yè)務(wù)組,若所述業(yè)務(wù)組建立了從處理模塊,則轉(zhuǎn)發(fā)業(yè)務(wù)到該從處理模塊處理。
4.如權(quán)利要求3所述的分布式系統(tǒng)業(yè)務(wù)分發(fā)的方法,其特征在于,進一步設(shè)置有效時限限制從處理模塊的存在時間,若有效時限超時,取消對應(yīng)業(yè)務(wù)組的從處理模塊。
5.如權(quán)利要求1至4任一項所述的分布式系統(tǒng)業(yè)務(wù)分發(fā)的方法,其特征在于,若處理模塊發(fā)生故障/被隔離,在步驟2)之前還包括步驟t1)改變對應(yīng)業(yè)務(wù)組分配的處理模塊。
6.如權(quán)利要求5所述的分布式系統(tǒng)業(yè)務(wù)分發(fā)的方法,其特征在于,所述步驟t1)具體為t11)計算某個非故障/被隔離處理模塊當(dāng)前應(yīng)處理的業(yè)務(wù)組數(shù);t12)判斷該處理模塊作為主處理模塊數(shù)是否小于所述業(yè)務(wù)組數(shù),如果是,則選取該模塊用于處理故障/被隔離模塊對應(yīng)的業(yè)務(wù)組。
7.如權(quán)利要求6所述的分布式系統(tǒng)業(yè)務(wù)分發(fā)的方法,其特征在于,選取故障/被隔離處理模塊對應(yīng)業(yè)務(wù)組為當(dāng)前選出的非故障/未被隔離模塊的步驟為b1)如果當(dāng)前故障/被隔離處理模塊所對應(yīng)業(yè)務(wù)組的從處理模塊為當(dāng)前選出的非故障/未被隔離處理模塊,則改變對應(yīng)業(yè)務(wù)組分配的處理模塊為該處理模塊;否則,執(zhí)行步驟b2);b2)如果當(dāng)前故障/被隔離處理模塊所對應(yīng)業(yè)務(wù)組的從處理模塊不存在,則改變對應(yīng)業(yè)務(wù)組分配的處理模塊為該處理模塊;否則,執(zhí)行步驟b3);b3)如果當(dāng)前故障/被隔離處理模塊所對應(yīng)業(yè)務(wù)的從處理模塊為其它非故障/未被隔離的處理模塊,則改變對應(yīng)業(yè)務(wù)組分配的處理模塊為該處理模塊。
8.如權(quán)利要求5所述的分布式系統(tǒng)業(yè)務(wù)分發(fā)的方法,其特征在于,對故障處理模塊,進一步取消其對應(yīng)業(yè)務(wù)組的從處理模塊;對被隔離處理模塊,進一步置其為對應(yīng)業(yè)務(wù)組的從處理模塊。
9.如權(quán)利要求1至4任一項所述的分布式系統(tǒng)業(yè)務(wù)分發(fā)的方法,其特征在于,若處理模塊取消隔離/有新的處理模塊增加,在步驟2)之前還包括步驟t2)分配業(yè)務(wù)組到取消隔離/新增的處理模塊。
10.如權(quán)利要求9所述的分布式系統(tǒng)業(yè)務(wù)分發(fā)的方法,其特征在于,所述步驟t2)具體為t21)計算某個原來的處理模塊當(dāng)前應(yīng)處理的業(yè)務(wù)組數(shù);t22)判斷該處理模塊作為主處理模塊數(shù)是否大于所述業(yè)務(wù)組數(shù),如果是,則選取該模塊所對應(yīng)的業(yè)務(wù)組分配到取消隔離/新增的處理模塊。
11.如權(quán)利要求10所述的分布式系統(tǒng)業(yè)務(wù)分發(fā)的方法,其特征在于,選取某個原來的處理模塊所對應(yīng)的業(yè)務(wù)組分配到取消隔離的處理模塊的步驟為c1)如果當(dāng)前選出的處理模塊所對應(yīng)業(yè)務(wù)組的從處理模塊為取消隔離的處理模塊,則分配對應(yīng)業(yè)務(wù)組到取消隔離的處理模塊;否則,執(zhí)行步驟c2);c2)如果當(dāng)前選出的處理模塊所對應(yīng)業(yè)務(wù)組的從處理模塊不存在,則分配對應(yīng)業(yè)務(wù)組到取消隔離的處理模塊;否則,執(zhí)行步驟c3);c3)如果當(dāng)前選出的處理模塊所對應(yīng)業(yè)務(wù)組的從處理模塊為其它的處理模塊,則分配對應(yīng)業(yè)務(wù)組到取消隔離的處理模塊。
12.如權(quán)利要求10所述的分布式系統(tǒng)業(yè)務(wù)分發(fā)的方法,其特征在于,選取某個原來的處理模塊所對應(yīng)的業(yè)務(wù)組分配到新增加的處理模塊的步驟為d1)如果當(dāng)前選出的處理模塊所對應(yīng)業(yè)務(wù)組的從處理模塊不存在,則分配對應(yīng)業(yè)務(wù)組到新增的處理模塊;否則,執(zhí)行步驟d2);d2)如果當(dāng)前選出的處理模塊所對應(yīng)業(yè)務(wù)組的從處理模塊為其它的處理模塊,則分配對應(yīng)業(yè)務(wù)組到新增的處理模塊。
13.如權(quán)利要求9所述的分布式系統(tǒng)業(yè)務(wù)分發(fā)的方法,其特征在于,進一步置所述業(yè)務(wù)組原來的主處理模塊為該業(yè)務(wù)組的從處理模塊。
14.一種分布式系統(tǒng)業(yè)務(wù)分發(fā)的系統(tǒng),其特征在于,該系統(tǒng)包括分發(fā)模塊、至少兩個處理模塊,其中分發(fā)模塊,用于保存各業(yè)務(wù)組分配的處理模塊的標識,根據(jù)業(yè)務(wù)特征關(guān)鍵字執(zhí)行散列算法得到散列值,以大于處理模塊個數(shù)的值M為模,對所述散列值取余,將業(yè)務(wù)散列為M個業(yè)務(wù)組,將所述業(yè)務(wù)組分發(fā)到各組分配的處理模塊處理。處理模塊,用于處理接收到的業(yè)務(wù)。
15.如權(quán)利要求14所述的分布式系統(tǒng)業(yè)務(wù)分發(fā)的系統(tǒng),其特征在于,所述的分發(fā)模塊還用于建立并保存各業(yè)務(wù)組的處理模塊的主從關(guān)系,主處理模塊將業(yè)務(wù)組轉(zhuǎn)發(fā)到有該業(yè)務(wù)組對應(yīng)業(yè)務(wù)實例的從處理模塊處理。
16.如權(quán)利要求14或15所述的分布式系統(tǒng)業(yè)務(wù)分發(fā)的系統(tǒng),其特征在于,分發(fā)模塊還用于改變對應(yīng)業(yè)務(wù)組分配的處理模塊。
17.一種分布式系統(tǒng)業(yè)務(wù)分發(fā)的系統(tǒng),其特征在于,該系統(tǒng)包括至少兩個處理模塊,各處理模塊保存各業(yè)務(wù)組分配的處理模塊的標識,根據(jù)業(yè)務(wù)特征關(guān)鍵字執(zhí)行散列算法得到散列值,以大于處理模塊個數(shù)的值M為模,對所述散列值取余,將業(yè)務(wù)散列為M個業(yè)務(wù)組,將所述業(yè)務(wù)組分發(fā)到各組分配的處理模塊處理,并對接收到的業(yè)務(wù)進行處理。
18.如權(quán)利要求17所述的分布式系統(tǒng)業(yè)務(wù)分發(fā)的系統(tǒng),其特征在于,所述的處理模塊還用于建立并保存各業(yè)務(wù)組的處理模塊的主從關(guān)系,主處理模塊將業(yè)務(wù)組轉(zhuǎn)發(fā)到有該業(yè)務(wù)組對應(yīng)業(yè)務(wù)實例的從處理模塊處理。
19.如權(quán)利要求17或18所述的分布式系統(tǒng)業(yè)務(wù)分發(fā)的系統(tǒng),其特征在于,系統(tǒng)還包括功能維護模塊,用于改變對應(yīng)業(yè)務(wù)組分配的處理模塊。
全文摘要
本發(fā)明屬于通信技術(shù)領(lǐng)域,公開了分布式系統(tǒng)業(yè)務(wù)分發(fā)的方法和系統(tǒng),利用本發(fā)明所提供的系統(tǒng),采用如下方法1)根據(jù)業(yè)務(wù)特征關(guān)鍵字執(zhí)行散列算法得到散列值,以大于處理模塊個數(shù)的值M為模,對所述散列值取余,將業(yè)務(wù)散列為M個業(yè)務(wù)組;2)將所述業(yè)務(wù)組分發(fā)到各組分配的處理模塊處理。該方案能夠?qū)崿F(xiàn)負荷的動態(tài)調(diào)整,簡便易行,而不會對其它處理模塊上正在進行的業(yè)務(wù)造成影響,也不影響后續(xù)業(yè)務(wù)的進行。
文檔編號H04Q3/00GK1889699SQ200610099299
公開日2007年1月3日 申請日期2006年7月27日 優(yōu)先權(quán)日2006年7月27日
發(fā)明者譚平, 曾智禮 申請人:華為技術(shù)有限公司