CN113297327A - 生成分布式id的系统和方法 - Google Patents
生成分布式id的系统和方法 Download PDFInfo
- Publication number
- CN113297327A CN113297327A CN202110566730.8A CN202110566730A CN113297327A CN 113297327 A CN113297327 A CN 113297327A CN 202110566730 A CN202110566730 A CN 202110566730A CN 113297327 A CN113297327 A CN 113297327A
- Authority
- CN
- China
- Prior art keywords
- server
- available
- application request
- target
- service
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5083—Techniques for rebalancing the load in a distributed system
Abstract
本发明公开了一种生成分布式ID的系统和方法,涉及大数据技术领域。该方法的一具体实施方式包括:分布式数据库集群,用于生成并存储ID可用号段,ID可用号段中包括多个依次增大的可用序列值;第一服务器集群,用于确定第二服务器集群中每个第二服务器的ID;其中,每个第二服务器的ID依次增大;第二服务器集群,用于根据ID可用号段和各第二服务器的ID,生成多个可用业务ID;以及根据ID申请请求,从多个可用业务ID中确定与ID申请请求对应的目标业务ID。该实施方式能够保证在某一台服务器或者某一个机房出问题的情况下,整个系统依然具有高可用性,能够跨城市跨机房访问,适用于大型的金融级项目。
Description
技术领域
本发明涉及大数据技术领域,尤其涉及一种生成分布式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。
可选地,根据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的方式,能够保证在某一台服务器或者某一个机房出问题的情况下,整个系统依然具有高可用性,能够跨城市跨机房访问,适用于大型的金融级项目。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是本发明实施例的生成分布式ID的系统的架构示意图;
图2是本发明实施例的生成分布式ID的系统的可用业务ID的示意图;
图3-图6是本发明实施例的环形数组的示意图;
图7是本发明另一实施例的生成分布式ID的系统的架构示意图;
图8是本发明又一实施例的生成分布式ID的系统的架构示意图;
图9是本发明实施例的生成分布式ID的方法的主要步骤的流程示意图;
图10是本发明实施例可以应用于其中的示例性系统架构图;
图11是适于用来实现本发明实施例的终端设备或服务器的计算机系统的结构示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
下面对本发明实施例涉及的技术术语进行解释。
跨机房:指不局限于操作平台和集群的限制,可跨平台、跨网段的自由指定传输文件的目标地址机。
高性能:指使用特殊设计实现的单位时间能处理更多事务。
高可靠:指即使某个服务器宕机或某个机房坍塌也能保证持续服务的特性。
分布式:指可以在多个节点同时执行任务。
AZ:指机房,一个AZ就代表一个机房,不同的AZ可以在同一个城市,也可以在不同的城市。
ZONE:指副本,不同副本拥有相同的数据,比如ZONE1和ZONE2通过复制机制实现同步,具有相同的数据。
RingBuffer:指一个通过mod取余来形成的一个环形结构的数组。伪共享:伪共享的非标准定义为:缓存系统中是以缓存行(cache line)为单位存储的,当多线程修改互相独立的变量时,如果这些变量共享同一个缓存行,就会无意中影响彼此的性能,这就是伪共享。在本发明实施例中伪共享是指假如一个数组被放入了cpu的cache(缓存)中,数组中有两个元素,线程a读取了第一个元素,线程b读取了第二个元素,如果线程a又修改了第一个元素的话,这时因为数组在同一段cache line中,导致线程b中的第二个元素也失效了,线程b必须重新去内存中读取最新的数组数据,这时性能会严重下降。
cache line:cache是cpu内部的缓存空间,cache line是cpu修改数据时候的最小空间单元,cpu cache是由一段一的cache line组成的。
OceanBase数据库是一种金融级分布式关系数据库,具有数据强一致性、高可用、高性能、在线扩展、高度兼容SQL(Structured Query Language,结构化查询语言)标准的数据库。
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是一个为分布式应用提供一致性服务的软件。
图1是本发明实施例的生成分布式ID的系统100的架构示意图,如图1所示,该生成分布式ID的系统100包括分布式数据库集群101、第一服务器集群102和第二服务器集群103。
其中,该分布式数据库集群101,用于生成并存储ID可用号段,所述ID可用号段中包括多个依次增大的可用序列值。该分布式数据库集群101可以包括多个分布式数据库,所述多个分布式数据库可以分布在多个城市的多个机房中。
第一服务器集群102用于确定所述第二服务器集群中每个第二服务器的ID;其中,所述每个第二服务器的ID依次增大。该第一服务器集群可以包括多个第一服务器,所述多个第一服务器可以分布在所述多个城市的多个机房中。
第二服务器集群103用于获取所述ID可用号段和各第二服务器的ID,根据所述ID可用号段和各第二服务器的ID,生成多个可用业务ID;以及根据ID申请请求,从所述多个可用业务ID中确定与所述ID申请请求对应的目标业务ID。第二服务器集群可以包括多个第二服务器,所述多个第二服务器可以分布在所述多个城市的多个机房中。其中,优选地,当第二服务器在获取所述ID可用号段时,从与所述第二服务器安装在同一机房的分布式数据库中获取,以提高数据读取效率。
具体的,分布式数据库集群101还用于设置所述ID可用号段的位数;第一服务器集群102还用于设置第二服务器的ID的位数;第二服务器集群103还用于设置所述可用业务ID的位数。
在可选的实施例中,每个所述第二服务器还用于根据如下过程生成多个可用业务ID:
将所述ID可用号段中的每个所述可用序列值与所述第二服务器的ID进行拼接,若拼接后得到的可用序列值的位数小于所述可用业务ID的位数,则对拼接后得到的可用序列值进行补齐,将补齐后的可用序列值作为可用业务ID。在本实施例中,ID可用号段的位数与第二服务器的ID的位数之和可以小于可用业务ID的位数,也可以等于可用业务ID的位数,在小于可用业务ID的位数的情况下,需要对拼接后得到的可用序列值进行补齐。
作为示例,可以将可用业务ID为64比特(bit),可选序列值的位数为53比特(bit),第二服务器的ID为10比特(bit),补齐位为1比特(bit)。其中,将可用业务ID的位数设置为64位,满足java中long类型值和数据库中的bigint类型值的最大长度要求。更具体的,如图2所示,可用业务ID的第一bit为补齐位,该位没有使用,以备不时之需,该位可以设置为0或者1。中间的53bit为可用序列值,最后的10bit是第二服务器的ID。该例子中最多支持1024台服务器,这样一共拼成一个64的数值作为可用业务ID。
在可选的实施例中,所述第二服务器在生成多个可用业务ID之后,还可以将所述多个可用业务ID写入预设的环形数组,以及从所述环形数组中获取与所述ID申请请求对应的目标业务ID。其中,如图3所示,环形数组指一个通过mod取余来形成的一个环形结构的数组。在图3中环形数组(RingBuffer)有8个位置(位置从0开始),该图例简化了环形数组,在实际应用中,该环形数组的位置可以有很多,可以根据应用需求灵活设置。环形数组(RingBuffer)内的数字(0-7)为数组的位置号即索引号,数组索引从0开始。环形数组中Write(写)和Read(读)用于管理读写的位置序列,起初Read指针和Write指针都指向数组的0位置,读写开始后,不断增加该值来定位下一次的读写位置,箭头内的Write和Read对应的值为将要写入和读取的数组位置号。每次写数据:在Write对应位置写入新值,并向前移动对应的Write指针位置,如果遇到指针已经处于尾部,则移动到最开始位置,形成一个环形,类似于双向链表。每次读取数据:在Read位置读取当前值,并移动Read位置,同样如果遇到已经到达尾部,则返回到最开始的初始位置。整个数据流的读写过程就是通过不断的操作Write和Read来实现数据的高效处理。作为具体的示例,如图3-图7所示该环形数组的工作流程包括:(1)如图3所示,初始化一个空的环形数组,并设置Read=0和Write=0,该环形数组一共8个位置,即size=8。(2)如图4所示,在环形数据写入三个元素,分别是1、2、3,此时读指针位置不变,写指针移动三个位置到索引为3的位置。(3)如图5所示,读取一个元素,读指针移动一个位置(索引为1的位置),写指针不变,获得数据值1。(4)如图6所示,继续写入六个元素,分别是4、5、6、7、8、9,其中,4、5、6、7、8分别放入剩余的数组空缺中,但是9由于已经没有位置可写,则把9覆盖了原有位置0中的1。值得说明的是,本实施例没有设置write=0,而是直接在原Write值上继续加1,取模size即可获得真实位置。这样一方面Write的位置可以无限制的顺序增加,另一方面只需要把write的位置取模即可得到在RingBuffer中的真实位置。此时,写入指针已经追上了读取指针的位置,如果读取位置不继续下移,为了防止写入覆盖还没有读取的数据,所以写入指针需要等待读取指针下移。(5)连续读取8个元素,由于位置9中的数值2已经读取过,该位置还没有新的数据写入,所以需要等待写入的推进,读取进程退出等待。
在优选的实施例中,第二服务器可以将所述环形数组存储在中央处理器缓存(cpucache)中,使所述环形数组中的每个可用业务ID占用一个中央处理器缓存线(cpu cacheline)。其中,环形数组中的每个可用业务ID可占用一个中央处理器缓存线(cpu cacheline),即,环形数组中可用业务ID的数量小于或等于中央处理器缓存线的数量,则可以一直保持cpu的高效读取效率。
在本实施例中,环形数组占用的空间是固定且有限的,把该环形数组存储在中央处理器缓存中,环形数组中的每一个可用业务ID占用一个单独的cpu cache line,那么修改其中一个可用业务ID的时候,就不会影响其他可用业务ID,也就不需要重新去内存中读取数据,会极大地提升读取效率,并且解决了伪共享问题。而且,虽然cpu cache line的读取效率很高很快,但是cpu cache line的数量很有限,所以本发明实施例中的RingBuffer是一个环形结构,也就是RingBuffer中的数据量是有限的,只要不超过cpu中cpu cacheline的数量,就可以一直保持cpu的高效读取效率,单台第二服务器即可实现百万并发,并且第二服务器可以水平扩展,假如业务需求更大的话,增加第二服务器数量即可。
在可选的实施例中,第二服务器还用于:创建多个环形数组,所述多个环形数组对应不同的业务类型;确定所述多个可用业务ID对应的业务类型,将所述多个可用业务ID写入与其业务类型对应的环形数组中;以及根据所述ID申请请求对应的业务类型,从所述多个环形数组中确定目标环形数组,从所述目标环形数组中获取与所述ID申请请求对应的目标业务ID。在本实施例中,因为各业务的ID是独立的,相互之间没有冲突关系,因此可以为不同的业务分部创建一个环形数组。例如,可以为订单业务、产品业务和售后业务各创建一个环形数组。第二服务器在生成可用业务ID之后,将该可用业务ID写入对应的环形数组中。在接收到ID申请请求之后,首先判断该ID申请请求对应的业务类型,然后从与该业务类型对应的环形数组中获取可用业务ID。
本发明实施例的生成分布式ID的系统,在某一台服务器或者某一个机房故障时,整个系统仍然可用,适用于大型的金融级项目;具有跨城市访问的能力,不同城市的业务服务器都能访问到本城市的服务器,提高了访问效率。
图7是本发明另一实施例的生成分布式ID的系统的结构示意图。如图7所示,该生成分布式ID的系统包括分布式数据库集群101、第一服务器集群102和第二服务器集群103。其中,分布式数据库集群101为OceanBase数据库集群,分布式数据库是OceanBase数据库。第一服务器集群为ZooKeeper服务器集群,第一服务器为ZooKeeper服务器。第二服务器集群为ID分发服务器集群,第二服务器为ID分发服务器。在图2中,共有5台OceanBase服务器,该5台OceanBase服务器属于同一个OceanBase集群,5台ZooKeeper服务器属于同一个ZooKeeper集群,ID分发服务器从OceanBase服务器获取到ID可用号段,从ZooKeeper取到该ID分发服务器的ID,将两部分拼接成业务ID。值得说明的是,无论是OceanBase集群还是ZooKeeper集群,都是分布在多个城市多个机房,这样组成基于两地三中心的架构集群,实现了机房级别的高可用,即使某个机房出现断网断电或坍塌,也不会影响整个金融级的业务使用;ID发服务器也根据业务需求分布在不同的城市不同的机房,同时通过相关命令将本地节点所需要的数据的主节点固定在OceanBase的本地节点上,这样ID分发服务器在去OceanBase去数据时候效率会更高。
在本实施例中,OceanBase生成ID可用号段的表结构如下表1所示(假设有三个有ID需求的业务):
business_name | max_ID | step | update_time | description |
order | 0 | 8192 | 订单 | |
product | 16384 | 8192 | 产品 | |
after_sale | 8192 | 8192 | 售后 |
OceanBase数据库集群将生成的ID范围存储于表中,max_ID表示目前已分配的ID最大值,初始值为0,表示还没有分配,step表示步长,即一次分配的ID数量,这里采用2的13次方也就是8192个,OceanBase数据库每次通过修改一个值,即执行sql(update table setmax_ID=max_ID+8192where business_name=’order’;)就为订单生成了8192个ID,订单表order中的max_ID为0表示还没有开始分配ID,产品表product的max_ID为16384表示已经分配过两次,售后表after_sale的max_ID为8192表示已经分配过一次。ZooKeeper的子节点的尾号就是要用到的分发服务器ID,ZooKeeper会为每一个子节点自动生成一个递增的顺序ID,并且不会重复,所以本实施例会把这个ID作为分发服务器的ID。ID分发服务器分别为订单、产品、售后创建了一个RingBuffer,ID分发服务器把从OceanBase数据库集群申请到的ID和从ZooKepeer中获取到的分发服务器ID合并成64bit的完整ID,存储于本地的RingBuffer中,每个ID分发服务器会分别为每一个有ID需求的业务创建一个RingBuffer。(这个RingBuffer是本方案中的程序去实现的,程序去创建这个RingBuffer,因为订单或者产品等这些不同的业务需要的ID是独立,互相之间没有冲突关系,所以程序为了每个业务创建了不同的RingBuffer,这样效率更高,性能更好)订单、产品、售后需要用到ID时,通过访问ID分发服务器,来取走预先存在RingBuffer中的ID。
本发明实施例的生成分布式ID的系统,通过分布式数据库集群生成并存储ID可用号段,所述ID可用号段中包括多个依次增大的可用序列值;第一服务器集群确定所述第二服务器集群中每个第二服务器的ID;其中,所述每个第二服务器的ID依次增大;第二服务器集群根据所述ID可用号段和各第二服务器的ID,生成多个可用业务ID;以及根据ID申请请求,从所述多个可用业务ID中确定与所述ID申请请求对应的目标业务ID的方式,能够保证在某一台服务器或者某一个机房出问题的情况下,整个系统依然具有高可用性,能够跨城市跨机房访问,适用于大型的金融级项目。
图8是本发明另一实施例的生成分布式ID的系统800的架构示意图,如图8所示,该系统800包括:分布式数据库集群801、第一服务器集群802、第二服务器集群803和负载均衡装置804。
其中,所述分布式数据库集群801,用于生成并存储ID可用号段,所述ID可用号段中包括多个依次增大的可用序列值;
所述第一服务器集群802,用于确定所述第二服务器集群中每个第二服务器的ID;其中,所述每个第二服务器的ID依次增大;
所述第二服务器集群803,用于获取所述ID可用号段和各第二服务器的ID,根据所述ID可用号段和各第二服务器的ID,生成多个可用业务ID;以及根据ID申请请求,从所述多个可用业务ID中确定与所述ID申请请求对应的目标业务ID。
所述负载均衡装置804,用于接收所述ID申请请求,并确定与所述ID申请请求对应的目标机房以及所述目标机房中的目标第二服务器,以使所述目标第二服务器确定与所述ID申请请求对应的目标业务ID。
其中,分布式数据库集群801、第一服务器集群802、第二服务器集群803可以参考图1所示的实施例,本发明在此不再赘述。
在本实施例中,负载均衡装置用于接收业务端发送的ID申请请求,根据该ID申请请求,确定对应的目标机房和目标第二服务器,从而使得各个第二服务器的负载均衡,以提高效率系统稳定性。具体的,负载均衡装置根据ID申请请求对应的权重来确定对应的目标机房以及所述目标机房中的目标第二服务器。其中,ID申请请求对应的权重由第一权重和第二权重构成,根据所述第一权重,确定与所述ID申请请求对应的目标机房;根据所述第二权重,确定与所述ID申请请求对应的目标机房中的目标第二服务器。作为示例,权重值一共6位,前三位为一级权重(即第一权重),后三位为二级权重(即第二权重)。申请ID的业务方,比如订单业务,想要申请ID,会从负载均衡中获取订单业务针对不同AZ的权重,这个针对AZ的权重作为一级权重,前三位代表一级权重,一级权重最大为999,最小为000,比如订单的AZ1权重是999,其他AZ为000,那么就代表订单都只会从AZ1获取ID,权重的后三位作为二级权重,代表AZ中的某台ID第二服务器的权重,假如订单针对AZ1的第一台服务器的权重是999,其他服务器均为000,那么就代表订单,只会从AZ1的第一台第二服务器上获取ID。
在可选的实施例中,负载均衡装置还用于定时检测所述多个第二服务器的工作状态,该工作状态包括故障和正常。即负载均衡装置还用于定期对第二服务器的进行故障检测,以供决定是否切换访问的服务器。负载均衡装置在检测到工作状态为故障的第二服务器时,根据配置信息,确定是否将与所述故障的第二服务器对应的ID申请请求自动切换到对应的候补第二服务器上;若是,则在接收到与所述故障的第二服务器对应的ID申请请求时,将与所述故障的第二服务器对应的ID申请请求自动切换到所述候补第二服务器上。其中,切换包括手动切换和自动切换。例如,负载均衡装置检查到某个AZ出了问题,或者检查到某台服务器出现问题,那么传统的负载均衡会自动切换到其他AZ或者切换到其他服务器,但是因为有些业务不能切换到与申请ID的业务方不在同一个AZ的服务器,所以不想自动切换,这时负载均衡装置可针对不同的申请ID的业务方的配置信息确定是否自动切换,如果否,那么当方式AZ故障后会等待故障解决后继续服务,如果是,那么会自动切换到其他AZ。
本发明实施例的生成分布式ID的系统,通过分布式数据库集群生成并存储ID可用号段,所述ID可用号段中包括多个依次增大的可用序列值;第一服务器集群确定所述第二服务器集群中每个第二服务器的ID;其中,所述每个第二服务器的ID依次增大;第二服务器集群根据所述ID可用号段和各第二服务器的ID,生成多个可用业务ID;以及根据ID申请请求,从所述多个可用业务ID中确定与所述ID申请请求对应的目标业务ID的方式,能够保证在某一台服务器或者某一个机房出问题的情况下,整个系统依然具有高可用性,能够跨城市跨机房访问,适用于大型的金融级项目;通过负载均衡策略保证各个第二服务器的负载均衡,提高了效率和系统稳定性。
图9是本发明实施例的生成分布式ID的方法的主要步骤的流程示意图,如图9所示,该方法包括分布式数据库集群、第一服务器集群和第二服务器集群。该方法包括如下步骤:
步骤S901:生成ID可用号段,并将所述ID可用号段存储在所述分布式数据库集群中;所述ID可用号段中包括多个依次增大的可用序列值;
步骤S902:基于所述第一服务器集群,确定所述第二服务器集群中每个第二服务器的ID;
步骤S903:根据所述ID可用号段和各第二服务器的ID,生成多个可用业务ID;
步骤S904:根据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;以及根据ID申请请求,从所述多个可用业务ID中确定与所述ID申请请求对应的目标业务ID的方式,能够保证在某一台服务器或者某一个机房出问题的情况下,整个系统依然具有高可用性,能够跨城市跨机房访问,适用于大型的金融级项目。
图10示出了可以应用本发明实施例的生成分布式ID的方法或生成分布式ID的装置的示例性系统架构1000。
如图10所示,系统架构1000可以包括终端设备1001、1002、1003,网络1004和服务器1005。网络1004用以在终端设备1001、1002、1003和服务器1005之间提供通信链路的介质。网络1004可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备1001、1002、1003通过网络1004与服务器1005交互,以接收或发送消息等。终端设备1001、1002、1003上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等。
终端设备1001、1002、1003可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器1005可以是提供各种服务的服务器,例如对用户利用终端设备1001、1002、1003所浏览的购物类网站提供支持的后台管理服务器。后台管理服务器可以对接收到的产品信息查询请求等数据进行分析等处理,并将处理结果(例如目标推送信息、产品信息)反馈给终端设备。
需要说明的是,本发明实施例所提供的生成分布式ID的方法一般由服务器1005执行,相应地,生成分布式ID的装置一般设置于服务器1005中。
应该理解,图10中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
下面参考图11,其示出了适于用来实现本发明实施例的终端设备的计算机系统1100的结构示意图。图11示出的终端设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图11所示,计算机系统1100包括中央处理单元(CPU)1101,其可以根据存储在只读存储器(ROM)1102中的程序或者从存储部分1108加载到随机访问存储器(RAM)1103中的程序而执行各种适当的动作和处理。在RAM 1103中,还存储有系统1100操作所需的各种程序和数据。CPU 1101、ROM 1102以及RAM 1103通过总线1104彼此相连。输入/输出(I/O)接口1105也连接至总线1104。
以下部件连接至I/O接口1105:包括键盘、鼠标等的输入部分1106;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分1107;包括硬盘等的存储部分1108;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分1109。通信部分1109经由诸如因特网的网络执行通信处理。驱动器1110也根据需要连接至I/O接口1105。可拆卸介质1111,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1110上,以便于从其上读出的计算机程序根据需要被安装入存储部分1108。
特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分1109从网络上被下载和安装,和/或从可拆卸介质1111被安装。在该计算机程序被中央处理单元(CPU)1101执行时,执行本发明的系统中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括发送模块、获取模块、确定模块和第一处理模块。其中,这些模块的名称在某种情况下并不构成对该单元本身的限定,例如,发送模块还可以被描述为“向所连接的服务端发送图片获取请求的模块”。
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:
生成ID可用号段,并将所述ID可用号段存储在所述分布式数据库集群中;所述ID可用号段中包括多个依次增大的可用序列值;
基于所述第一服务器集群,确定所述第二服务器集群中每个第二服务器的ID;
根据所述ID可用号段和各第二服务器的ID,生成多个可用业务ID;
根据ID申请请求,从所述多个可用业务ID中确定与所述ID申请请求对应的目标业务ID。
本发明实施例的技术方案,能够保证在某一台服务器或者某一个机房出问题的情况下,整个系统依然具有高可用性,能够跨城市跨机房访问,适用于大型的金融级项目。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
Claims (29)
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服务器集群;
所述第一服务器集群用于:根据所述ZooKeeper服务器集群中的子节点的ID,确定每个第二服务器的ID。
17.一种生成分布式ID的方法,其特征在于,所述方法包括分布式数据库集群、第一服务器集群和第二服务器集群;所述方法还包括:
生成ID可用号段,并将所述ID可用号段存储在所述分布式数据库集群中;所述ID可用号段中包括多个依次增大的可用序列值;
基于所述第一服务器集群,确定所述第二服务器集群中每个第二服务器的ID;
根据所述ID可用号段和各第二服务器的ID,生成多个可用业务ID;
根据ID申请请求,从所述多个可用业务ID中确定与所述ID申请请求对应的目标业务ID。
18.根据权利要求17所述的方法,其特征在于,根据所述ID可用号段和各第二服务器的ID,生成多个可用业务ID包括:
将所述ID可用号段中的每个所述可用序列值与所述第二服务器的ID进行拼接,对拼接后得到的可用序列值进行补齐,将补齐后的可用序列值作为可用业务ID。
19.根据权利要求18所述的方法,其特征在于,根据ID申请请求,从所述多个可用业务ID中确定与所述ID申请请求对应的目标业务ID包括:
将所述多个可用业务ID写入预设的环形数组;
根据ID申请请求,从所述环形数组中获取与所述ID申请请求对应的目标业务ID。
20.根据权利要求19所述的方法,其特征在于,所述方法还包括:创建多个环形数组,所述多个环形数组对应不同的业务类型;
将所述多个可用业务ID写入预设的环形数组包括:确定所述多个可用业务ID对应的业务类型,将所述多个可用业务ID写入与其业务类型对应的环形数组中;
从所述环形数组中获取与所述ID申请请求对应的目标业务ID包括:根据所述ID申请请求对应的业务类型,从所述多个环形数组中确定目标环形数组,从所述目标环形数组中获取与所述ID申请请求对应的目标业务ID。
21.根据权利要求20所述的方法,其特征在于,所述方法还用于:将所述多个环形数组存储在中央处理器缓存中,使所述环形数组中的每个可用业务ID占用一个中央处理器缓存线。
22.根据权利要求17-21任一项所述的方法,其特征在于,所述分布式数据库集群包括多个分布式数据库,所述多个分布式数据库分布在多个城市的多个机房中;
所述第一服务器集群包括多个第一服务器,所述多个第一服务器分布在所述多个城市的多个机房中;
所述第二服务器集群包括多个第二服务器,所述多个第二服务器分布在所述多个城市的多个机房中。
23.根据权利要求22所述的方法,其特征在于,所述方法还包括:接收所述ID申请请求,并确定与所述ID申请请求对应的目标机房以及所述目标机房中的目标第二服务器,以使所述目标第二服务器确定与所述ID申请请求对应的目标业务ID。
24.根据权利要求22所述的方法,其特征在于,确定与所述ID申请请求对应的目标机房以及所述目标机房中的目标第二服务器包括:确定所述ID申请请求对应的权重;基于所述权重,确定与所述ID申请请求对应的目标机房以及所述目标机房中的目标第二服务器。
25.根据权利要求24所述的方法,其特征在于,所述权重包括第一权重和第二权重;
基于所述权重,确定与所述ID申请请求对应的目标机房以及所述目标机房中的目标第二服务器包括:根据所述第一权重,确定与所述ID申请请求对应的目标机房;根据所述第二权重,确定与所述ID申请请求对应的目标机房中的目标第二服务器。
26.根据权利要求23所述的方法,其特征在于,所述方法还包括定时检测所述多个第二服务器的工作状态。
27.根据权利要求26所述的方法,其特征在于,所述工作状态包括故障;
所述方法还包括:在检测到工作状态为故障的第二服务器时,根据配置信息,确定是否将与所述故障的第二服务器对应的ID申请请求自动切换到对应的候补第二服务器上;若是,则在接收到与所述故障的第二服务器对应的ID申请请求时,将与所述故障的第二服务器对应的ID申请请求自动切换到所述候补第二服务器上。
28.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求17-27中任一所述的方法。
29.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求17-27中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110566730.8A CN113297327A (zh) | 2021-05-24 | 2021-05-24 | 生成分布式id的系统和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110566730.8A CN113297327A (zh) | 2021-05-24 | 2021-05-24 | 生成分布式id的系统和方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113297327A true CN113297327A (zh) | 2021-08-24 |
Family
ID=77324481
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110566730.8A Pending CN113297327A (zh) | 2021-05-24 | 2021-05-24 | 生成分布式id的系统和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113297327A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114172792A (zh) * | 2021-12-13 | 2022-03-11 | 武汉众邦银行股份有限公司 | 一种保证服务高可用的序号生成方法的实现方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109753544A (zh) * | 2019-01-04 | 2019-05-14 | 中国银行股份有限公司 | 数据库序列处理方法、系统及基于同步锁的节点服务器 |
CN109936642A (zh) * | 2019-01-28 | 2019-06-25 | 中国银行股份有限公司 | 一种分布式系统中生成机器id的方法、装置及系统 |
CN110162573A (zh) * | 2019-05-05 | 2019-08-23 | 中国银行股份有限公司 | 一种分布式序列生成方法、装置及系统 |
CN111046057A (zh) * | 2019-12-26 | 2020-04-21 | 京东数字科技控股有限公司 | 服务器集群的数据处理方法、装置、计算机设备和介质 |
-
2021
- 2021-05-24 CN CN202110566730.8A patent/CN113297327A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109753544A (zh) * | 2019-01-04 | 2019-05-14 | 中国银行股份有限公司 | 数据库序列处理方法、系统及基于同步锁的节点服务器 |
CN109936642A (zh) * | 2019-01-28 | 2019-06-25 | 中国银行股份有限公司 | 一种分布式系统中生成机器id的方法、装置及系统 |
CN110162573A (zh) * | 2019-05-05 | 2019-08-23 | 中国银行股份有限公司 | 一种分布式序列生成方法、装置及系统 |
CN111046057A (zh) * | 2019-12-26 | 2020-04-21 | 京东数字科技控股有限公司 | 服务器集群的数据处理方法、装置、计算机设备和介质 |
Non-Patent Citations (4)
Title |
---|
华师傅资讯: "《局域网组建应用与维护实用宝典》", 中国铁道出版社, pages: 405 - 406 * |
即时通讯网: "IM消息ID技术专题(六):深度解密滴滴的高性能ID生成器(Tinyid)", 《HTTPS://MP.WEIXIN.QQ.COM/S/1VSHGLDUQ-EJWBFURWPXQQ》, 1 September 2020 (2020-09-01) * |
小哈学JAVA: "干货|一文带您搞懂常见分布式ID生成方案", 《HTTPS://MP.WEIXIN.QQ.COM/S/_TGKJXEY-EMBPW8LCRNJVW》 * |
小哈学JAVA: "干货|一文带您搞懂常见分布式ID生成方案", 《HTTPS://MP.WEIXIN.QQ.COM/S/_TGKJXEY-EMBPW8LCRNJVW》, 10 July 2019 (2019-07-10) * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114172792A (zh) * | 2021-12-13 | 2022-03-11 | 武汉众邦银行股份有限公司 | 一种保证服务高可用的序号生成方法的实现方法及装置 |
CN114172792B (zh) * | 2021-12-13 | 2023-07-28 | 武汉众邦银行股份有限公司 | 一种保证服务高可用的序号生成方法的实现方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110609872B (zh) | 用于同步节点数据的方法和装置 | |
CN112307037B (zh) | 一种数据同步方法和装置 | |
CA2964461C (en) | Composite partition functions | |
CN111723160A (zh) | 一种多源异构增量数据同步方法及系统 | |
US20070078911A1 (en) | Replicating data across the nodes in a cluster environment | |
CN112527899A (zh) | 数据同步的方法、装置、设备以及存储介质 | |
CN109032796B (zh) | 一种数据处理方法和装置 | |
CN111143382A (zh) | 数据处理方法、系统和计算机可读存储介质 | |
CN113193947B (zh) | 实现分布式全局序的方法、设备、介质及程序产品 | |
US20210064473A1 (en) | Method and device for failover in hbase system, and non-transitory computer-readable storage medium | |
CN113076304A (zh) | 一种分布式版本管理方法、装置和系统 | |
CN113407637A (zh) | 一种数据同步方法、装置、电子设备以及存储介质 | |
CN111666344A (zh) | 异构数据同步方法及装置 | |
CN113190517B (zh) | 数据集成方法、装置、电子设备和计算机可读介质 | |
CN113127564B (zh) | 一种参数同步方法和装置 | |
CN113297327A (zh) | 生成分布式id的系统和方法 | |
CN114416868A (zh) | 一种数据同步方法、装置、设备及存储介质 | |
CN111414356A (zh) | 数据存储方法、装置、非关系数据库系统及存储介质 | |
CN116540938A (zh) | 数据读取方法、装置、分布式存储系统、设备和存储介质 | |
CN111444148A (zh) | 基于MapReduce的数据传输方法和装置 | |
CN112115206A (zh) | 一种处理对象存储元数据的方法和装置 | |
CN113448757B (zh) | 消息处理方法、装置、设备、存储介质和系统 | |
CN113761075A (zh) | 切换数据库的方法、装置、设备和计算机可读介质 | |
CN111930841A (zh) | 数据同步方法及装置 | |
CN114745438B (zh) | 多数据中心的缓存数据处理方法、装置、系统和电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20221008 Address after: 25 Financial Street, Xicheng District, Beijing 100033 Applicant after: CHINA CONSTRUCTION BANK Corp. Address before: 12 / F, 15 / F, No. 99, Yincheng Road, Shanghai pilot Free Trade Zone, 200120 Applicant before: Jianxin Financial Science and Technology Co.,Ltd. |
|
TA01 | Transfer of patent application right |