System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种实现分布式id的方法技术_技高网

一种实现分布式id的方法技术

技术编号:44432389 阅读:0 留言:0更新日期:2025-02-28 18:44
本发明专利技术属于分布式系统技术领域,且公开了一种实现分布式id的方法,具体步骤如下:步骤一:客户端在使用分发id前需要先申请对应的业务线标识和调用接口的token,服务端收到客户端的申请之后在数据库表中添加相应的记录;步骤二:申请通过之后,客户端使用自己表示的业务线调用接口。本发明专利技术创新的生成分布式id的机制:通过使用volatile修饰的当前片段对象和下一片段对象,实现线程之间可见,使用ConcurrentHashMap存储数据和synchronized锁保证线程安全;预加载下一片段对象和内存的使用,有效提高获取id的速度;不使用第三方软件实现,避免因第三方的错误导致获取不到分布式id;使用数据库表的形式配置存储bizType以及步长和余数的方式实现了获取定制化间隔id的需求。

【技术实现步骤摘要】

本专利技术属于分布式系统,具体为一种实现分布式id的方法


技术介绍

1、分布式id生成器是一种用于生成全局唯一标识符(id)的工具,它在分布式系统中起着重要的作用,在分布式环境中,需要为多个节点或服务生成唯一的id,以确保数据的一致性和正确性,使用分布式的id分发器是现在互联网必不可少的场景,比如分布式系统中多个实例同时创建商品或者sku数或者分不分表时都需要一个唯一的商品id,此id需要高效快速的生成,这就需要根据我们的需求实现一个高效快速的分布式id分发器。

2、现有技术方案一种是雪花算法,使用时间戳、机器id、序列号按照一定的顺序拼起来,得到一个唯一的雪花id,雪花算法是一种简单有效的分布式id生成器,但也存在一些限制和注意事项,例如:时钟回拨问题:如果系统时钟回拨,可能导致生成的id重复或不连续;另一种是uuid包含32个16进制数字,但是不易于存储,很多场景不适用;信息不安全:基于mac地址生成uuid的算法可能会造成mac地址泄露,这个漏洞曾被用于寻找梅丽莎病毒的制作者位置,id作为主键时在特定的环境会存在一些问题,比如做db主键的场景下,uuid就非常不适用。


技术实现思路

1、本专利技术的目的在于提供一种实现分布式id的方法,以解决上述
技术介绍
中提出的问题。

2、为了实现上述目的,本专利技术提供如下技术方案:一种实现分布式id的方法,具体步骤如下:

3、步骤一:

4、客户端在使用分发id前需要先申请对应的业务线标识和调用接口的token;服务端收到客户端的申请之后在数据库表中添加相应的记录;

5、步骤二:

6、申请通过之后,客户端使用自己表示的业务线调用接口,服务端判断接口调用端是否有权限调用接口,如果有权限调用接口则进行调用获取id;

7、步骤三:

8、使用客户端标识biztype从内存的concurrenthashmap中获取对应的id分发器,如果存在且不为空则返回,否则需要构造id分发器;

9、步骤四:

10、使用互斥锁构造分发器id,构造分发器中需要设置biztype,加载当前片段对象,然后返回即可;

11、步骤五:

12、加载当前片段对象过程,需要判断被volat i le关键字修饰的当前片段对象是否为空,如果为空或者当前片段对象已经使用到了最大id,如果满足条件判断下一片段对象是否为空,不为空则把下一片段对象赋值给前一片段对象,下一片段对象赋值为空;为空则需要从数据库查询加载;

13、步骤六:

14、从数据库加载需要根据biztype查询数据库获取下一个biztype对应的片段对象,其中需要更新表中maxid=表中的maxid+step,vers ion=vers ion+1,返回对象中设置loadingid=maxid+step*0.2组装返回当前片段对象;

15、步骤七:

16、返回之后使用循环执行步骤六,直到当前片段对象获取不为空值,则获取使用atomiclong修饰的属性获取需要的id;

17、步骤八:

18、获取返回的id与maxid进行比较,大于maxid需要重新加载当前片段对象,执行步骤六即可;

19、步骤九:

20、大于loadingid异步加载下一片段对象,与步骤六相同,否则返回当前对象的id值,即为要获取的id;

21、步骤十:

22、循环步骤五到步骤九直到获取到id。

23、作为本专利技术的一种优选技术方案,步骤一中所述的id和token的关系表包含字段biz_type、begin_id、maxid、step、delta、remainder和vers ion;id设置表包含字段biz_type和token(调用接口token值)。

24、作为本专利技术的一种优选技术方案,步骤一中所述的相应记录包含调用接口所需要的token和客户端需要的id起始值,步长,增量和余数字段。

25、作为本专利技术的一种优选技术方案,步骤四中所述的互斥锁能够防止同一业务线同时进行构造。

26、作为本专利技术的一种优选技术方案,步骤五中所述的从数据库查询加载,即实现下一片段对象的预加载。

27、作为本专利技术的一种优选技术方案,步骤二中所述的申请若未通过,则流程直接结束。

28、作为本专利技术的一种优选技术方案,步骤三中所述的concurrenthashmap是java集合框架中的一个线程安全的哈希表实现。

29、作为本专利技术的一种优选技术方案,步骤十中所述的循环步骤五到步骤九,保证了id获取的唯一性。

30、作为本专利技术的一种优选技术方案,步骤二中所述的客户端使用自己表示的业务线调用接口,杜绝了第三方软件的使用。

31、本专利技术的有益效果如下:

32、本专利技术创新的生成分布式id的机制:通过使用volati le修饰的当前片段对象和下一片段对象,可以实现线程之间可见,使用concurrenthashmap存储数据和synchronized锁来保证线程安全;预加载下一片段对象和内存的使用,可以有效提高获取id的速度;不使用第三方软件实现,避免了因为第三方的错误导致获取不到分布式id;使用数据库表的形式配置存储biztype以及步长和余数的方式实现了获取定制化间隔id的需求。

本文档来自技高网...

【技术保护点】

1.一种实现分布式id的方法,其特征在于,具体步骤如下:

2.根据权利要求1所述的一种实现分布式id的方法,其特征在于:步骤一中所述的id和token的关系表包含字段biz_type、begin_id、maxId、step、delta、remainder和version;id设置表包含字段biz_type和token(调用接口token值)。

3.根据权利要求1所述的一种实现分布式id的方法,其特征在于:步骤一中所述的相应记录包含调用接口所需要的token和客户端需要的id起始值,步长,增量和余数字段。

4.根据权利要求1所述的一种实现分布式id的方法,其特征在于:步骤四中所述的互斥锁能够防止同一业务线同时进行构造。

5.根据权利要求1所述的一种实现分布式id的方法,其特征在于:步骤五中所述的从数据库查询加载,即实现下一片段对象的预加载。

6.根据权利要求1所述的一种实现分布式id的方法,其特征在于:步骤二中所述的申请若未通过,则流程直接结束。

7.根据权利要求1所述的一种实现分布式id的方法,其特征在于:步骤三中所述的ConcurrentHashMap是Java集合框架中的一个线程安全的哈希表实现。

8.根据权利要求1所述的一种实现分布式id的方法,其特征在于:步骤十中所述的循环步骤五到步骤九,保证了id获取的唯一性。

9.根据权利要求1所述的一种实现分布式id的方法,其特征在于:步骤二中所述的客户端使用自己表示的业务线调用接口,杜绝了第三方软件的使用。

...

【技术特征摘要】

1.一种实现分布式id的方法,其特征在于,具体步骤如下:

2.根据权利要求1所述的一种实现分布式id的方法,其特征在于:步骤一中所述的id和token的关系表包含字段biz_type、begin_id、maxid、step、delta、remainder和version;id设置表包含字段biz_type和token(调用接口token值)。

3.根据权利要求1所述的一种实现分布式id的方法,其特征在于:步骤一中所述的相应记录包含调用接口所需要的token和客户端需要的id起始值,步长,增量和余数字段。

4.根据权利要求1所述的一种实现分布式id的方法,其特征在于:步骤四中所述的互斥锁能够防止同一业务线同时进行构造。

5.根据权利...

【专利技术属性】
技术研发人员:李瑶
申请(专利权)人:北京车智慧信息技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1