【技术实现步骤摘要】
生成分布式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拼接 ...
【技术保护点】
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
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。