本技術(shù)涉及數(shù)據(jù)標(biāo)識(shí),尤其涉及一種分布式id生成方法、服務(wù)端、可讀存儲(chǔ)介質(zhì)及產(chǎn)品。
背景技術(shù):
1、由于在分布式系統(tǒng)中,通常需要對大量的信息進(jìn)行唯一標(biāo)識(shí)。因此通常采用分布式系統(tǒng)中的節(jié)點(diǎn)產(chǎn)生的多個(gè)id(identity?document,身份標(biāo)識(shí))分別對多個(gè)信息進(jìn)行標(biāo)識(shí),為了實(shí)現(xiàn)對多個(gè)信息進(jìn)行唯一標(biāo)識(shí),通常需要使多個(gè)id互不相同,保障id的全局唯一性。
2、常見的生成分布式id的生成算法有多種,例如uuid(universallyuniqueidentifier,通用唯一標(biāo)識(shí)碼)、數(shù)據(jù)庫或其他中間件自增、雪花算法、號(hào)段id等。然而這些常規(guī)的分布式id的生成算法均存在突發(fā)流量時(shí),會(huì)出現(xiàn)id生成速率不足和/或id重復(fù)的問題,導(dǎo)致分布式id的生成質(zhì)量下降。
3、因此,如何實(shí)現(xiàn)在突發(fā)流量時(shí),保障分布式id的生成質(zhì)量是本技術(shù)領(lǐng)域亟待解決的技術(shù)問題。
技術(shù)實(shí)現(xiàn)思路
1、本技術(shù)的主要目的在于提供一種分布式id生成方法、服務(wù)端、可讀存儲(chǔ)介質(zhì)及產(chǎn)品,旨在解決如何實(shí)現(xiàn)在突發(fā)流量時(shí),保障分布式id的生成質(zhì)量的技術(shù)問題。
2、為實(shí)現(xiàn)上述目的,本技術(shù)提供一種分布式id生成方法,所述分布式id生成方法應(yīng)用于于服務(wù)端,所述服務(wù)端設(shè)置有多個(gè)緩存區(qū),各所述緩存區(qū)用于緩存id,所述分布式id生成方法包括以下步驟:
3、接收id生成請求,確定各所述緩存區(qū)中的主緩存區(qū);
4、獲取緩存在所述主緩存區(qū)中的可用id,直至滿足預(yù)設(shè)生成結(jié)束條件后,確定所有獲取到的所述可用id為生成結(jié)果;
5、在所述可用id的獲取過程中,若所述主緩存區(qū)中緩存的可用id的可用數(shù)量小于預(yù)設(shè)可用閾值,則確定各所述緩存區(qū)中的備緩存區(qū),從預(yù)設(shè)數(shù)據(jù)庫中獲取目標(biāo)數(shù)量的id緩存至所述備緩存區(qū);
6、在所述可用id的獲取過程中,若所述主緩存區(qū)中無可用id,則將所述備緩存區(qū)切換為新的主緩存區(qū),基于所述新的主緩存區(qū)中返回執(zhí)行所述獲取緩存在所述主緩存區(qū)中的可用id的步驟。
7、在一種可能的實(shí)施方式中,所述從預(yù)設(shè)數(shù)據(jù)庫中獲取目標(biāo)數(shù)量的id緩存至所述備緩存區(qū)的步驟之前,所述方法還包括:
8、獲取在預(yù)設(shè)時(shí)間窗口內(nèi)接收到的歷史id生成請求的請求數(shù)量,并獲取所述備緩存區(qū)的當(dāng)前窗口尺寸;
9、若所述請求數(shù)量小于第一預(yù)設(shè)流量閾值,則基于所述當(dāng)前窗口尺寸確定目標(biāo)數(shù)量,其中,所述目標(biāo)數(shù)量小于所述當(dāng)前窗口尺寸;
10、若所述請求數(shù)量大于第二預(yù)設(shè)流量閾值,則基于所述當(dāng)前窗口尺寸確定目標(biāo)數(shù)量,其中,所述目標(biāo)數(shù)量大于所述當(dāng)前窗口尺寸,其中,所述第二預(yù)設(shè)流量閾值大于或等于所述第一預(yù)設(shè)流量閾值;
11、將所述備緩存區(qū)的窗口尺寸更新為所述目標(biāo)數(shù)量。
12、在一種可能的實(shí)施方式中,所述確定各所述緩存區(qū)中的主緩存區(qū)的步驟,包括:
13、依據(jù)所述id生成請求獲取業(yè)務(wù)場景,確定各所述緩存區(qū)中屬于所述業(yè)務(wù)場景的緩存區(qū)為目標(biāo)緩存區(qū);
14、確定各所述目標(biāo)緩存區(qū)中的主緩存區(qū)。
15、在一種可能的實(shí)施方式中,所述接收id生成請求的步驟之后,所述方法還包括:
16、獲取所述服務(wù)端的當(dāng)前熔斷狀態(tài),若所述當(dāng)前熔斷狀態(tài)指示開啟熔斷,則返回響應(yīng)異常;
17、若所述當(dāng)前熔斷狀態(tài)指示半開啟熔斷,或者所述當(dāng)前熔斷狀態(tài)指示關(guān)閉熔斷,則繼續(xù)執(zhí)行所述確定各所述目標(biāo)緩存區(qū)中的主緩存區(qū)的步驟。
18、在一種可能的實(shí)施方式中,所述接收id生成請求的步驟之前,所述方法還包括:
19、獲取所述服務(wù)端的熔斷狀態(tài);
20、若所述熔斷狀態(tài)指示關(guān)閉熔斷,則在預(yù)設(shè)時(shí)間窗口內(nèi)的響應(yīng)異常次數(shù)大于第一預(yù)設(shè)失敗閾值后,切換所述服務(wù)端的熔斷狀態(tài)為指示開啟熔斷;
21、若所述熔斷狀態(tài)指示半開啟熔斷,則在預(yù)設(shè)時(shí)間窗口內(nèi)的響應(yīng)異常次數(shù)大于第二預(yù)設(shè)失敗閾值后,切換所述服務(wù)端的熔斷狀態(tài)為指示開啟熔斷,其中,所述第二預(yù)設(shè)失敗閾值小于所述第一預(yù)設(shè)失敗閾值;
22、若所述熔斷狀態(tài)指示開啟熔斷,則等待預(yù)設(shè)時(shí)長后,切換所述服務(wù)端的熔斷狀態(tài)為指示半開啟熔斷。
23、在一種可能的實(shí)施方式中,所述獲取緩存在所述主緩存區(qū)中的可用id的步驟之后,所述方法還包括:
24、在所述可用id的獲取過程中,若所述主緩存區(qū)無可用id,則切換所述主緩存區(qū)為新的備緩存區(qū);
25、所述確定所有獲取到的所述可用id為生成結(jié)果的步驟之后,所述方法還包括:
26、若所述新的所述主緩存區(qū)中緩存的可用id數(shù)量小于所述預(yù)設(shè)可用閾值,則基于所述新的備緩存區(qū)執(zhí)行所述從預(yù)設(shè)數(shù)據(jù)庫中獲取目標(biāo)數(shù)量的id緩存至所述備緩存區(qū)的步驟。
27、在一種可能的實(shí)施方式中,所述id包括遞增序列字段,或者,所述id包括業(yè)務(wù)前綴字段與遞增序列字段,或者所述id包括業(yè)務(wù)前綴字段、遞增序列字段與業(yè)務(wù)后綴字段;
28、其中,不同的業(yè)務(wù)場景,所述業(yè)務(wù)前綴字段和/或所述業(yè)務(wù)后綴字段的字段值不同。
29、此外,為實(shí)現(xiàn)上述目的,本技術(shù)還提供一種服務(wù)端,所述服務(wù)端包括:存儲(chǔ)器、處理器及存儲(chǔ)在所述存儲(chǔ)器上并可在所述處理器上運(yùn)行的計(jì)算機(jī)程序,所述計(jì)算機(jī)程序配置為實(shí)現(xiàn)如上所述的分布式id生成方法的步驟。
30、此外,為實(shí)現(xiàn)上述目的,本技術(shù)還提供一種可讀存儲(chǔ)介質(zhì),所述可讀存儲(chǔ)介質(zhì)為計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)上存儲(chǔ)有實(shí)現(xiàn)分布式id生成方法的程序,所述實(shí)現(xiàn)分布式id生成方法的程序被處理器執(zhí)行以實(shí)現(xiàn)如上所述分布式id生成方法的步驟。
31、本技術(shù)還提供一種計(jì)算機(jī)程序產(chǎn)品,包括計(jì)算機(jī)程序,所述計(jì)算機(jī)程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)如上述的分布式id生成方法的步驟。
32、本技術(shù)提出的一個(gè)或多個(gè)技術(shù)方案,至少具有以下技術(shù)效果:
33、服務(wù)端設(shè)置有多個(gè)緩存區(qū),各所述緩存區(qū)用于緩存id,服務(wù)端接收id生成請求,確定各所述緩存區(qū)中的主緩存區(qū);獲取緩存在所述主緩存區(qū)中的可用id,直至滿足預(yù)設(shè)生成結(jié)束條件后,確定所有獲取到的所述可用id為生成結(jié)果;在所述可用id的獲取過程中,若所述主緩存區(qū)中緩存的可用id的可用數(shù)量小于預(yù)設(shè)可用閾值,則確定各所述緩存區(qū)中的備緩存區(qū),從預(yù)設(shè)數(shù)據(jù)庫中獲取目標(biāo)數(shù)量的id緩存至所述備緩存區(qū);在所述可用id的獲取過程中,若所述主緩存區(qū)中無可用id,則將所述備緩存區(qū)切換為新的主緩存區(qū),基于所述新的主緩存區(qū)中返回執(zhí)行所述獲取緩存在所述主緩存區(qū)中的可用id的步驟。如此,本技術(shù)實(shí)施例中服務(wù)端設(shè)置用于緩存id的緩存區(qū),接收到id生成請求后,從主緩存區(qū)中獲取緩存在其中的可用id,直接從緩存區(qū)獲取id,從而提高了id的生成速率,并且在可用id的獲取過程中,如果主緩存區(qū)中緩存的可用id的可用數(shù)量小于預(yù)設(shè)可用閾值,則從預(yù)設(shè)數(shù)據(jù)庫中獲取目標(biāo)數(shù)量的id緩存至備緩存區(qū),也就是說id的獲取與緩存準(zhǔn)備可異步進(jìn)行,而不需要等待主緩存區(qū)中的id獲取完之后中斷id的獲取進(jìn)行緩存準(zhǔn)備,使得通過切換工作的緩存區(qū)的方式,總是可從主緩存區(qū)中獲取到id,實(shí)現(xiàn)id的連續(xù)獲取,而不會(huì)中斷id獲取過程,也即id是連續(xù)生成的?;诖耍词乖谕话l(fā)流量時(shí),由于是從緩存區(qū)中獲取id,獲取速度快,保障了id的生成速度,且在工作緩存中的可用id小于一定值時(shí),就在備緩存區(qū)中填充新的id,以使得主緩存區(qū)中無可用id后,該備緩存區(qū)可切換為新的主緩存區(qū)繼續(xù)工作保障id的正常供給,保障了id的連續(xù)生成,使得可避免出現(xiàn)生成重復(fù)id的現(xiàn)象,進(jìn)而保障了分布式id的生成質(zhì)量。