本發(fā)明涉及計(jì)算機(jī),特別涉及一種服務(wù)標(biāo)識(shí)的生成方法及裝置、電子設(shè)備、存儲(chǔ)介質(zhì)。
背景技術(shù):
1、在分布式集群中,如何使并發(fā)的程序能夠生成全局唯一標(biāo)識(shí)碼,是必然會(huì)遇到的問題?,F(xiàn)在通用的方法有以下兩類:
2、方法1:借助redis、自研等強(qiáng)一致性中心數(shù)據(jù)處理服務(wù)實(shí)現(xiàn):服務(wù)需要id時(shí)向其請(qǐng)求,獲取成功后使用。
3、方法2.預(yù)先給每個(gè)服務(wù)分配一個(gè)短的唯一標(biāo)識(shí)碼a,根據(jù)統(tǒng)一規(guī)則,自行生成長的唯一標(biāo)識(shí)碼c=a+自定義部分b。
4、但以上方法都有其不適用的情況,方法1的標(biāo)識(shí)碼生成方式?jīng)Q定了所有使用的地方必須向同一個(gè)服務(wù)請(qǐng)求標(biāo)識(shí)碼,且標(biāo)識(shí)碼是串行生成的,無法并行。這就導(dǎo)致了請(qǐng)求過程耗時(shí)、等待耗時(shí)比較久,無法發(fā)揮分布式的并發(fā)優(yōu)勢;而且一旦中心數(shù)據(jù)處理服務(wù)故障,唯一標(biāo)識(shí)就無法生成,這會(huì)影響系統(tǒng)的健壯性。所以只適用于標(biāo)識(shí)符生成頻率低、對(duì)生成效率要求不高的場景。方法2在唯一標(biāo)識(shí)碼長度不受限制,或足夠用的情況下適用。但如果長度受限制、標(biāo)識(shí)碼個(gè)數(shù)有限的情況,則標(biāo)識(shí)碼a的長度即限制了服務(wù)的個(gè)數(shù)(不能超過a所有表示的最大值),又導(dǎo)致標(biāo)識(shí)碼的浪費(fèi)(服務(wù)個(gè)數(shù)不到a表示的最大值時(shí))。所以這種方法在標(biāo)識(shí)碼資源比較緊張、服務(wù)個(gè)數(shù)可擴(kuò)、縮的情況下不適用。
5、比如gat1400(公共安全行業(yè)標(biāo)準(zhǔn)ga/t1400)中的id數(shù)據(jù)類型businessobjectidtype,長度為33位,前14位根據(jù)系統(tǒng)和類型等已固定,15~28為精確到秒的14位時(shí)間串(20240722151406),僅29~33這最后5位是自定義,也即系統(tǒng)中每秒最多生成00000~99999共計(jì)100000個(gè)。這這種情況下,使用方法1,會(huì)使整型系統(tǒng)效率嚴(yán)重受限;使用方法2,給服務(wù)預(yù)留的標(biāo)識(shí)碼a假設(shè)是一位,那么自定義部分b就是4位,再假設(shè)集群目前有5個(gè)服務(wù),那么整個(gè)集群的服務(wù)個(gè)數(shù)被限制在了10個(gè)及以內(nèi),且1秒內(nèi)只能產(chǎn)生5*10000=50000個(gè)唯一標(biāo)識(shí),限制了系統(tǒng)的最大并發(fā)能力(低于理論并發(fā)量100000)。
技術(shù)實(shí)現(xiàn)思路
1、鑒于上述問題,本發(fā)明提出了一種服務(wù)標(biāo)識(shí)的生成方法及裝置、電子設(shè)備、存儲(chǔ)介質(zhì)。
2、在本發(fā)明的第一方面,首先提供了一種服務(wù)標(biāo)識(shí)的生成方法,應(yīng)用于分布式集群,所述分布式集群中部署有至少一個(gè)服務(wù),所述服務(wù)有對(duì)應(yīng)的服務(wù)類型,其特征在于,所述方法包括:
3、針對(duì)任一所述服務(wù),當(dāng)所述服務(wù)啟動(dòng)或接收到同服務(wù)類型的服務(wù)變更通知時(shí),所述服務(wù)向服務(wù)管理中心發(fā)送服務(wù)變更請(qǐng)求;所述服務(wù)管理中心用于接收所述服務(wù)變更請(qǐng)求并根據(jù)所述服務(wù)的服務(wù)類型篩選出所有同類型服務(wù);
4、所述服務(wù)接收所述服務(wù)管理中心返回的同類型服務(wù)個(gè)數(shù)以及排序位置;其中,所述排序位置為所述服務(wù)管理中心根據(jù)預(yù)設(shè)的排序策略對(duì)所述服務(wù)進(jìn)行排序得到;
5、所述服務(wù)根據(jù)獲取得到的同類型服務(wù)個(gè)數(shù)、排序位置以及規(guī)則標(biāo)識(shí)符范圍計(jì)算標(biāo)識(shí)符范圍的開始值和標(biāo)識(shí)符個(gè)數(shù)閾值;
6、所述服務(wù)在當(dāng)前時(shí)間所屬的時(shí)間區(qū)間內(nèi),根據(jù)所述標(biāo)識(shí)符范圍的開始值和標(biāo)識(shí)符個(gè)數(shù)閾值,生成唯一標(biāo)識(shí)符。
7、可選地,針對(duì)任一所述服務(wù),當(dāng)所述服務(wù)啟動(dòng)或接收到同服務(wù)類型的服務(wù)變更通知時(shí),所述服務(wù)向服務(wù)管理中心發(fā)送服務(wù)變更請(qǐng)求;所述服務(wù)管理中心用于接收所述服務(wù)變更請(qǐng)求并根據(jù)所述服務(wù)的服務(wù)類型篩選出所有同類型服務(wù),包括:
8、當(dāng)所述服務(wù)首次啟動(dòng)時(shí),向所述服務(wù)管理中心請(qǐng)求注冊所述服務(wù)的信息;所述服務(wù)管理中心用于記錄所述服務(wù)的信息并根據(jù)所述服務(wù)的信息中記載的服務(wù)類型篩選出所有同類型服務(wù);
9、或,
10、當(dāng)所述服務(wù)接收到同服務(wù)類型的服務(wù)變更通知時(shí),向所述服務(wù)管理中心發(fā)送服務(wù)變更請(qǐng)求;所述服務(wù)管理中心用于接收所述服務(wù)變更請(qǐng)求并實(shí)時(shí)根據(jù)所述服務(wù)的服務(wù)類型篩選出所有同類型服務(wù)。
11、可選地,所述服務(wù)接收所述服務(wù)管理中心返回的同類型服務(wù)個(gè)數(shù)以及排序位置,包括:
12、所述服務(wù)向所述服務(wù)管理中心請(qǐng)求獲取同類型服務(wù)個(gè)數(shù);所述服務(wù)管理中心用于接收所述服務(wù)獲取同類型服務(wù)個(gè)數(shù)的請(qǐng)求,并返回根據(jù)所述服務(wù)的服務(wù)類型篩選出的所有同類型服務(wù)的個(gè)數(shù);
13、所述服務(wù)在獲取到所述服務(wù)管理中心返回的同類型服務(wù)個(gè)數(shù)后,所述服務(wù)向所述服務(wù)管理中心請(qǐng)求獲取排序位置;所述服務(wù)管理中心用于接收所述服務(wù)獲取排序位置的請(qǐng)求,并返回根據(jù)預(yù)設(shè)的排序策略對(duì)所述服務(wù)進(jìn)行排序得到的排序位置。
14、可選地,所述服務(wù)標(biāo)識(shí)符范圍的開始值通過所述規(guī)則標(biāo)識(shí)符范圍除以所述同類型服務(wù)個(gè)數(shù)向下取整得到;
15、所述服務(wù)標(biāo)識(shí)符范圍的標(biāo)識(shí)符個(gè)數(shù)閾值通過所述規(guī)則標(biāo)識(shí)符范圍除以所述同類型服務(wù)個(gè)數(shù)向下取整并乘以所述排序位置得到。
16、可選地,所述服務(wù)在當(dāng)前時(shí)間所屬的時(shí)間區(qū)間內(nèi),根據(jù)所述標(biāo)識(shí)符范圍的開始值和標(biāo)識(shí)符個(gè)數(shù)閾值,生成唯一標(biāo)識(shí)符,包括:
17、設(shè)置上一次生成唯一標(biāo)識(shí)符時(shí)對(duì)應(yīng)的時(shí)間區(qū)間與上一次生成唯一標(biāo)識(shí)符時(shí)的序號(hào)為初始值;
18、獲取所述服務(wù)的當(dāng)前時(shí)間,并根據(jù)所述服務(wù)的當(dāng)前時(shí)間確定所述服務(wù)當(dāng)前時(shí)間所屬的時(shí)間區(qū)間;
19、判斷所述服務(wù)當(dāng)前時(shí)間所屬的時(shí)間區(qū)間與上一次生成唯一標(biāo)識(shí)符時(shí)對(duì)應(yīng)的時(shí)間區(qū)間是否一致;
20、若所述服務(wù)當(dāng)前時(shí)間所屬的時(shí)間區(qū)間與上一次生成唯一標(biāo)識(shí)符時(shí)對(duì)應(yīng)的時(shí)間區(qū)間一致,判斷上一次生成唯一標(biāo)識(shí)符時(shí)的序號(hào)是否小于所述服務(wù)的標(biāo)識(shí)符個(gè)數(shù)閾值;
21、若上一次生成唯一標(biāo)識(shí)符時(shí)的序號(hào)大于等于所述服務(wù)的標(biāo)識(shí)符個(gè)數(shù)閾值,則計(jì)算所述服務(wù)當(dāng)前時(shí)間到下一時(shí)間區(qū)間起始位置的睡眠時(shí)間;
22、所述服務(wù)在經(jīng)過睡眠時(shí)間時(shí)長后,喚醒所述服務(wù)并重復(fù)執(zhí)行獲取所述服務(wù)的當(dāng)前時(shí)間,并根據(jù)所述服務(wù)的當(dāng)前時(shí)間確定所述服務(wù)當(dāng)前時(shí)間所屬的時(shí)間區(qū)間;
23、若上一次生成唯一標(biāo)識(shí)符的序號(hào)小于所述服務(wù)的標(biāo)識(shí)符個(gè)數(shù)閾值,更新所述上一次生成唯一標(biāo)識(shí)符時(shí)的序號(hào),將所述上一次生成唯一標(biāo)識(shí)符時(shí)的序號(hào)增加預(yù)設(shè)數(shù)值,得到新的生成唯一標(biāo)識(shí)符時(shí)的序號(hào);
24、若所述服務(wù)當(dāng)前時(shí)間所屬的時(shí)間區(qū)間與上一次生成唯一標(biāo)識(shí)符時(shí)對(duì)應(yīng)的時(shí)間區(qū)間不一致,更新所述上一次生成唯一標(biāo)識(shí)符時(shí)對(duì)應(yīng)的時(shí)間區(qū)間為所述服務(wù)當(dāng)前時(shí)間所屬的時(shí)間區(qū)間,將所述上一次生成唯一標(biāo)識(shí)符時(shí)的序號(hào)重置為初始值,得到新的生成唯一標(biāo)識(shí)符時(shí)的序號(hào);
25、所述服務(wù)的唯一標(biāo)識(shí)符為固定部分與所述新的生成唯一標(biāo)識(shí)符時(shí)的序號(hào)和所述服務(wù)標(biāo)識(shí)符范圍的開始值之和。
26、可選地,所述服務(wù)在當(dāng)前時(shí)間所屬的時(shí)間區(qū)間內(nèi),根據(jù)所述標(biāo)識(shí)符范圍的開始值和標(biāo)識(shí)符個(gè)數(shù)閾值,生成唯一標(biāo)識(shí)符之前,還包括:
27、對(duì)所述服務(wù)生成唯一標(biāo)識(shí)符的過程添加線程鎖。
28、所述服務(wù)在所述線程鎖的保護(hù)下生成唯一標(biāo)識(shí)符。
29、可選地,對(duì)所述服務(wù)生成唯一標(biāo)識(shí)符的過程添加線程鎖,包括:
30、創(chuàng)建所述線程鎖;
31、在所述服務(wù)生成唯一標(biāo)識(shí)符之前,獲取所述線程鎖;
32、在所述服務(wù)生成唯一標(biāo)識(shí)符之后,釋放所述線程鎖。
33、在本發(fā)明實(shí)施的第二方面,還提供一種服務(wù)標(biāo)識(shí)的生成裝置,所述裝置包括:
34、請(qǐng)求模塊,用于針對(duì)任一所述服務(wù),當(dāng)所述服務(wù)啟動(dòng)或接收到同服務(wù)類型的服務(wù)變更通知時(shí),所述服務(wù)向服務(wù)管理中心發(fā)送服務(wù)變更請(qǐng)求;所述服務(wù)管理中心用于接收所述服務(wù)變更請(qǐng)求并根據(jù)所述服務(wù)的服務(wù)類型篩選出所有同類型服務(wù);
35、接收模塊,用于所述服務(wù)接收所述服務(wù)管理中心返回的同類型服務(wù)個(gè)數(shù)以及排序位置;其中,所述排序位置為所述服務(wù)管理中心根據(jù)預(yù)設(shè)的排序策略對(duì)所述服務(wù)進(jìn)行排序得到;
36、計(jì)算模塊,用于所述服務(wù)根據(jù)獲取得到的同類型服務(wù)個(gè)數(shù)、排序位置以及規(guī)則標(biāo)識(shí)符范圍計(jì)算標(biāo)識(shí)符范圍的開始值和標(biāo)識(shí)符個(gè)數(shù)閾值;
37、生成模塊,用于所述服務(wù)在當(dāng)前時(shí)間所屬的時(shí)間區(qū)間內(nèi),根據(jù)所述標(biāo)識(shí)符范圍的開始值和標(biāo)識(shí)符個(gè)數(shù)閾值,生成唯一標(biāo)識(shí)符。
38、在本發(fā)明實(shí)施的第三方面,還提供一種電子設(shè)備,包括存儲(chǔ)器、處理器及存儲(chǔ)在存儲(chǔ)器上并可在處理器上運(yùn)行的計(jì)算機(jī)程序,所述處理器執(zhí)行所述計(jì)算機(jī)程序時(shí),實(shí)現(xiàn)如上述任一所述的服務(wù)標(biāo)識(shí)的生成方法。
39、在本發(fā)明實(shí)施的第四方面,還提供一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其上存儲(chǔ)有計(jì)算機(jī)程序,該計(jì)算機(jī)程序被處理器執(zhí)行時(shí),實(shí)現(xiàn)如上述任一所述的服務(wù)標(biāo)識(shí)的生成方法。
40、本發(fā)明實(shí)施例具有以下優(yōu)點(diǎn):
41、在本發(fā)明實(shí)施例中,通過針對(duì)任一服務(wù),當(dāng)服務(wù)啟動(dòng)或接收到同服務(wù)類型的服務(wù)變更通知時(shí),服務(wù)向服務(wù)管理中心發(fā)送服務(wù)變更請(qǐng)求;服務(wù)管理中心用于接收服務(wù)變更請(qǐng)求并根據(jù)服務(wù)的服務(wù)類型篩選出所有同類型服務(wù);服務(wù)接收服務(wù)管理中心返回的同類型服務(wù)個(gè)數(shù)以及排序位置;其中,所述排序位置為服務(wù)管理中心根據(jù)預(yù)設(shè)的排序策略對(duì)服務(wù)進(jìn)行排序得到;服務(wù)根據(jù)獲取得到的同類型服務(wù)個(gè)數(shù)、排序位置以及規(guī)則標(biāo)識(shí)符范圍計(jì)算標(biāo)識(shí)符范圍的開始值和標(biāo)識(shí)符個(gè)數(shù)閾值;服務(wù)在當(dāng)前時(shí)間所屬的時(shí)間區(qū)間內(nèi),根據(jù)標(biāo)識(shí)符范圍的開始值和標(biāo)識(shí)符個(gè)數(shù)閾值,生成唯一標(biāo)識(shí)符。動(dòng)態(tài)調(diào)整的標(biāo)識(shí)符范圍,既可使服務(wù)個(gè)數(shù)不受限制,發(fā)揮分布式靈活擴(kuò)、縮的特征,又能充分利用標(biāo)識(shí)符,避免資源浪費(fèi),使系統(tǒng)能夠達(dá)到其理論最值;分布式而非中心式生成方式,簡化了獲取標(biāo)識(shí)符的過程,節(jié)約了請(qǐng)求時(shí)間和等待時(shí)間,充分發(fā)揮分布式的并行特點(diǎn),提高了效率;在需要的服務(wù)中生成唯一標(biāo)識(shí),降低了服務(wù)之間的依賴,提高了系統(tǒng)的健壯性。