CN112351110A - 基于zookeeper的ID分配方法、装置 - Google Patents

基于zookeeper的ID分配方法、装置 Download PDF

Info

Publication number
CN112351110A
CN112351110A CN202011362857.XA CN202011362857A CN112351110A CN 112351110 A CN112351110 A CN 112351110A CN 202011362857 A CN202011362857 A CN 202011362857A CN 112351110 A CN112351110 A CN 112351110A
Authority
CN
China
Prior art keywords
node
temporary ordered
zookeeper service
instance
zookeeper
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.)
Granted
Application number
CN202011362857.XA
Other languages
English (en)
Other versions
CN112351110B (zh
Inventor
卢炳伸
范渊
刘博�
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hangzhou Dbappsecurity Technology Co Ltd
Original Assignee
Hangzhou Dbappsecurity Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hangzhou Dbappsecurity Technology Co Ltd filed Critical Hangzhou Dbappsecurity Technology Co Ltd
Priority to CN202011362857.XA priority Critical patent/CN112351110B/zh
Publication of CN112351110A publication Critical patent/CN112351110A/zh
Application granted granted Critical
Publication of CN112351110B publication Critical patent/CN112351110B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/02Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
    • H04L67/025Protocols based on web technology, e.g. hypertext transfer protocol [HTTP] for remote control or remote monitoring of applications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1097Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/14Session management
    • H04L67/146Markers for unambiguous identification of a particular session, e.g. session cookie or URL-encoding

Abstract

本申请涉及一种基于zookeeper的ID分配方法、装置、电子设备及存储介质,该方法包括:获取客户端参数,建立与zookeeper服务的连接;创建IdxGen实例;从zookeeper服务获取初始化的临时有序节点的节点编号,分配给IdxGen实例;遍历zookeeper服务上的orderNode,获取节点顺序列表;从zookeeper服务的dataNode上获取所有已用的节点编号,根据节点顺序列表和已用的节点编号,确定zookeeper服务中未使用的临时有序节点;为未使用的临时有序节点注册事件监听器,当事件监听器监听到实例被销毁或与zookeeper服务断开连接时,删除未使用的临时节点的信息。

Description

基于zookeeper的ID分配方法、装置
技术领域
本发明涉及电子技术领域,特别是涉及一种基于zookeeper的ID分配方法、装置,以及电子设备及存储介质。
背景技术
zookeeper是是一个分布式的、开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件,其提供的功能包括:配置维护、名字服务、分布式同步、组服务等。
在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识,而且通常有以下几点需求:全局唯一性、趋势递增和信息安全。Leaf-snowflake方案是目前常用的分布式ID生成方案,Leaf-snowflake方案完全沿用snowflake方案的bit位设计,即是“1+41+10+12”的方式组装ID号。对于workerID的分配,当服务集群数量较小的情况下,完全可以手动配置。Leaf服务规模较大,动手配置成本太高。所以使用Zookeeper持久顺序节点的特性自动对snowflake节点配置wokerID。
然而,现有的Leaf-snowflake方案难点在于序列号的长度是有限制的,分配给机器编号的bit位也是有限制的。在实际生产环境中,虽然机器的编号有限,但是如何将可用的节点号分配给不同的机器依然是一个比较难处理的点。同一台应用可能会有多个实例,同一台机器上可能会部署多个应用,使用配置文件去固定一个ID会大大的增加运维成本,如何去动态分配ID并且避免重复是当前亟需解决的问题之一。
发明内容
鉴于上述状况,提供一种基于zookeeper的ID分配方法、装置、电子设备及存储介质,以实现机器编号动态分配和唯一性。
第一方面,本申请实施例提供了一种基于zookeeper的ID分配方法,包括:
获取客户端参数,并根据所述客户端参数建立与zookeeper服务之间的连接;
创建IdxGen实例;
从zookeeper服务获取初始化的临时有序节点的节点编号,并分配给所述IdxGen实例;
遍历zookeeper服务上的orderNode,以获取节点顺序列表,所述节点顺序列表包括所有临时有序节点的节点编号;
从zookeeper服务的dataNode上获取所有已用的临时有序节点的节点编号,并根据所述节点顺序列表和所述已用的临时有序节点的节点编号,确定zookeeper服务中未使用的临时有序节点;
为所述未使用的临时有序节点注册事件监听器,并当所述事件监听器监听到实例被销毁或与zookeeper服务断开连接时,删除所述未使用的临时节点的信息。
进一步的,上述ID分配方法,其中,所述从zookeeper服务获取初始化的临时有序节点的节点编号,并分配给所述IdxGen实例的步骤之后还包括:
为所述IdxGen实例对应的临时有序节点分配分布式锁。
进一步的,上述ID分配方法,其中,所述从zookeeper服务获取初始化的临时有序节点的节点编号,并分配给所述IdxGen实例的步骤之前还包括:
遍历zookeeper服务上的orderNode,以获取节点顺序列表;
从zookeeper服务的dataNode上获取所有已用的临时有序节点的节点编号,并根据所述节点顺序列表和所述已用的临时有序节点的节点编号,确定zookeeper服务中是否有未使用的临时有序节点;
若否,初始化orderNode,并执行从zookeeper服务获取初始化的临时有序节点的节点编号,并分配给所述IdxGen实例的步骤。
进一步的,上述ID分配方法,其中,当zookeeper服务中没有未使用的临时有序节点的节点编号时,所述ID分配方法还包括:
将其中一所述未使用的临时有序节点的编号分配给所述IdxGen实例。
进一步的,上述ID分配方法,其中,所述将其中一所述未使用的临时有序节点的编号分配给所述IdxGen实例的步骤:
查询所有所述未使用的临时有序节点的节点编号中最小的一节点编号;
并将所述最小的节点编号分配给所述IdxGen实例。
第二方面,本发明实施例还提供了一种基于zookeeper的ID分配装置,包括:
连接建立模块,用于获取客户端参数,并根据所述客户端参数建立与zookeeper服务之间的连接;
创建模块,用于创建IdxGen实例;
第一ID分配模块,用于从zookeeper服务获取初始化的临时有序节点的节点编号,并分配给所述IdxGen实例;
第一获取模块,用于遍历zookeeper服务上的orderNode,以获取节点顺序列表,所述节点顺序列表包括所有临时有序节点的节点编号;
第一确定模块,用于从zookeeper服务的dataNode上获取所有已用的临时有序节点的节点编号,并根据所述节点顺序列表和所述已用的临时有序节点的节点编号,确定zookeeper服务中未使用的临时有序节点;
监听模块,用于为所述未使用的临时有序节点注册事件监听器,并当所述事件监听器监听到实例被销毁或与zookeeper服务断开连接时,删除所述未使用的临时节点的信息。
进一步的,上述ID分配装置,还包括:
锁分配模块,用于为所述IdxGen实例对应的临时有序节点分配分布式锁。
进一步的,上述ID分配装置,还包括:
第二获取模块,用于遍历zookeeper服务上的orderNode,以获取节点顺序列表;
第二确定模块,用于从zookeeper服务的dataNode上获取所有已用的临时有序节点的节点编号,并根据所述节点顺序列表和所述已用的临时有序节点的节点编号,确定zookeeper服务中是否有未使用的临时有序节点;
执行模块,用于当zookeeper服务中没有未使用的临时有序节点时,初始化orderNode,并确定所述第一ID分配模块执行从zookeeper服务获取初始化的临时有序节点的节点编号,并分配给所述IdxGen实例的步骤。
进一步的,上述ID分配装置,还包括:
第二ID分配模块,用于当zookeeper服务中没有未使用的临时有序节点的节点编号时,将其中一所述未使用的临时有序节点的编号分配给所述IdxGen实例。
第三方面,本申请实施例提供了一种电子设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行第一方面所述的方法。
第四方面,本申请实施例提供了一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行第一方面所述的方法。
相比于相关技术,本发明从zookeeper服务获取初始化的临时有序节点的节点编分配给IdxGen实例,从而使IdxGen实例获取到唯一编号。并且,轮询检测是否有未使用的临时有序节点,若有,则为该未使用的临时有序节点建立监听事件,并当所述事件监听器监听到实例被销毁或与zookeeper服务断开连接时,则删除所述未使用的临时节点的信息,实现机器编号的动态分配。
本发明通过zookeeper监控节点使用状态,确保每个机器拥有不同的机器编号,从而在集群中生成唯一的ID。本发明不仅能去中心化,提高应用获取ID的效率;而且能提高可扩展能力,并由zookeeper集群来确保服务的HA能力,本发明具有实施简便、实用性高等优点。
本申请的一个或多个实施例的细节在以下附图和描述中提出,以使本申请的其他特征、目的和优点更加简明易懂。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为本发明第一实施例中的ID分配方法的流程图;
图2为本发明第二实施例中的ID分配方法的流程图;
图3为本发明第三实施例中的ID分配装置的结构框图;
图4为本发明实施例中电子设备的硬件结构示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行描述和说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。基于本申请提供的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。此外,还可以理解的是,虽然这种开发过程中所作出的努力可能是复杂并且冗长的,然而对于与本申请公开的内容相关的本领域的普通技术人员而言,在本申请揭露的技术内容的基础上进行的一些设计,制造或者生产等变更只是常规的技术手段,不应当理解为本申请公开的内容不充分。
在本申请中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域普通技术人员显式地和隐式地理解的是,本申请所描述的实施例在不冲突的情况下,可以与其它实施例相结合。
除非另作定义,本申请所涉及的技术术语或者科学术语应当为本申请所属技术领域内具有一般技能的人士所理解的通常意义。本申请所涉及的“一”、“一个”、“一种”、“该”等类似词语并不表示数量限制,可表示单数或复数。本申请所涉及的术语“包括”、“包含”、“具有”以及它们任何变形,意图在于覆盖不排他的包含;例如包含了一系列步骤或模块(单元)的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可以还包括没有列出的步骤或单元,或可以还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。本申请所涉及的“连接”、“相连”、“耦接”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电气的连接,不管是直接的还是间接的。本申请所涉及的“多个”是指大于或者等于两个。“和/或”描述关联对象的关联关系,表示可以存在三种关系,例如,“A和/或B”可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。本申请所涉及的术语“第一”、“第二”、“第三”等仅仅是区别类似的对象,不代表针对对象的特定排序。
请参阅图1,为本发明第一实施例中的基于zookeeper的ID分配方法,包括步骤S11~S15。
步骤S11,获取客户端参数,并根据所述客户端参数建立与zookeeper服务之间的连接。
本实施例中的ID分配方法应用于服务器,该本地主机服务器,也可以是云服务器。该服务器采用组件框架加注册中心插件的方式实现,具体实施时,用户可以在应用上层选择要使用的配置文件类型,如选择实现了zookeeper注册中心功能的配置文件。组件框架会根据用户选择的配置文件类信息,通过spi服务检测到可用的注册中心服务,如zookeeper服务。
获取客户端数据,该客户端数据包括host port rootNode(主机端口根节点)的绝对路径、orderNode(顺序节点)和dataNode(数据节点)的相对路径,以及该超时参数等,根据该客户客户端参数创建与zookeeper服务之间的连接。
步骤S12,创建IdxGen实例,从zookeeper服务获取初始化的临时有序节点的节点编号,并分配给所述IdxGen实例。
该服务器可通过调用工厂类方法创建IdxGen实例,具体实施时,同一个应用可创建多个IdxGen实例。服务器通过zookeeper服务为创建的IdxGen实例分配初始化的机器编号。即用户在初始化发号器对象时,会根据spi机制获取到zookeeper服务的实现类,并调用初始化获取机器编号的接口获取机器编号。服务器采用snowflake生成分布式ID。
该机器编号为zookeeper服务中创建的临时有序节点的节点编号。该临时有序节点的节点编号为节点创建成功时,取得的回顺序号,即为唯一的ID号。
步骤S13,遍历zookeeper服务上的orderNode,以获取节点顺序列表,所述节点顺序列表包括所有临时有序节点的节点编号。
具体实施时,服务器遍历zookeeper服务上的所有orderNode,并确定该orderNode下的所有临时有序节点和对应的节点编号,从而得到节点顺序列表。
步骤S14,从zookeeper服务的dataNode上获取所有已用的临时有序节点的节点编号,并根据所述节点顺序列表和所述已用的临时有序节点的节点编号,确定zookeeper服务中未使用的临时有序节点。
步骤S15,为所述未使用的临时有序节点注册事件监听器,并当所述事件监听器监听到实例被销毁或与zookeeper服务断开连接时,删除所述未使用的临时节点的信息。
服务器遍历zookeeper服务上的所有dataNode,并获取所有已用的临时节点的节点编号。并与该节点顺序列表进行比对,以确定所有未使用的临时有序节点,并为该未使用的临时有序节点添加监听器。该监听器用于监听该未使用的临时有序节点的使用情况,即监听该未使用的临时有序节点上的实例是否被销毁,或与zookeeper服务断开连接。当监听到该未使用的临时有序节点上的实例是被销毁,或与zookeeper服务断开连接时,orderNode将会删除这个未使用的临时有序节点的节点信息。
由于算法中机器编号占用的bit位数有限,机器编号的总数是有限,因此,不再工作的发号器实例的机器编号应该要被回收,否则新的发号器实例将无法被初始化。本实施例通过为临时有序节点创建监听器来监听节点的断开情况,并可在创建IdxGen实例时重复使用,例如可以bean类的方式往spring的IOC容器中注册。
本实施例从zookeeper服务获取初始化的临时有序节点的节点编分配给IdxGen实例,从而使IdxGen实例获取到唯一编号。并且,轮询检测是否有未使用的临时有序节点,若有,则为该未使用的临时有序节点建立监听事件,并当所述事件监听器监听到实例被销毁或与zookeeper服务断开连接时,则删除所述未使用的临时节点的信息,实现机器编号的动态分配。
本实施例应用在启动和运行过程中,由zookeeper监控状态,确保每个机器拥有不同的机器编号,从而在集群中生成唯一的ID。本实施例不仅能去中心化,提高应用获取ID的效率;而且能提高可扩展能力,并由zookeeper集群来确保服务的HA能力,本发明具有实施简便、实用性高等优点。
请参阅图2,为本发明第二实施例中的ID分配方法,包括步骤S21~S29。
步骤S21,获取客户端参数,并根据所述客户端参数建立与zookeeper服务之间的连接。
步骤S22,创建IdxGen实例。
步骤S23,遍历zookeeper服务上的orderNode,以获取节点顺序列表。
步骤S24,从zookeeper服务的dataNode上获取所有已用的临时有序节点的节点编号,并根据所述节点顺序列表和所述已用的临时有序节点的节点编号,确定zookeeper服务中是否有未使用的临时有序节点。
步骤S25,当zookeeper服务中没有未使用的临时有序节点时,将初始化orderNode,并从zookeeper服务获取初始化的临时有序节点的节点编号,并分配给所述IdxGen实例。
当检测到该zookeeper服务中没有未使用的临时有序节点时,则重新遍历和初始化orderNode,并获取初始化的临时有序节点的节点编号。
步骤S26,当zookeeper服务中有未使用的临时有序节点时,将其中一所述未使用的临时有序节点的编号分配给所述IdxGen实例。
可以理解的,当未使用的临时有序节点有一个时,直接将该未使用的临时有序节点的序号分配给该IdxGen实例。当该未使用的临时有序节点有多个时,将节点编号最小的一个分配给该IdxGen实例。
步骤S27,遍历zookeeper服务上的orderNode,以获取节点顺序列表,所述节点顺序列表包括所有临时有序节点的节点编号。
步骤S28,从zookeeper服务的dataNode上获取所有已用的临时有序节点的节点编号,并根据所述节点顺序列表和所述已用的临时有序节点的节点编号,确定zookeeper服务中未使用的临时有序节点。
步骤S29,为所述未使用的临时有序节点注册事件监听器,并当所述事件监听器监听到实例被销毁或与zookeeper服务断开连接时,删除所述未使用的临时节点的信息。
本实施例中,每次为IdxGen实例分配节点编号后,都需重新检测该zookeeper服务中是否有未使用的临时有序节点,若有,则为该临时有序节点注册事件监听器。当监听到该未使用的临时有序节点对应上的实例被销毁,或应用与zookeeper服务断开连接时,orderNode将会删除这个未使用的临时有序节点的节点信息。
其中,事件监听器会监测到这个机器节点的状态事件,并将该事件投递到一个内存共享的事件监听队列里面。上层的运算框架会启动一个线程去实时消费这些状态事件变更事件,并根据这些事件找到影响的IdxGen实例列表,进行更变。
进一步的,所述通过zookeeper服务为所述IdxGen实例分配初始化的临时有序节点的节点编号的步骤之后还包括:
为所述IdxGen实例对应的临时有序节点分配分布式锁。
即IdxGen实例分配初始化的临时有序节点的节点编号后,该临时有序节点从分布式锁服务中获取锁,以防止多个实例同时初始化时造成的并发问题。为每一锁的锁参数进行加密处理。其中,该锁参数包括但不限于锁的路径参数、锁的时间参数、锁的名称参数以及变量参数。通过锁参数加密进一步保证了数据的安全性。
请参阅图3,为本发明第三实施例中的基于zookeeper的ID分配装置,包括:
连接建立模块31,用于获取客户端参数,并根据所述客户端参数建立与zookeeper服务之间的连接;
创建模块32,用于创建IdxGen实例;
第一ID分配模块33,用于从zookeeper服务获取初始化的临时有序节点的节点编号,并分配给所述IdxGen实例;
第一获取模块34,用于遍历zookeeper服务上的orderNode,以获取节点顺序列表,所述节点顺序列表包括所有临时有序节点的节点编号;
第一确定模块35,用于从zookeeper服务的dataNode上获取所有已用的临时有序节点的节点编号,并根据所述节点顺序列表和所述已用的临时有序节点的节点编号,确定zookeeper服务中未使用的临时有序节点;
监听模块36,用于为所述未使用的临时有序节点注册事件监听器,并当所述事件监听器监听到实例被销毁或与zookeeper服务断开连接时,删除所述未使用的临时节点的信息。
进一步的,上述ID分配装置,还包括:
锁分配模块,用于为所述IdxGen实例对应的临时有序节点分配分布式锁。
进一步的,上述ID分配装置,还包括:
第二获取模块,用于遍历zookeeper服务上的orderNode,以获取节点顺序列表;
第二确定模块,用于从zookeeper服务的dataNode上获取所有已用的临时有序节点的节点编号,并根据所述节点顺序列表和所述已用的临时有序节点的节点编号,确定zookeeper服务中是否有未使用的临时有序节点;
执行模块,用于当zookeeper服务中没有未使用的临时有序节点时,初始化orderNode,并确定所述第一ID分配模块执行从zookeeper服务获取初始化的临时有序节点的节点编号,并分配给所述IdxGen实例的步骤。
进一步的,上述ID分配装置,还包括:
第二ID分配模块,用于当zookeeper服务中没有未使用的临时有序节点的节点编号时,将其中一所述未使用的临时有序节点的编号分配给所述IdxGen实例。
需要说明的是,上述各个模块可以是功能模块也可以是程序模块,既可以通过软件来实现,也可以通过硬件来实现。对于通过硬件来实现的模块而言,上述各个模块可以位于同一处理器中;或者上述各个模块还可以按照任意组合的形式分别位于不同的处理器中。
本发明实施例所提供的基于zookeeper的ID分配装置,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。
另外,结合图1描述的本申请实施例的基于zookeeper的ID分配方法可以由电子设备来实现,该电子设备可以是服务器。图4为根据本申请实施例的电子设备的硬件结构示意图。
该电子设备可以包括处理器11以及存储有计算机程序指令的存储器12。
具体地,上述处理器11可以包括中央处理器(CPU),或者特定集成电路(Application Specific Integrated Circuit,简称为ASIC),或者可以被配置成实施本申请实施例的一个或多个集成电路。
其中,存储器15可以包括用于数据或指令的大容量存储器。举例来说而非限制,存储器15可包括硬盘驱动器(Hard Disk Drive,简称为HDD)、软盘驱动器、固态驱动器(SolidState Drive,简称为SSD)、闪存、光盘、磁光盘、磁带或通用串行总线(Universal SerialBus,简称为USB)驱动器或者两个或更多个以上这些的组合。在合适的情况下,存储器15可包括可移除或不可移除(或固定)的介质。在合适的情况下,存储器15可在数据处理装置的内部或外部。在特定实施例中,存储器15是非易失性(Non-Volatile)存储器。在特定实施例中,存储器15包括只读存储器(Read-Only Memory,简称为ROM)和随机存取存储器(RandomAccess Memory,简称为RAM)。在合适的情况下,该ROM可以是掩模编程的ROM、可编程ROM(Programmable Read-Only Memory,简称为PROM)、可擦除PROM(Erasable ProgrammableRead-Only Memory,简称为EPROM)、电可擦除PROM(Electrically Erasable ProgrammableRead-Only Memory,简称为EEPROM)、电可改写ROM(Electrically Alterable Read-OnlyMemory,简称为EAROM)或闪存(FLASH)或者两个或更多个以上这些的组合。在合适的情况下,该RAM可以是静态随机存取存储器(Static Random-Access Memory,简称为SRAM)或动态随机存取存储器(Dynamic Random Access Memory,简称为DRAM),其中,DRAM可以是快速页模式动态随机存取存储器(Fast Page Mode Dynamic Random Access Memory,简称为FPMDRAM)、扩展数据输出动态随机存取存储器(Extended Date Out Dynamic RandomAccess Memory,简称为EDODRAM)、同步动态随机存取内存(Synchronous Dynamic Random-Access Memory,简称SDRAM)等。
存储器12可以用来存储或者缓存需要处理和/或通信使用的各种数据文件,以及处理器11所执行的可能的计算机程序指令。
处理器11通过读取并执行存储器12中存储的计算机程序指令,以实现上述实施例中的任意一种基于zookeeper的ID分配方法。
在其中一些实施例中,电子设备还可包括通信接口13和总线10。其中,如图1所示,处理器11、存储器12、通信接口13通过总线10连接并完成相互间的通信。
通信接口13用于实现本申请实施例中各模块、装置、单元和/或设备之间的通信。通信接口13还可以实现与其他部件例如:外接设备、图像/数据采集设备、数据库、外部存储以及图像/数据处理工作站等之间进行数据通信。
总线10包括硬件、软件或两者,将电子设备的部件彼此耦接在一起。总线10包括但不限于以下至少之一:数据总线(Data Bus)、地址总线(Address Bus)、控制总线(ControlBus)、扩展总线(Expansion Bus)、局部总线(Local Bus)。举例来说而非限制,总线10可包括图形加速接口(Accelerated Graphics Port,简称为AGP)或其他图形总线、增强工业标准架构(Extended Industry Standard Architecture,简称为EISA)总线、前端总线(FrontSide Bus,简称为FSB)、超传输(Hyper Transport,简称为HT)互连、工业标准架构(Industry Standard Architecture,简称为ISA)总线、无线带宽(InfiniBand)互连、低引脚数(Low Pin Count,简称为LPC)总线、存储器总线、微信道架构(Micro ChannelArchitecture,简称为MCA)总线、外围组件互连(Peripheral Component Interconnect,简称为PCI)总线、PCI-Express(PCI-X)总线、串行高级技术附件(Serial AdvancedTechnology Attachment,简称为SATA)总线、视频电子标准协会局部(Video ElectronicsStandards Association Local Bus,简称为VLB)总线或其他合适的总线或者两个或更多个以上这些的组合。在合适的情况下,总线10可包括一个或多个总线。尽管本申请实施例描述和示出了特定的总线,但本申请考虑任何合适的总线或互连。
另外,结合上述实施例中的基于zookeeper的ID分配方法,本申请实施例可提供一种存储介质来实现。该存储介质上存储有计算机程序指令;该计算机程序指令被处理器执行时实现上述实施例中的任意一种基于zookeeper的ID分配方法。
本领域的技术人员应该明白,以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

Claims (10)

1.一种基于zookeeper的ID分配方法,其特征在于,包括:
获取客户端参数,并根据所述客户端参数建立与zookeeper服务之间的连接;
创建IdxGen实例;
从zookeeper服务获取初始化的临时有序节点的节点编号,并分配给所述IdxGen实例;
遍历zookeeper服务上的orderNode,以获取节点顺序列表,所述节点顺序列表包括所有临时有序节点的节点编号;
从zookeeper服务的dataNode上获取所有已用的临时有序节点的节点编号,并根据所述节点顺序列表和所述已用的临时有序节点的节点编号,确定zookeeper服务中未使用的临时有序节点;
为所述未使用的临时有序节点注册事件监听器,并当所述事件监听器监听到实例被销毁或与zookeeper服务断开连接时,删除所述未使用的临时节点的信息。
2.如权利要求1所述的ID分配方法,其特征在于,所述从zookeeper服务获取初始化的临时有序节点的节点编号,并分配给所述IdxGen实例的步骤之后还包括:
为所述IdxGen实例对应的临时有序节点分配分布式锁。
3.如权利要求1所述的ID分配方法,其特征在于,所述从zookeeper服务获取初始化的临时有序节点的节点编号,并分配给所述IdxGen实例的步骤之前还包括:
遍历zookeeper服务上的orderNode,以获取节点顺序列表;
从zookeeper服务的dataNode上获取所有已用的临时有序节点的节点编号,并根据所述节点顺序列表和所述已用的临时有序节点的节点编号,确定zookeeper服务中是否有未使用的临时有序节点;
若否,初始化orderNode,并执行从zookeeper服务获取初始化的临时有序节点的节点编号,并分配给所述IdxGen实例的步骤。
4.如权利要求3所述的ID分配方法,其特征在于,当zookeeper服务中没有未使用的临时有序节点的节点编号时,所述ID分配方法还包括:
将其中一所述未使用的临时有序节点的编号分配给所述IdxGen实例。
5.如权利要求4所述的ID分配方法,其特征在于,所述将其中一所述未使用的临时有序节点的编号分配给所述IdxGen实例的步骤:
查询所有所述未使用的临时有序节点的节点编号中最小的一节点编号;
并将所述最小的节点编号分配给所述IdxGen实例。
6.一种基于zookeeper的ID分配装置,其特征在于,包括:
连接建立模块,用于获取客户端参数,并根据所述客户端参数建立与zookeeper服务之间的连接;
创建模块,用于创建IdxGen实例;
第一ID分配模块,用于从zookeeper服务获取初始化的临时有序节点的节点编号,并分配给所述IdxGen实例;
第一获取模块,用于遍历zookeeper服务上的orderNode,以获取节点顺序列表,所述节点顺序列表包括所有临时有序节点的节点编号;
第一确定模块,用于从zookeeper服务的dataNode上获取所有已用的临时有序节点的节点编号,并根据所述节点顺序列表和所述已用的临时有序节点的节点编号,确定zookeeper服务中未使用的临时有序节点;
监听模块,用于为所述未使用的临时有序节点注册事件监听器,并当所述事件监听器监听到实例被销毁或与zookeeper服务断开连接时,删除所述未使用的临时节点的信息。
7.如权利要求6所述的ID分配装置,其特征在于,还包括:
锁分配模块,用于为所述IdxGen实例对应的临时有序节点分配分布式锁。
8.如权利要求6所述的ID分配装置,其特征在于,还包括:
第二获取模块,用于遍历zookeeper服务上的orderNode,以获取节点顺序列表;
第二确定模块,用于从zookeeper服务的dataNode上获取所有已用的临时有序节点的节点编号,并根据所述节点顺序列表和所述已用的临时有序节点的节点编号,确定zookeeper服务中是否有未使用的临时有序节点;
执行模块,用于当zookeeper服务中没有未使用的临时有序节点时,初始化orderNode,并确定所述第一ID分配模块执行从zookeeper服务获取初始化的临时有序节点的节点编号,并分配给所述IdxGen实例的步骤。
9.一种电子设备,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行权利要求1至5中任一项所述的方法。
10.一种存储介质,其特征在于,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行权利要求1至5中任一项所述的方法。
CN202011362857.XA 2020-11-27 2020-11-27 基于zookeeper的ID分配方法、装置 Active CN112351110B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011362857.XA CN112351110B (zh) 2020-11-27 2020-11-27 基于zookeeper的ID分配方法、装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011362857.XA CN112351110B (zh) 2020-11-27 2020-11-27 基于zookeeper的ID分配方法、装置

Publications (2)

Publication Number Publication Date
CN112351110A true CN112351110A (zh) 2021-02-09
CN112351110B CN112351110B (zh) 2022-10-21

Family

ID=74366055

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011362857.XA Active CN112351110B (zh) 2020-11-27 2020-11-27 基于zookeeper的ID分配方法、装置

Country Status (1)

Country Link
CN (1) CN112351110B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113420029A (zh) * 2021-06-25 2021-09-21 陕西浪潮英信科技有限公司 一种分布式系统全局id生成方法、装置、设备及介质
CN113905014A (zh) * 2021-08-27 2022-01-07 拉卡拉支付股份有限公司 用于为终端设备分配id号的方法、服务器和存储介质
CN114363333A (zh) * 2021-12-29 2022-04-15 胜斗士(上海)科技技术发展有限公司 分布式系统中分配机器id的方法、装置、设备与介质

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106713378A (zh) * 2015-07-30 2017-05-24 北京京东尚科信息技术有限公司 实现多个应用服务器提供服务的方法和系统
CN107229525A (zh) * 2017-04-27 2017-10-03 国电南瑞科技股份有限公司 一种基于Zookeeper的电力系统设备模型关键字生成方法
JP2017199436A (ja) * 2017-08-09 2017-11-02 株式会社オービック 識別情報発行装置、識別情報発行方法、及び識別情報発行プログラム
CN108897628A (zh) * 2018-05-25 2018-11-27 北京奇艺世纪科技有限公司 一种分布式锁的实现方法、装置及电子设备
CN109309736A (zh) * 2017-07-28 2019-02-05 北京京东尚科信息技术有限公司 全局唯一id的生成方法和生成装置
CN109936642A (zh) * 2019-01-28 2019-06-25 中国银行股份有限公司 一种分布式系统中生成机器id的方法、装置及系统
CN110795399A (zh) * 2019-09-29 2020-02-14 北京淇瑀信息科技有限公司 一种为应用产生机器id的方法、装置和系统
WO2020082942A1 (zh) * 2018-10-24 2020-04-30 苏宁云计算有限公司 响应超时处理方法、服务器及客户端响应超时处理系统
CN111949406A (zh) * 2020-08-13 2020-11-17 深圳市睿策者科技有限公司 编号资源的分配处理方法、装置、计算机和存储介质

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106713378A (zh) * 2015-07-30 2017-05-24 北京京东尚科信息技术有限公司 实现多个应用服务器提供服务的方法和系统
CN107229525A (zh) * 2017-04-27 2017-10-03 国电南瑞科技股份有限公司 一种基于Zookeeper的电力系统设备模型关键字生成方法
CN109309736A (zh) * 2017-07-28 2019-02-05 北京京东尚科信息技术有限公司 全局唯一id的生成方法和生成装置
JP2017199436A (ja) * 2017-08-09 2017-11-02 株式会社オービック 識別情報発行装置、識別情報発行方法、及び識別情報発行プログラム
CN108897628A (zh) * 2018-05-25 2018-11-27 北京奇艺世纪科技有限公司 一种分布式锁的实现方法、装置及电子设备
WO2020082942A1 (zh) * 2018-10-24 2020-04-30 苏宁云计算有限公司 响应超时处理方法、服务器及客户端响应超时处理系统
CN109936642A (zh) * 2019-01-28 2019-06-25 中国银行股份有限公司 一种分布式系统中生成机器id的方法、装置及系统
CN110795399A (zh) * 2019-09-29 2020-02-14 北京淇瑀信息科技有限公司 一种为应用产生机器id的方法、装置和系统
CN111949406A (zh) * 2020-08-13 2020-11-17 深圳市睿策者科技有限公司 编号资源的分配处理方法、装置、计算机和存储介质

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113420029A (zh) * 2021-06-25 2021-09-21 陕西浪潮英信科技有限公司 一种分布式系统全局id生成方法、装置、设备及介质
CN113420029B (zh) * 2021-06-25 2024-04-12 陕西浪潮英信科技有限公司 一种分布式系统全局id生成方法、装置、设备及介质
CN113905014A (zh) * 2021-08-27 2022-01-07 拉卡拉支付股份有限公司 用于为终端设备分配id号的方法、服务器和存储介质
CN114363333A (zh) * 2021-12-29 2022-04-15 胜斗士(上海)科技技术发展有限公司 分布式系统中分配机器id的方法、装置、设备与介质
CN114363333B (zh) * 2021-12-29 2023-11-28 胜斗士(上海)科技技术发展有限公司 分布式系统中分配机器id的方法、装置、设备与介质

Also Published As

Publication number Publication date
CN112351110B (zh) 2022-10-21

Similar Documents

Publication Publication Date Title
CN112351110B (zh) 基于zookeeper的ID分配方法、装置
CN108632074B (zh) 一种业务配置文件下发方法和装置
CN110896355B (zh) 一种网络切片的选择方法及装置
WO2019232071A1 (en) Aggregation of scalable network flow events
CN109889586B (zh) 通信处理方法、装置、计算机可读介质及电子设备
US9411648B2 (en) Flexible resource configuration management for computing clusters
CN114025021B (zh) 一种跨Kubernetes集群的通信方法、系统、介质和电子设备
CN104572727A (zh) 一种数据查询方法及装置
CN111585887B (zh) 基于多个网络的通信方法、装置、电子设备及存储介质
CN113361913A (zh) 一种通信业务编排方法、装置、计算机设备及存储介质
CN108933844B (zh) 提供dhcp服务的方法及设备
CN106254154B (zh) 一种资源共享方法和装置
CN110798507B (zh) 一种dhcp地址分配记忆的方法与系统
CN107534678B (zh) 建立vnfm与vim之间的连接的方法、装置及系统
CN113904871B (zh) 网络切片的接入方法、pcf实体、终端和通信系统
CN116366606A (zh) 一种ip地址的分配方法、装置、电子设备以及存储介质
CN107547684B (zh) 一种IPv6地址分配方法和装置
CN110545336A (zh) Ip地址替换方法、装置、计算机设备和存储介质
CN111988446B (zh) 一种报文处理方法、装置、电子设备及存储介质
CN113505111B (zh) 一种共享目录挂载方法及分布式网络附加存储系统
JP6233846B2 (ja) 可変長ノンスの生成
CN108228272B (zh) Web容器生成处理方法、设备以及服务器
CN114911577A (zh) 网络隔离规则的设置方法、装置、设备及存储介质
US9184996B2 (en) Thin client system, management server, client environment management method and program
CN112241307A (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
GR01 Patent grant
GR01 Patent grant