CN110795399B - 一种为应用产生机器id的方法、装置和系统 - Google Patents

一种为应用产生机器id的方法、装置和系统 Download PDF

Info

Publication number
CN110795399B
CN110795399B CN201910930811.4A CN201910930811A CN110795399B CN 110795399 B CN110795399 B CN 110795399B CN 201910930811 A CN201910930811 A CN 201910930811A CN 110795399 B CN110795399 B CN 110795399B
Authority
CN
China
Prior art keywords
node
machine
application
directory
catalog
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.)
Active
Application number
CN201910930811.4A
Other languages
English (en)
Other versions
CN110795399A (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.)
Beijing Qilu Information Technology Co Ltd
Original Assignee
Beijing Qilu Information 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 Beijing Qilu Information Technology Co Ltd filed Critical Beijing Qilu Information Technology Co Ltd
Priority to CN201910930811.4A priority Critical patent/CN110795399B/zh
Publication of CN110795399A publication Critical patent/CN110795399A/zh
Application granted granted Critical
Publication of CN110795399B publication Critical patent/CN110795399B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/16File or folder operations, e.g. details of user interfaces specifically adapted to file systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/14Details of searching files based on file metadata
    • G06F16/148File search processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/16File or folder operations, e.g. details of user interfaces specifically adapted to file systems
    • G06F16/162Delete operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/182Distributed file systems

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Library & Information Science (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种为应用产生机器ID的方法、装置、系统和计算机可读介质,其中方法包括:根据应用的名称在zookeeper下创建与应用对应的应用目录,在应用目录下创建第一目录和第二目录,第一目录和第二目录均包括节点;获取与应用相关的属性信息;根据属性信息在第一目录中查找是否已存在与应用的属性信息相匹配的节点,如果有匹配的节点则获取该节点的机器ID信息作为该应用对应的机器ID,如果没有匹配的节点则查找第一目录中所有节点,选取未被使用的数值作为应用的机器ID;在第二目录创建新的节点来存放所选用的机器ID。采用该技术方案,不需要人工参与就能为应用生成唯一机器ID,保证了机器ID的唯一性,便于系统的管理和维护。

Description

一种为应用产生机器ID的方法、装置和系统
技术领域
本发明涉及计算机信息处理领域,具体而言,涉及一种为应用产生机器ID的方法、装置和系统。
背景技术
目前分布式系统中很多应用场景需要使用全局唯一识别码(Identifier,ID)。唯一的全局ID指应用场景中的所有全局ID均不重复,即任何两个全局ID之间不会冲突。
最初采用的技术是通用唯一识别码(Universally Unique Identifier,UUID)作为唯一的全局ID。UUID通常由当前日期和时间、时钟序列以及全局唯一的机器序列号(例如网卡的媒体访问控制(Media Access Control,MAC)地址)组成,但UUID的存储形式无序,过长,而且难以建立索引。
目前引入的是Twitter公司的雪花算法,雪花算法生成的全局ID是一个64bit的long类型,包括41位时间,10位机器ID,12位序列号。
在分布式应用中为了保证生成的全局ID是唯一的,同个应用不同的进程需要设置不同的机器ID,才能保证应用的使用雪花算法时产生应用级别的唯一全局ID。目前常用的机器ID生成方法一是人工设定,但这种方法由于需要人工保证机器ID号不重复,所以出错率也比较高,维护成本高。二是根据IP地址设定机器ID,直接将IP地址的一段数值作为机器ID,但当机器不在同一个网段时容易出现重复机器ID,导致全局ID不唯一。
因此,目前急需一种在分布式应用中能够生成唯一机器ID,并且不需要人工参与、便于系统管理和维护的解决方案。
发明内容
本发明旨在解决现有分布式应用中机器ID生成容易出现重复,管理和维护成本高的问题。
为了解决上述技术问题,本发明第一方面提出一种为应用产生机器ID的方法,包括:
S1、根据应用的名称在zookeeper下创建与应用对应的应用目录,在所述应用目录下创建第一目录和第二目录,所述第一目录和第二目录均包括节点,第一目录的节点为永久节点,第二目录的节点为临时节点,所述节点用于记录在不同客户端启动的应用的机器ID;
S2、获取与所述应用相关的属性信息;
S3、根据所述属性信息在第一目录中查找是否已存在与所述应用的属性信息相匹配的节点,如果有匹配的节点则获取该节点的机器ID信息作为该应用对应的机器ID,如果没有匹配的节点则查找第一目录中所有节点,选取未被使用的数值作为所述应用的机器ID;
S4、在第二目录创建新的节点来存放所选用的机器ID。
根据本发明的一种优选实施方式,方法还包括:
S5、判断创建节点是否成功,如果创建成功执行步骤S6,否则执行S7;
S6、保存配置到第一目录中,并启动成功;
S7、设置重试次数阈值,判断重试次数是否达到阈值,如果达到阈值执行S8,如果未达到阈值执行S9;
S8、当重试次数达到所述阈值时启动失败;
S9、当重试次数未达到阈值时返回S3。
根据本发明的一种优选实施方式,S1还包括,应用与zookeeper下所述对应的根目录下的所述第一目录下的节点保持心跳,定期写入当前时间,当所述第一目录下的某节点在所述第二目录没有对应的节点并且该节点长时间没有心跳,则从所述第一目录中删除该节点。
根据本发明的一种优选实施方式,所述保存配置到第一目录中具体包括:
在第一目录中创建以机器ID、IP地址以及进程号为名称的节点。
根据本发明的一种优选实施方式,所述属性信息包括应用名称,IP地址,进程号。
根据本发明的一种优选实施方式,所述选取未被使用的数值作为机器ID具体包括:
选取最小的未被使用的数值作为机器ID,所述机器ID的取值范围为0-1023。
根据本发明的一种优选实施方式,在第二目录创建新的节点来存放所选用的机器ID具体为:以机器ID作为新的节点的名称。
本发明的第二方面提出一种为应用产生机器ID的装置,装置包括:
目录创建模块,用于根据应用的名称在zookeeper下创建与应用对应的应用目录,在所述根目录下创建第一目录和第二目录,所述第一目录和第二目录均包括节点,第一目录的节点为永久节点,第二目录的节点为临时节点,所述节点用于记录在不同客户端启动的应用的机器ID;
属性信息获取模块,用于获取与所述应用相关的属性信息;
机器ID获取模块,根据所述属性信息在第一目录中查找是否已存在与所述应用的属性信息相匹配的节点,如果有匹配的节点则获取该节点的机器ID信息作为该应用对应的机器ID,如果没有匹配的节点则查找第一目录中所有节点,选取未被使用的数值作为所述应用的机器ID;
节点创建模块,在第二目录创建新的节点来存放所选用的机器ID。
根据本发明的一种优选实施方式,还包括:
节点创建模块还判断创建节点是否成功,如果创建成功保存配置到第一目录中,并启动成功,否则执行设置重试次数阈值,判断重试次数是否达到阈值,如果重试次数达到所述阈值时启动失败,如果重试次数未达到阈值时返回机器ID获取模块重新获取机器ID。
根据本发明的一种优选实施方式,目录创建模块还包括,应用与zookeeper下所述对应的根目录下的所述第一目录下的节点保持心跳,定期写入当前时间,当所述第一目录下的某节点在所述第二目录没有对应的节点并且该节点长时间没有心跳,则从所述第一目录中删除该节点。
根据本发明的一种优选实施方式,所述保存配置到第一目录中具体包括:
在第一目录中创建以机器ID、IP地址以及进程号为名称的节点。
根据本发明的一种优选实施方式,所述属性信息包括应用名称,IP地址,进程号。
根据本发明的一种优选实施方式,所述选取未被使用的数值作为机器ID具体包括:
选取最小的未被使用的数值作为机器ID,所述机器ID的取值范围为0-1023。
根据本发明的一种优选实施方式,在第二目录创建新的节点来存放所选用的机器ID具体为:以机器ID作为新的节点的名称。
本发明的第三方面提出一种为应用产生机器ID的系统,包括:
存储单元,用于存储计算机可执行程序;
处理单元,用于读取所述存储单元中的计算机可执行程序,以执行为应用产生机器ID的方法。
本发明的第四方面提出一种计算机可读介质,用于存储计算机可读程序,其特征在于,所述计算机可读程序用于执行为应用产生机器ID的方法。
采用该技术方案,不需要人工参与就能为应用生成唯一机器ID,保证了机器ID的唯一性,便于系统的管理和维护。
附图说明
为了使本发明所解决的技术问题、采用的技术手段及取得的技术效果更加清楚,下面将参照附图详细描述本发明的具体实施例。但需声明的是,下面描述的附图仅仅是本发明的示例性实施例的附图,对于本领域的技术人员来讲,在不付出创造性劳动的前提下,可以根据这些附图获得其他实施例的附图。
图1是本发明实施例中一种为应用产生机器ID的方法的流程示意图;
图2是本发明实施例中一种为应用产生机器ID的装置的结构示意图;
图3是本发明实施例中一种为应用产生机器ID的系统的结构框架示意图;
图4是本发明实施例中计算机可读存储介质的结构示意图。
具体实施方式
现在将参考附图来更加全面地描述本发明的示例性实施例,虽然各示例性实施例能够以多种具体的方式实施,但不应理解为本发明仅限于在此阐述的实施例。相反,提供这些示例性实施例是为了使本发明的内容更加完整,更加便于将发明构思全面地传达给本领域的技术人员。
在符合本发明的技术构思的前提下,在某个特定的实施例中描述的结构、性能、效果或者其他特征可以以任何合适的方式结合到一个或更多其他的实施例中。
在对于具体实施例的介绍过程中,对结构、性能、效果或者其他特征的细节描述是为了使本领域的技术人员对实施例能够充分理解。但是,并不排除本领域技术人员可以在特定情况下,以不含有上述结构、性能、效果或者其他特征的技术方案来实施本发明。
附图中的流程图仅是一种示例性的流程演示,不代表本发明的方案中必须包括流程图中的所有的内容、操作和步骤,也不代表必须按照图中所显示的顺序执行。例如,流程图中有的操作/步骤可以分解,有的操作/步骤可以合并或部分合并,等等,在不脱离本发明的发明主旨的情况下,流程图中显示的执行顺序可以根据实际情况改变。
附图中的框图一般表示的是功能实体,并不一定必然与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理单元装置和/或微控制器装置中实现这些功能实体。
各附图中相同的附图标记表示相同或类似的元件、组件或部分,因而下文中可能省略了对相同或类似的元件、组件或部分的重复描述。还应理解,虽然本文中可能使用第一、第二、第三等表示编号的定语来描述各种器件、元件、组件或部分,但是这些器件、元件、组件或部分不应受这些定语的限制。也就是说,这些定语仅是用来将一者与另一者区分。例如,第一器件亦可称为第二器件,但不偏离本发明实质的技术方案。此外,术语“和/或”、“及/或”是指包括所列出项目中的任一个或多个的所有组合。
图1是本发明一种为应用产生机器ID的方法的流程示意图,如图1所示,本发明方法具有如下步骤:
S1、根据应用的名称在zookeeper下创建与应用对应的应用目录,在所述应用目录下创建第一目录和第二目录,所述第一目录和第二目录均包括节点,第一目录的节点为永久节点,第二目录的节点为临时节点,所述节点用于记录在不同客户端启动的应用的机器ID。
在本实施方式中,以应用为维度,每个应用都注册到zookeeper目录,在zookeeper目录下创建应用目录,以应用的名称作为目录名。在每个应用目录下创建两个子目录,分别为servers目录以及instances目录,在这两个目录下创建用于记录在不同客户端启动的应用的机器ID。其中不同客户端对应不同的进程号。在分布式应用中,同个应用不同的进程需要设置不同的机器ID,才能保证应用的使用雪花算法时产生应用级别的唯一ID。
在本实施方式中,servers目录下存储的节点为永久节点,instances目录下存储的节点为临时节点。
在上述技术方案的基础上,进一步地,在第一目录中创建以机器ID、IP地址以及进程号为名称的节点。
在本实施方式中在servers目录下的节点名称中包括机器ID、客户端的IP地址以及进程号。每个进程号都对应不同的机器ID,即使是同一个IP地址,进程号不同,对应的机器ID就不同,保证了机器ID的唯一性。在instances目录下的节点名称包括机器ID。
在上述方案的基础上,进一步地,应用与zookeeper下所述对应的根目录下的所述第一目录下的节点保持心跳,定期写入当前时间,当所述第一目录下的某节点在所述第二目录没有对应的节点并且该节点长时间没有心跳,则从所述第一目录中删除该节点。
在本实施方式中,在zookeeper服务中,如果当创建临时节点的客户端崩溃或者关闭了与zookeeper的连接时,这个节点就会被删除,因此当应用与zookeeper断开连接时,instances目下对应的节点就会被删除。因此如果在servers目录下的某个节点在instances目录下没有对应的节点,并且该节点长时间没有心跳,说明这个节点对应的机器ID已经不再使用。将该节点从servers目录下删除,释放该机器ID。通过这种方式保证了机器ID的有效性,不会造成机器ID的浪费。
S2、获取与所述应用相关的属性信息。
在上述技术方案的基础上,进一步地,属性信息包括应用名称,IP地址,进程号。
S3、根据所述属性信息在第一目录中查找是否已存在与所述应用的属性信息相匹配的节点,如果有匹配的节点则获取该节点的机器ID信息作为该应用对应的机器ID,如果没有匹配的节点则查找第一目录中所有节点,选取未被使用的数值作为所述应用的机器ID。
在上述技术方案的基础上,进一步地,选取最小的未被使用的数值作为机器ID,所述机器ID的取值范围为0-1023。
S4、在第二目录创建新的节点来存放所选用的机器ID。
在上述技术方案的基础上,进一步地,以机器ID作为新的节点的名称。
在本实施方式中,应用启动的时候获取自身应用相关的3个信息,应用名称、IP地址和进程号。在获得应用名称后,先使用应用名称在目录中查找是否有与应用名称一样的目录,如果有的话则进入该目录下的servers目录,利用IP地址和进程号在servers中的节点名称中进行搜索,看看是否能够找到相匹配的节点,如果有则获取节点名称中的机器ID作为应用的机器ID。如果没有搜索到匹配的相匹配的节点,则从未被使用的数值中选取最小的数值作为机器ID,数值的取值范围为0-1023。
在本实施方式中,获取机器ID后在instances目录下创建临时节点,节点的名称包括机器ID。
S5、判断创建节点是否成功,如果创建成功执行步骤S6,否则执行S7。
S6、保存配置到第一目录中,并启动成功。
在本实施方式中,如果在instances目录下创建临时节点完成后,则在servers目录创建包含机器ID、IP地址和进程号的永久节点。
在本实施方式中,在servers目录创建节点之前,先判断servers目录下是否已经存在名称包含该机器ID以及IP地址和进程号的节点,如果节点已存在则放弃创建,完成应用启动;如果没有,则创建节点,创建完成后应用启动成功。
S7、设置重试次数阈值,判断重试次数是否达到阈值,如果达到阈值执行S8,如果未达到阈值执行S9。
S8、当重试次数达到所述阈值时启动失败。
S9、当重试次数未达到阈值时返回S3。
在本实施方式中,设置重试次数阈值,并设置重试次数初始数值为0。当在instances目录下创建节点失败后,判断重试次数是否达到阈值,如果达到阈值则应用启动失败;如果还未达到阈值,则重试次数数值加1,并且返回S3重新执行机器ID获取过程。
下面通过两个实施例来对基于雪花算法自动获取机器ID的流程进行说明。
在分布式应用中,包括多个App,分别为App1,App2,App3……AppN多个应用。这些应用都注册到zookeeper的/snowflake目录下,创建与应用App1,App2,App3……AppN对应的目录/App1-name,/App2-name,/App3-name……/AppN-name。每个应用对应的目录下包括/servers和/instances两个目录。
实施例1:
我们以App1启动为例,当App1启动时获取获取App1-name,IP地址为10.20.30.42,进程号为8888。
首先使用App1-name搜索/snowflake目录,找到/App1-name目录。
然后在以10.20.30.42和8888为关键词搜索/App1-name/servers目录。此时/App1-name/servers目录下已经存在/0_10.20.30.40@5555,/1_10.20.30.40@6666和/2_10.20.30.41@7777三个节点。未能搜索到对应的节点,因此选取未使用的最小数值3作为本次应用启动的机器ID。
再然后在/App1-name/instances目录下创建节点/3。创建成功后,返回/App1-name/servers目录,创建/3_10.20.30.42@8888节点,对本次应用启动的机器ID进行保存。
此时,应用启动成功。
实施例2:
我们仍以App1启动为例,当App1启动时获取获取App1-name,IP地址为10.20.30.41,进程号为7777。
首先使用App1-name搜索/snowflake目录,找到/App1-name目录。
然后在以10.20.30.41和7777为关键词搜索/App1-name/servers目录。此时/App1-name/servers目录下已经存在/0_10.20.30.40@5555,/1_10.20.30.40@6666和/2_10.20.30.41@7777三个节点。可以搜索到匹配的节点/2_10.20.30.41@7777,因此本次应用启动的机器ID为2。
再然后在/App1-name/instances目录下创建节点/2。创建成功后,返回/App1-name/servers目录,创建/2_10.20.30.41@7777节点,不过由于/2_10.20.30.41@7777节点已经存在,因此放弃创建过程,完成应用启动。
如图2所示,在本实施例中还提供了一种为应用产生机器ID的装置200,包括:
目录创建模块201,用于根据应用的名称在zookeeper下创建与应用对应的应用目录,在所述根目录下创建第一目录和第二目录,所述第一目录和第二目录均包括节点,第一目录的节点为永久节点,第二目录的节点为临时节点,所述节点用于记录在不同客户端启动的应用的机器ID。
在本实施方式中,以应用为维度,每个应用都注册到zookeeper目录,在zookeeper目录下创建应用目录,以应用的名称作为目录名。在每个应用目录下创建两个子目录,分别为servers目录以及instances目录,在这两个目录下创建用于记录在不同客户端启动的应用的机器ID。其中不同客户端对应不同的进程号。在分布式应用中,同个应用不同的进程需要设置不同的机器ID,才能保证应用的使用雪花算法时产生应用级别的唯一ID。
在本实施方式中,servers目录下存储的节点为永久节点,instances目录下存储的节点为临时节点。
在上述技术方案的基础上,进一步地,在第一目录中创建以机器ID、IP地址以及进程号为名称的节点。
在本实施方式中在servers目录下的节点名称中包括机器ID、客户端的IP地址以及进程号。每个进程号都对应不同的机器ID,即使是同一个IP地址,进程号不同,对应的机器ID就不同,保证了机器ID的唯一性。在instances目录下的节点名称包括机器ID。
在上述方案的基础上,进一步地,应用与zookeeper下所述对应的根目录下的所述第一目录下的节点保持心跳,定期写入当前时间,当所述第一目录下的某节点在所述第二目录没有对应的节点并且该节点长时间没有心跳,则从所述第一目录中删除该节点。
在本实施方式中,在zookeeper服务中,如果当创建临时节点的客户端崩溃或者关闭了与zookeeper的连接时,这个节点就会被删除,因此当应用与zookeeper断开连接时,instances目下对应的节点就会被删除。因此如果在servers目录下的某个节点在instances目录下没有对应的节点,并且该节点长时间没有心跳,说明这个节点对应的机器ID已经不再使用。将该节点从servers目录下删除,释放该机器ID。通过这种方式保证了机器ID的有效性,不会造成机器ID的浪费。
属性信息获取模块202,用于获取与所述应用相关的属性信息。
在上述技术方案的基础上,进一步地,属性信息包括应用名称,IP地址,进程号。
机器ID获取模块203,根据所述属性信息在第一目录中查找是否已存在与所述应用的属性信息相匹配的节点,如果有匹配的节点则获取该节点的机器ID信息作为该应用对应的机器ID,如果没有匹配的节点则查找第一目录中所有节点,选取未被使用的数值作为所述应用的机器ID。
在上述技术方案的基础上,进一步地,选取最小的未被使用的数值作为机器ID,所述机器ID的取值范围为0-1023。
节点创建模块204,在第二目录创建新的节点来存放所选用的机器ID。
在上述技术方案的基础上,进一步地,以机器ID作为新的节点的名称。
在本实施方式中,应用启动的时候获取自身应用相关的3个信息,应用名称、IP地址和进程号。在获得应用名称后,先使用应用名称在目录中查找是否有与应用名称一样的目录,如果有的话则进入该目录下的servers目录,利用IP地址和进程号在servers中的节点名称中进行搜索,看看是否能够找到相匹配的节点,如果有则获取节点名称中的机器ID作为应用的机器ID。如果没有搜索到匹配的相匹配的节点,则从未被使用的数值中选取最小的数值作为机器ID,数值的取值范围为0-1023。
在本实施方式中,获取机器ID后在instances目录下创建临时节点,节点的名称包括机器ID。
节点创建模块204还判断创建节点是否成功,如果创建成功保存配置到第一目录中,并启动成功,否则执行设置重试次数阈值,判断重试次数是否达到阈值,如果重试次数达到所述阈值时启动失败,如果重试次数未达到阈值时返回机器ID获取模块重新获取机器ID。
在本实施方式中,如果在instances目录下创建临时节点完成后,则在servers目录创建包含机器ID、IP地址和进程号的永久节点。
在本实施方式中,在servers目录创建节点之前,先判断servers目录下是否已经存在名称包含该机器ID以及IP地址和进程号的节点,如果节点已存在则放弃创建,完成应用启动;如果没有,则创建节点,创建完成后应用启动成功。
在本实施方式中,设置重试次数阈值,并设置重试次数初始数值为0。当在instances目录下创建节点失败后,判断重试次数是否达到阈值,如果达到阈值则应用启动失败;如果还未达到阈值,则重试次数数值加1,并且返回机器ID获取模块203重新执行机器ID获取过程。
如图3所示,本发明的一个实施例中还公开一种为应用产生机器ID的系统,图3显示的为应用产生机器ID系统仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
为应用产生机器ID的系统300,包括存储单元320,用于存储计算机可执行程序;处理单元310,用于读取所述存储单元中的计算机可执行程序,以执行本发明各种实施方式的步骤。
在本实施方式中为应用产生机器ID的系统300还包括,连接不同系统组件(包括存储单元320和处理单元310)的总线330、显示单元340等。
其中,所述存储单元320存储有计算机可读程序,其可以是源程序或都只读程序的代码。所述程序可以被处理单元310执行,使得所述处理单元310执行本发明各种实施方式的步骤。例如,所述处理单元310可以执行如图1所示的步骤。
所述存储单元320可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)3201和/或高速缓存存储单元3202,还可以进一步包括只读存储单元(ROM)3203。所述存储单元320还可以包括具有一组(至少一个)程序模块3205的程序/实用工具3204,这样的程序模块3205包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
总线330可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
为应用产生机器ID的系统300也可以与一个或多个外部设备370(例如键盘、显示器、网络设备、蓝牙设备等)通信,使得用户能经由这些外部设备370通过输入/输出(I/O)接口350进行与处理单元310进行交互,还可以通过网络适配器360与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)进行。网络适配器360可以通过总线330与为应用产生机器ID的系统300通信的其它模块通信。应当明白,尽管图中未示出,为应用产生机器ID的系统300中可使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
图4是本发明的一个计算机可读介质实施例的示意图。如图4所示,所述计算机程序可以存储于一个或多个计算机可读介质上。计算机可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储单元(RAM)、只读存储单元(ROM)、可擦式可编程只读存储单元(EPROM或闪存)、光纤、便携式紧凑盘只读存储单元(CD-ROM)、光存储单元件、磁存储单元件、或者上述的任意合适的组合。当所述计算机程序被一个或多个数据处理设备执行时,使得该计算机可读介质能够实现本发明的上述方法,即:
S1、根据应用的名称在zookeeper下创建与应用对应的应用目录,在所述应用目录下创建第一目录和第二目录,所述第一目录和第二目录均包括节点,第一目录的节点为永久节点,第二目录的节点为临时节点,所述节点用于记录在不同客户端启动的应用的机器ID;
S2、获取与所述应用相关的属性信息;
S3、根据所述属性信息在第一目录中查找是否已存在与所述应用的属性信息相匹配的节点,如果有匹配的节点则获取该节点的机器ID信息作为该应用对应的机器ID,如果没有匹配的节点则查找第一目录中所有节点,选取未被使用的数值作为所述应用的机器ID;
S4、在第二目录创建新的节点来存放所选用的机器ID。
通过以上的实施方式的描述,本领域的技术人员易于理解,本发明描述的示例性实施例可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本发明实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个计算机可读的存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台数据处理设备(可以是个人计算机、服务器、或者网络设备等)执行根据本发明的上述方法。
所述计算机可读存储介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读存储介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。可读存储介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
综上所述,本发明可以执行计算机程序的方法、装置、电子设备或计算机可读介质来实现。可以在实践中使用微处理单元或者数字信号处理单元(DSP)等通用数据处理设备来实现本发明的一些或者全部功能。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,应理解的是,本发明不与任何特定计算机、虚拟装置或者电子设备固有相关,各种通用装置也可以实现本发明。以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (14)

1.一种在分布式应用中为应用产生机器ID的方法,其特征在于,方法包括:
S1、以应用为维度,每个应用都注册到zookeeper目录,根据应用的名称在zookeeper下创建与应用对应的应用目录,在所述应用目录下创建第一目录和第二目录,所述第一目录和第二目录均包括节点,第一目录的节点为永久节点,第二目录的节点为临时节点,所述节点用于记录在不同客户端启动的应用的机器ID;
每个所述第一目录下的节点的名称中的进程号,对应不同的机器ID,所述不同的客户端对应不同的进程号以在分布式应用中使得同个应用不同的进程设置不同的机器ID而保证应用使用雪花算法时产生应用级别的唯一ID;以及,所述应用与zookeeper下对应的根目录下的所述第一目录下的节点保持心跳,定期写入当前时间,当所述第一目录下的某节点在所述第二目录没有对应的节点并且该节点长时间没有心跳,表示该节点对应的机器ID已经不再使用,则从所述第一目录中删除该节点以保证机器ID的有效性;
S2、启动所述应用时获取与所述应用相关的属性信息;
S3、根据所述属性信息在第一目录中查找是否已存在与所述应用的属性信息相匹配的节点,如果有匹配的节点则获取该节点的机器ID信息作为该应用对应的机器ID,如果没有匹配的节点则查找第一目录中所有节点,选取未被使用的数值作为所述应用的机器ID;
S4、在第二目录创建新的节点来存放所选用的机器ID。
2.如权利要求1所述的方法,其特征在于,方法还包括:
S5、判断创建节点是否成功,如果创建成功执行步骤S6,否则执行S7;
S6、保存配置到第一目录中,并启动成功;如果在第二目录下创建临时节点完成后,则在第一目录创建包含机器ID、IP地址和进程号的永久节点;其中,在第一目录创建节点之前,还先判断第一目录下是否已经存在名称包含该机器ID以及IP地址和进程号的节点,如果节点已存在则放弃创建,完成应用启动;如果没有,则创建节点,创建完成后应用启动成功;
S7、设置重试次数阈值,判断重试次数是否达到阈值,如果达到阈值执行S8,如果未达到阈值执行S9;
S8、当重试次数达到所述阈值时启动失败;
S9、当重试次数未达到阈值时返回S3。
3.如权利要求2所述的方法,其特征在于,所述保存配置到第一目录中具体包括:
在第一目录中创建以机器ID、IP地址以及进程号为名称的节点。
4.如权利要求1或2所述的方法,其特征在于,所述属性信息包括应用名称,IP地址,进程号。
5.如权利要求1或2所述的方法,其特征在于,所述选取未被使用的数值作为机器ID具体包括:
选取最小的未被使用的数值作为机器ID,所述机器ID的取值范围为0-1023。
6.如权利要求1或2所述的方法,其特征在于,在第二目录创建新的节点来存放所选用的机器ID具体为:
以机器ID作为新的节点的名称。
7.一种在分布式应用中为应用产生机器ID的装置,其特征在于,装置包括:
目录创建模块,用于以应用为维度,每个应用都注册到zookeeper目录,根据应用的名称在zookeeper下创建与应用对应的应用目录,在根目录下创建第一目录和第二目录,所述第一目录和第二目录均包括节点,第一目录的节点为永久节点,第二目录的节点为临时节点,所述节点用于记录在不同客户端启动的应用的机器ID;每个所述第一目录下的节点的名称中的进程号,对应不同的机器ID,所述不同的客户端对应不同的进程号以在分布式应用中使得同个应用不同的进程设置不同的机器ID而保证应用使用雪花算法时产生应用级别的唯一ID;以及,所述应用与zookeeper下对应的根目录下的所述第一目录下的节点保持心跳,定期写入当前时间,当所述第一目录下的某节点在所述第二目录没有对应的节点并且该节点长时间没有心跳,表示该节点对应的机器ID已经不再使用,则从所述第一目录中删除该节点以保证机器ID的有效性;
属性信息获取模块,用于启动所述应用时获取与所述应用相关的属性信息;
机器ID获取模块,根据所述属性信息在第一目录中查找是否已存在与所述应用的属性信息相匹配的节点,如果有匹配的节点则获取该节点的机器ID信息作为该应用对应的机器ID,如果没有匹配的节点则查找第一目录中所有节点,选取未被使用的数值作为所述应用的机器ID;
节点创建模块,在第二目录创建新的节点来存放所选用的机器ID。
8.如权利要求7所述的装置,其特征在于,还包括:
节点创建模块还判断创建节点是否成功,如果创建成功保存配置到第一目录中,并启动成功,包括:如果在第二目录下创建临时节点完成后,则在第一目录创建包含机器ID、IP地址和进程号的永久节点,其中,在第一目录创建节点之前,还先判断第一目录下是否已经存在名称包含该机器ID以及IP地址和进程号的节点,如果节点已存在则放弃创建并完成应用启动,如果没有则创建节点并在创建完成后应用启动成功;否则,执行设置重试次数阈值,判断重试次数是否达到阈值,如果重试次数达到所述阈值时启动失败,如果重试次数未达到阈值时返回机器ID获取模块重新获取机器ID。
9.如权利要求8所述的装置,其特征在于,所述保存配置到第一目录中具体包括:
在第一目录中创建以机器ID、IP地址以及进程号为名称的节点。
10.如权利要求7或8所述的装置,其特征在于,所述属性信息包括应用名称,IP地址,进程号。
11.如权利要求7或8所述的装置,其特征在于,所述选取未被使用的数值作为机器ID具体包括:
选取最小的未被使用的数值作为机器ID,所述机器ID的取值范围为0-1023。
12.如权利要求7或8所述的装置,其特征在于,在第二目录创建新的节点来存放所选用的机器ID具体为:以机器ID作为新的节点的名称。
13.一种在分布式应用中为应用产生机器ID的系统,其特征在于,包括:
存储单元,用于存储计算机可执行程序;
处理单元,用于读取所述存储单元中的计算机可执行程序,以执行权利要求1至6中任一项所述的方法。
14.一种计算机可读介质,用于存储计算机可读程序,其特征在于,所述计算机可读程序用于执行权利要求1至6中任一项所述的方法。
CN201910930811.4A 2019-09-29 2019-09-29 一种为应用产生机器id的方法、装置和系统 Active CN110795399B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910930811.4A CN110795399B (zh) 2019-09-29 2019-09-29 一种为应用产生机器id的方法、装置和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910930811.4A CN110795399B (zh) 2019-09-29 2019-09-29 一种为应用产生机器id的方法、装置和系统

Publications (2)

Publication Number Publication Date
CN110795399A CN110795399A (zh) 2020-02-14
CN110795399B true CN110795399B (zh) 2023-11-14

Family

ID=69439959

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910930811.4A Active CN110795399B (zh) 2019-09-29 2019-09-29 一种为应用产生机器id的方法、装置和系统

Country Status (1)

Country Link
CN (1) CN110795399B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111930384B (zh) * 2020-07-02 2021-04-06 上海微亿智造科技有限公司 基于优化后的雪花算法在工业大数据中的应用方法及系统
CN112055099A (zh) * 2020-08-21 2020-12-08 上海擎感智能科技有限公司 单号生成方法及电子设备
CN112351110B (zh) * 2020-11-27 2022-10-21 杭州安恒信息技术股份有限公司 基于zookeeper的ID分配方法、装置
CN113420029B (zh) * 2021-06-25 2024-04-12 陕西浪潮英信科技有限公司 一种分布式系统全局id生成方法、装置、设备及介质
CN114244806B (zh) * 2022-02-28 2022-07-29 深圳市城市交通规划设计研究中心股份有限公司 一种分布式微服务系统发号方法、计算机及存储介质
CN114968413A (zh) * 2022-06-21 2022-08-30 四三九九网络股份有限公司 一种Android应用启动事件的采集方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7577648B1 (en) * 2006-09-29 2009-08-18 Sprint Communications Company L.P. Directory access extension framework
JP2012073943A (ja) * 2010-09-29 2012-04-12 Brother Ind Ltd 情報生成装置、情報生成方法及び情報生成プログラム
CN109714188A (zh) * 2018-11-02 2019-05-03 中国平安人寿保险股份有限公司 基于Zookeeper的配置数据管理方法、设备和存储介质
CN109936642A (zh) * 2019-01-28 2019-06-25 中国银行股份有限公司 一种分布式系统中生成机器id的方法、装置及系统

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7577648B1 (en) * 2006-09-29 2009-08-18 Sprint Communications Company L.P. Directory access extension framework
JP2012073943A (ja) * 2010-09-29 2012-04-12 Brother Ind Ltd 情報生成装置、情報生成方法及び情報生成プログラム
CN109714188A (zh) * 2018-11-02 2019-05-03 中国平安人寿保险股份有限公司 基于Zookeeper的配置数据管理方法、设备和存储介质
CN109936642A (zh) * 2019-01-28 2019-06-25 中国银行股份有限公司 一种分布式系统中生成机器id的方法、装置及系统

Also Published As

Publication number Publication date
CN110795399A (zh) 2020-02-14

Similar Documents

Publication Publication Date Title
CN110795399B (zh) 一种为应用产生机器id的方法、装置和系统
US10324909B2 (en) Omega names: name generation and derivation utilizing nested three or more attributes
CN106407356B (zh) 一种数据备份方法及装置
CN108965355B (zh) 用于数据传输的方法、装置及计算机可读存储介质
US10235244B2 (en) Block level backup of virtual machines for file name level based file search and restoration
CN110851209B (zh) 一种数据处理方法、装置、电子设备及存储介质
US9483508B1 (en) Omega names: name generation and derivation
CN112416425B (zh) App构建方法、装置、计算机设备及存储介质
WO2019161620A1 (zh) 应用依赖关系更新方法、终端、设备及存储介质
CN113760306A (zh) 安装软件的方法、装置、电子设备及存储介质
CN115421764A (zh) 一种待升级模块识别方法、装置、设备及存储介质
CN113111669B (zh) 基于增量的前端多语言国际化翻译方法及装置
CN109726039B (zh) 用于管理虚拟机的方法和设备
JP2021515304A (ja) システムにおける時系列ログ構造のキーバリュー・ストア内のチェックポイントを使用した障害後のリカバリのための方法、コンピュータ・プログラム、および装置
US20150347402A1 (en) System and method for enabling a client system to generate file system operations on a file system data set using a virtual namespace
CN113986385A (zh) 项目字体库加载方法、装置、电子设备及存储介质
US11138075B2 (en) Method, apparatus, and computer program product for generating searchable index for a backup of a virtual machine
US10866993B2 (en) Managing online help information in a data center
CN111770158A (zh) 云平台恢复方法、装置、电子设备及计算机可读存储介质
US20190384825A1 (en) Method and device for data protection and computer readable storage medium
CN106993036B (zh) 运行环境信息处理方法及交换机
CN111858158A (zh) 数据处理方法、装置及电子设备
CN112650713A (zh) 文件系统的运行方法、装置、设备和存储介质
CN110750268B (zh) 文件清理方法、装置、计算机可读存储介质及电子设备
CN109324809B (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