本技术涉及分布式系统,特别是涉及一种基于zookeeper的分布式id生成方法及装置。
背景技术:
1、在分布式系统中,存在多个节点或实体,且每个节点可能具有不同的功能或承担不同的任务。为了确保在整个系统中能够准确地识别和引用这些节点或实体,需要为每一节点或实体分配相应的唯一标识符(identity document,id),也称分布式id。
2、传统的分布式id生成方案多是基于如雪花(snowflake)算法、通用唯一识别码(universally unique identifier,uuid)等唯一标识生成算法结合zookeeper实现,各客户端借助安装在客户端的软件开发工具包(software development kit,sdk)实现对分布式id算法的支持,而zookeeper则主要用于为各客户端分配唯一的工作机器id,从而满足唯一标识生成算法中对工作机器id的分配要求,各客户端为节点或实体分配的分布式id全局唯一。
3、zookeeper:中文直译为动物园管理员,为一种分布式的,开放源码的分布式应用程序协调服务,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
4、但是上述方案也存在一些问题:
5、分布式id的生成依赖于sdk实现,而sdk以组件的形式安装在客户端中,分布式id生成与客户端之间存在的过高的耦合性使得分布式系统的可维护性、可扩展性都十分差,并且当存在多个客户端时,实现分布式id的唯一生成更是复杂。
6、另外,由于分布式id中工作机器id的位数有限,所以在通过zookeeper为各客户端分配工作机器id时的数量也有限,使得分布式系统中对所允许客户端的最大数量造成限制。
7、所以,现在本领域的技术人员亟需要一种基于zookeeper的分布式id生成方法,解决目前在分布式id生成时所出现的上述问题。
技术实现思路
1、本技术的目的是提供一种基于zookeeper的分布式id生成方法及装置,以解决目前在分布式id生成时出现的高耦合性问题。
2、为解决上述技术问题,本技术提供一种基于zookeeper的分布式id生成方法,应用于至少一服务端侧,包括:
3、在zookeeper中创建自增顺序临时节点,以获取顺序值;
4、在zookeeper中为所挂载的各服务实例创建临时节点,并确定各服务实例的互联网协议地址和端口信息;
5、当接收到客户端的访问请求时,根据访问请求建立与客户端之间的长连接;其中,访问请求包括客户端从zookeeper获取的服务实例的互联网协议地址和端口信息,长连接对应于该服务实例;
6、通过分布式id生成算法、以顺序值作为工作id,生成各服务实例对应的分布式id;
7、通过长连接返回分布式id至客户端。
8、优选的,还包括:
9、监测服务实例的挂载状态;
10、每当检测到有新的服务实例挂载时,在zookeeper为新挂载的服务实例创建临时节点;
11、每当检测到有服务实例卸载时,在zookeeper中注销对应的临时节点,并断开对应的长连接。
12、优选的,在zookeeper中创建自增顺序临时节点,以获取顺序值之后,还包括:
13、将顺序值存储至本地磁盘中。
14、优选的,分布式id包括:1位符号位、41位时间戳部分、10位工作机器id部分和12位序列号部分。
15、为解决上述技术问题,本技术还提供一种基于zookeeper的分布式id生成方法,应用于至少一客户端侧,包括:
16、从zookeeper中临时节点的目录下获取服务端的服务实例所对应的互联网协议地址和端口信息;其中,临时节点是服务端在zookeeper中为挂载的各服务实例所创建;
17、根据互联网协议地址和端口信息,发送访问请求至服务端,以建立与服务端之间的长连接;
18、接收由服务端通过长连接发送的分布式id;
19、其中,分布式id为服务端对应于各服务实例,通过分布式id生成算法、以顺序值作为工作id所生成;顺序值为服务端通过在zookeeper中创建自增顺序临时节点所获取。
20、优选的,在获取到服务实例的互联网协议地址和端口信息之后,还包括:
21、将互联网协议地址和端口信息保存在预先建立的服务列表中;
22、当与服务端之间的长连接断开时,从服务列表中选取任一组互联网协议地址和端口信息,并转至根据互联网协议地址和端口信息,发送访问请求至服务端,以建立与服务端之间的长连接的步骤。
23、优选的,还包括:
24、监听zookeeper的临时节点目录下数据是否出现变化;
25、若出现新的服务实例在zookeeper中注册,则获取新注册服务实例的互联网协议地址和端口信息,并转至将互联网协议地址和端口信息保存在预先建立的服务列表中的步骤;
26、若出现原有的服务实例在服务中心中注销,则将对应的互联网协议地址和端口信息于服务列表中删除。
27、优选的,接收由服务端通过长连接发送的分布式id包括:
28、通过软件开发工具包,批量获取服务端通过长连接发送的分布式id。
29、为解决上述技术问题,本技术还提供一种基于zookeeper的分布式id生成装置,应用于至少一服务端侧,包括:
30、顺序值获取模块,用于在zookeeper中创建自增顺序临时节点,以获取顺序值;
31、服务注册模块,用于在zookeeper中为所挂载的各服务实例创建临时节点,并确定各服务实例的互联网协议地址和端口信息;
32、长连接建立模块,用于当接收到客户端的访问请求时,根据访问请求建立与客户端之间的长连接;其中,访问请求包括客户端从zookeeper获取的服务实例的互联网协议地址和端口信息,长连接对应于该服务实例;
33、id生成模块,用于通过分布式id生成算法、以顺序值作为工作id,生成各服务实例对应的分布式id;
34、id返回模块,用于通过长连接返回分布式id至客户端。
35、为解决上述技术问题,本技术还提供一种基于zookeeper的分布式id生成装置,应用于至少一客户端侧,包括:
36、信息获取模块,用于从zookeeper中临时节点的目录下获取服务端任一服务实例的互联网协议地址和端口信息;其中,临时节点为服务端于zookeeper中为挂载的各服务实例所创建;
37、访问请求模块,用于根据互联网协议地址和端口信息,发送访问请求至服务端,以建立与服务端之间的长连接;
38、id接收模块,用于接收由服务端通过长连接发送的分布式id;其中,分布式id为服务端对应于各服务实例,通过分布式id生成算法、以顺序值作为工作id所生成;顺序值为服务端通过于zookeeper中创建自增顺序临时节点所获取。
39、本技术提供的一种基于zookeeper的分布式id生成方法,通过zookeeper创建自增顺序临时节点,实现自增的顺序值的获取,以为服务端分配唯一的工作机器id;进一步的,服务端即可基于分配的工作机器id,通过分布式id生成算法为各服务实例分配唯一的分布式id,并返回至客户端侧,以供客户端唯一识别和调用这些服务实例。
40、这种由zookeeper分配工作id、由服务端生成的分布式id的方式,相比于传统的为客户端的sdk分配工作机器id以生成分布式id的方案,系统中各模块之间的耦合性更低,且使得适用的客户端的数量不再局限于工作机器id所能支持的最大不同数量;zookeeper直接为服务端分配工作机器id,由服务端处生成分布式id,数量不受限的客户端可自由从服务端获取所需调用服务实例的分布式id。
41、另外,服务端与客户端之间还通过各服务实例的互联网协议地址和端口信息,建立长连接,保证客户端与服务端之间高效、及时的数据传输,大大提高了整个分布式id生成、并返回至客户端过程的效率。
42、并且,服务实例以临时节点注册到zookeeper中、由服务端生成各服务实例的分布式id、客户端与服务端之间建立有长连接,方便服务端根据自身实时挂载服务实例的变化,反映到所生成的分布式id上,并及时告知客户端,使整个系统的扩容、缩容更加方便且无需停机,更好地满足了实际用户的使用需要。
43、本技术提供的一种基于zookeeper的分布式id生成装置,与上述方法对应,效果同上。