生成分布式ID的系统和方法技术方案

技术编号:29789881 阅读:12 留言:0更新日期:2021-08-24 18:08
本发明专利技术公开了一种生成分布式ID的系统和方法,涉及大数据技术领域。该方法的一具体实施方式包括:分布式数据库集群,用于生成并存储ID可用号段,ID可用号段中包括多个依次增大的可用序列值;第一服务器集群,用于确定第二服务器集群中每个第二服务器的ID;其中,每个第二服务器的ID依次增大;第二服务器集群,用于根据ID可用号段和各第二服务器的ID,生成多个可用业务ID;以及根据ID申请请求,从多个可用业务ID中确定与ID申请请求对应的目标业务ID。该实施方式能够保证在某一台服务器或者某一个机房出问题的情况下,整个系统依然具有高可用性,能够跨城市跨机房访问,适用于大型的金融级项目。

【技术实现步骤摘要】
生成分布式ID的系统和方法
本专利技术涉及大数据
,尤其涉及一种生成分布式ID的系统和方法。
技术介绍
在业务数据量不大的时候,可以通过多种方法生成业务ID,主要是通过自增ID实现。具体的,可以通过Redis的原子操作incrby来实现值的自增,然后获取到自增后的ID值,作为业务ID使用。或者,通过访问Mysql,向Mysql表中插入新的数据,然后获取到新的自增主键值来作为业务ID使用。或者,通过访问ZooKeeper,修改ZooKeeper的节点,获得一个新的顺序的节点的版本号,然后用这个版本号作为业务ID使用。又或者,利用本机的时间戳与机器ID拼接来作为业务ID使用。但是,在大型复杂系统中,可能订单、产品、售后都会分库分表,会分布在多个表多个库中,这时如果使用自增ID将会出现大量重复ID,使业务出现问题。即对于大规模复杂业务、分布式高并发的应用场景,显然上述依靠自增序列来生成ID的方式各自存在不同的缺陷,不能满足业务的需求。其中,该缺陷主要表现为:Redis并没有能实现完全实时同步的机制,所以不能很好的支持水平扩展,也就不能很好的实现跨机房访问的情况。Mysql的性能并不够好,当访问量大的时候,Mysql完全无法抗住访问压力,表的高并发插入将会造成大量锁等待,延迟将会非常大,有ID需求的业务将会因为获取不到ID而延迟等待。ZooKeeper虽然支持分布式部署,能实现跨机房访问,但是ZooKeeper性能并不够好,当每秒有上千个ID需求的时候,ZooKeeper将会无法满足需求。利用本机的时间戳与机器ID拼接来作为业务ID的方法严重依赖时间,如果时间回调可能造成重复ID(服务器通常会定时与时钟服务器同步时间,而时钟服务器经常会修正自己的时间,当遇到修正的时候,将会发生时钟回拨,这是就会产生重复ID),并且没有统一的管理,ID无法溯源。因此,亟需一种支持跨机房的高性能高可靠的分布式ID生成方法。
技术实现思路
有鉴于此,本专利技术实施例提供一种生成分布式ID的系统和方法,该系统能够保证在某一台服务器或者某一个机房出问题的情况下,整个系统依然具有高可用性,能够跨城市跨机房访问,适用于大型的金融级项目。为实现上述目的,根据本专利技术实施例的一个方面,提供了一种生成分布式ID的系统,包括分布式数据库集群、第一服务器集群和第二服务器集群;其中,所述分布式数据库集群,用于生成并存储ID可用号段,所述ID可用号段中包括多个依次增大的可用序列值;所述第一服务器集群,用于确定所述第二服务器集群中每个第二服务器的ID;其中,所述每个第二服务器的ID依次增大;所述第二服务器集群,用于根据所述ID可用号段和各第二服务器的ID,生成多个可用业务ID;以及根据ID申请请求,从所述多个可用业务ID中确定与所述ID申请请求对应的目标业务ID。可选地,所述分布式数据库集群还用于设置所述ID可用号段的位数;所述第一服务器集群还用于设置所述第二服务器的ID的位数;所述第二服务器集群还用于设置所述可用业务ID的位数。可选地,每个所述第二服务器还用于:将所述ID可用号段中的每个所述可用序列值与所述第二服务器的ID进行拼接,若拼接后得到的可用序列值的位数小于所述可用业务ID的位数,则对拼接后得到的可用序列值进行补齐,将补齐后的可用序列值作为可用业务ID。可选地,所述第二服务器还用于:将所述多个可用业务ID写入预设的环形数组,以及从所述环形数组中获取与所述ID申请请求对应的目标业务ID。可选地,所述第二服务器还用于:创建多个环形数组,所述多个环形数组对应不同的业务类型;确定所述多个可用业务ID对应的业务类型,将所述多个可用业务ID写入与其业务类型对应的环形数组中;以及根据所述ID申请请求对应的业务类型,从所述多个环形数组中确定目标环形数组,从所述目标环形数组中获取与所述ID申请请求对应的目标业务ID。可选地,所述第二服务器还用于:将所述环形数组存储在中央处理器缓存中,使所述环形数组中的每个可用业务ID占用一个中央处理器缓存线。可选地,所述分布式数据库集群包括多个分布式数据库,所述多个分布式数据库分布在多个城市的多个机房中;所述第一服务器集群包括多个第一服务器,所述多个第一服务器分布在所述多个城市的多个机房中;所述第二服务器集群包括多个第二服务器,所述多个第二服务器分布在所述多个城市的多个机房中。可选地,当所述第二服务器在获取所述ID可用号段时,从与所述第二服务器安装在同一机房的分布式数据库中获取。可选地,所述系统还包括负载均衡装置,用于接收所述ID申请请求,并确定与所述ID申请请求对应的目标机房以及所述目标机房中的目标第二服务器,以使所述目标第二服务器确定与所述ID申请请求对应的目标业务ID。可选地,所述负载均衡装置还用于:确定所述ID申请请求对应的权重;基于所述权重,确定与所述ID申请请求对应的目标机房以及所述目标机房中的目标第二服务器。可选地,所述权重包括第一权重和第二权重;所述负载均衡装置还用于:根据所述第一权重,确定与所述ID申请请求对应的目标机房;根据所述第二权重,确定与所述ID申请请求对应的目标机房中的目标第二服务器。可选地,所述负载均衡装置还用于定时检测所述多个第二服务器的工作状态。可选地,所述工作状态包括故障;所述负载均衡装置还用于:在检测到工作状态为故障的第二服务器时,根据配置信息,确定是否将与所述故障的第二服务器对应的ID申请请求自动切换到对应的候补第二服务器上;若是,则在接收到与所述故障的第二服务器对应的ID申请请求时,将与所述故障的第二服务器对应的ID申请请求自动切换到所述候补第二服务器上。可选地,所述可用业务ID为64比特,所述可选序列值为53比特,所述第二服务器的ID为10比特。可选地,所述分布式数据库为OceanBase数据库。可选地,所述第一服务器集群为ZooKeeper服务器集群;所述第一服务器集群用于:根据所述ZooKeeper服务器集群中的子节点的ID,确定每个第二服务器的ID。为实现上述目的,根据本专利技术实施例的另一个方面,提供了一种生成分布式ID的方法,所述方法包括分布式数据库集群、第一服务器集群和第二服务器集群;所述方法还包括:生成ID可用号段,并将所述ID可用号段存储在所述分布式数据库集群中;所述ID可用号段中包括多个依次增大的可用序列值;基于所述第一服务器集群,确定所述第二服务器集群中每个第二服务器的ID;根据所述ID可用号段和各第二服务器的ID,生成多个可用业务ID;根据ID申请请求,从所述多个可用业务ID中确定与所述ID申请请求对应的目标业务ID。可选地,根据所述ID可用号段和各第二服务器的ID,生成多个可用业务ID包括:将所述ID可用号段中的每个所述可用序列值与所述第二服务器的ID进行拼接,对拼接后得到的可用序列值进行补齐,将补齐后的可用序列值作为可用业务ID。可选地,根据I本文档来自技高网
...

【技术保护点】
1.一种生成分布式ID的系统,其特征在于,包括分布式数据库集群、第一服务器集群和第二服务器集群;/n其中,所述分布式数据库集群,用于生成并存储ID可用号段,所述ID可用号段中包括多个依次增大的可用序列值;/n所述第一服务器集群,用于确定所述第二服务器集群中每个第二服务器的ID;其中,所述每个第二服务器的ID依次增大;/n所述第二服务器集群,用于获取所述ID可用号段和各第二服务器的ID,根据所述ID可用号段和各第二服务器的ID,生成多个可用业务ID;以及根据ID申请请求,从所述多个可用业务ID中确定与所述ID申请请求对应的目标业务ID。/n

【技术特征摘要】
1.一种生成分布式ID的系统,其特征在于,包括分布式数据库集群、第一服务器集群和第二服务器集群;
其中,所述分布式数据库集群,用于生成并存储ID可用号段,所述ID可用号段中包括多个依次增大的可用序列值;
所述第一服务器集群,用于确定所述第二服务器集群中每个第二服务器的ID;其中,所述每个第二服务器的ID依次增大;
所述第二服务器集群,用于获取所述ID可用号段和各第二服务器的ID,根据所述ID可用号段和各第二服务器的ID,生成多个可用业务ID;以及根据ID申请请求,从所述多个可用业务ID中确定与所述ID申请请求对应的目标业务ID。


2.根据权利要求1所述的系统,其特征在于,所述分布式数据库集群还用于设置所述ID可用号段的位数;所述第一服务器集群还用于设置所述第二服务器的ID的位数;所述第二服务器集群还用于设置所述可用业务ID的位数。


3.根据权利要求2所述的系统,其特征在于,每个所述第二服务器还用于:将所述ID可用号段中的每个所述可用序列值与所述第二服务器的ID进行拼接,若拼接后得到的可用序列值的位数小于所述可用业务ID的位数,则对拼接后得到的可用序列值进行补齐,将补齐后的可用序列值作为可用业务ID。


4.根据权利要求3所述的系统,其特征在于,所述第二服务器还用于:将所述多个可用业务ID写入预设的环形数组,以及从所述环形数组中获取与所述ID申请请求对应的目标业务ID。


5.根据权利要求4所述的系统,其特征在于,所述第二服务器还用于:
创建多个环形数组,所述多个环形数组对应不同的业务类型;确定所述多个可用业务ID对应的业务类型,将所述多个可用业务ID写入与其业务类型对应的环形数组中;以及根据所述ID申请请求对应的业务类型,从所述多个环形数组中确定目标环形数组,从所述目标环形数组中获取与所述ID申请请求对应的目标业务ID。


6.根据权利要求5所述的系统,其特征在于,所述第二服务器还用于:将所述环形数组存储在中央处理器缓存中,使所述环形数组中的每个可用业务ID占用一个中央处理器缓存线。


7.根据权利要求1-6任一项所述的系统,其特征在于,所述分布式数据库集群包括多个分布式数据库,所述多个分布式数据库分布在多个城市的多个机房中;
所述第一服务器集群包括多个第一服务器,所述多个第一服务器分布在所述多个城市的多个机房中;
所述第二服务器集群包括多个第二服务器,所述多个第二服务器分布在所述多个城市的多个机房中。


8.根据权利要求7所述的系统,其特征在于,当所述第二服务器在获取所述ID可用号段时,从与所述第二服务器安装在同一机房的分布式数据库中获取。


9.根据权利要求8所述的系统,其特征在于,所述系统还包括负载均衡装置,用于接收所述ID申请请求,并确定与所述ID申请请求对应的目标机房以及所述目标机房中的目标第二服务器,以使所述目标第二服务器确定与所述ID申请请求对应的目标业务ID。


10.根据权利要求9所述的系统,其特征在于,所述负载均衡装置还用于:确定所述ID申请请求对应的权重;基于所述权重,确定与所述ID申请请求对应的目标机房以及所述目标机房中的目标第二服务器。


11.根据权利要求10所述的系统,其特征在于,所述权重包括第一权重和第二权重;
所述负载均衡装置还用于:根据所述第一权重,确定与所述ID申请请求对应的目标机房;根据所述第二权重,确定与所述ID申请请求对应的目标机房中的目标第二服务器。


12.根据权利要求9所述的系统,其特征在于,所述负载均衡装置还用于定时检测所述多个第二服务器的工作状态。


13.根据权利要求12所述的系统,其特征在于,所述工作状态包括故障;
所述负载均衡装置还用于:在检测到工作状态为故障的第二服务器时,根据配置信息,确定是否将与所述故障的第二服务器对应的ID申请请求自动切换到对应的候补第二服务器上;若是,则在接收到与所述故障的第二服务器对应的ID申请请求时,将与所述故障的第二服务器对应的ID申请请求自动切换到所述候补第二服务器上。


14.根据权利要求2所述的系统,其特征在于,所述可用业务ID为64比特,所述可选序列值为53比特,所述第二服务器的ID为10比特。


15.根据权利要求7所述的系统,其特征在于,所述分布式数据库为OceanBase数据库。


16.根据权利要求7所述的系统,其特征在于,所述第一服务器集群为ZooKeeper服务器集群;<...

【专利技术属性】
技术研发人员:贾宁
申请(专利权)人:建信金融科技有限责任公司
类型:发明
国别省市:上海;31

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

1