System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术属于分布式系统,具体为一种实现分布式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前需要先申请对应的业务线标识和
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的方法,其特征在于:步
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.根据权利...
【专利技术属性】
技术研发人员:李瑶,
申请(专利权)人:北京车智慧信息技术有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。