著录项信息
专利名称 | 基于Zookeeper的分布式系统的有序序列号生成方法 |
申请号 | CN201410613887.1 | 申请日期 | 2014-11-04 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2015-02-18 | 公开/公告号 | CN104361065A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F17/30 | IPC分类号 | G;0;6;F;1;7;/;3;0查看分类表>
|
申请人 | 福建亿榕信息技术有限公司 | 申请人地址 | 福建省福州市鼓楼区软件大道89号B区13号楼
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 福建亿榕信息技术有限公司 | 当前权利人 | 福建亿榕信息技术有限公司 |
发明人 | 倪时龙;苏江文;池少宁;张垚 |
代理机构 | 福州市鼓楼区京华专利事务所(普通合伙) | 代理人 | 林晓琴 |
摘要
本发明提供一种基于Zookeeper的分布式系统的有序序列号生成方法,所述方法为1、在分布式系统的Zookeeper上创建有序序列根节点;2、在有序序列根节点下创建持久顺序节点;3、取得持久顺序节点的顺序号;4、删除所述顺序号的前一顺序号对应的顺序节点。本发明利用了Zookeeper的数据强一致性和持久顺序节点的节点顺序性,解决了分布式系统中多服务端高并发请求环境下有序序列号生成的问题。
基于Zookeeper的分布式系统的有序序列号生成方法\n技术领域\n[0001] 本发明涉及计算机软件技术领域,尤其涉及一种基于Zookeeper的分布式系统的有序序列号生成方法。\n背景技术\n[0002] 随着计算机技术的飞速发展,现在的软件应用系统正在向分布式的应用发展。在分布式系统中原有的一些技术和方法已经不适用了,在非分布式的应用系统中有序序列号只要依靠数据库系统提供的机制即可解决(不同数据库序列号生成的方式和使用方式不同),而在分布式系统中有序序列号的生成要顾及到高并发、多服务端请求等因素,依靠数据库系统提供的机制已满足不了。\n[0003] 有序序列号在应用系统中的作用通常分为两种,一种是作为数据主键,另外一种是作为业务顺序号(如订单的顺序号),在分布式应用系统中数据主键大多数已经采用顺序无关的算法来生成(如UUID算法)。\n[0004] 现有的有序序列号生成方式为以下两种:\n[0005] 1.通过单独的序列号服务器来协调生成。\n[0006] 首先该需要生成的序列号的字段需要注册到列号服务器,然后系统需要使用该字段时候,去向列号服务器申请,每次申请一定的步长(比如申请1-100)。当系统用完了这个步长,就需要再去申请。这个方法缺点是,无法反映该字段在整个分布式系统中的实际顺序,因为每个服务端每次申请的是一定步长的序列号值,序列号服务器需要单独开发,而且存在单点故障风险。\n[0007] 2.简单的数据库自增长列来生成。\n[0008] 该方式的缺点是:在大表做水平分表时,因为Insert的记录插入到哪个分表由分表规则决定,若是自增长列,各个分表中的值就会重复。这种方式适合小应用,无需分表,没有高并发性能要求的系统,不适合在高并发的分布式系统中使用。\n发明内容\n[0009] 本发明要解决的技术问题,在于提供一种基于Zookeeper的分布式系统的有序序列号生成方法,利用了Zookeeper的数据强一致性和持久顺序节点的节点顺序性,解决了分布式系统中多服务端高并发请求环境下有序序列号生成的问题。\n[0010] 本发明是这样实现的:一种基于Zookeeper的分布式系统的有序序列号生成方法,所述方法具体包括如下步骤:\n[0011] 步骤10、在分布式系统的Zookeeper上创建有序序列根节点;\n[0012] 步骤20、在有序序列根节点下创建持久顺序节点;\n[0013] 步骤30、取得持久顺序节点的顺序号;\n[0014] 步骤40、删除所述顺序号的前一顺序号对应的顺序节点。\n[0015] 进一步地,所述步骤10具体为:根据分布式系统需求在Zookeeper上预先创建一系列有序序列根节点,所述创建方式为:通过Zookeeper客户端工具或者在系统中调用Zookeeper客户端的API。\n[0016] 进一步地,所述步骤20具体为:系统中在需要生成顺序号时,连接到Zookeeper的服务器,在有序序列根节点下创建持久顺序节点,创建成功的节点名称的后10位即为该节点在有序序列根节点下的顺序号。\n[0017] 进一步地,所述步骤30具体为:在步骤20中创建成功持久顺序节点后Zookeeper返回给分布式系统创建成功的节点名称,截取节点名称后10位数字,即获得分布式系统需要的顺序号。\n[0018] 进一步地,所述步骤40具体为:在取得分布式系统需要的顺序号后,删除该顺序号的前一顺序号对应的顺序节点,以保证根节点始终保留最后一次创建的持久顺序节点,来控制有序序列根节点下的顺序节点数量。\n[0019] 本发明具有如下优点:本发明利用了Zookeeper的数据强一致性和持久顺序节点的节点顺序性,解决了分布式系统中多服务端高并发请求环境下有序序列号生成的问题,按本方法生成的序列号能真实反映在整个分布式系统中的顺序,Zookeeper的数据强一致性解决了用序列号服务器方案的单点问题,且无开发序列号服务器的成本。\n附图说明\n[0020] 图1为本发明方法流程示意图。\n具体实施方式\n[0021] 请参阅图1所示,本发明的一种基于Zookeeper的分布式系统的有序序列号生成方法,所述方法具体包括如下步骤:\n[0022] 步骤10、在分布式系统的Zookeeper上创建有序序列根节点;\n[0023] 所述步骤10具体为:根据分布式系统需求在Zookeeper上预先创建一系列有序序列根节点(例如/abc/sequence/orderNO),所述创建方式为:通过Zookeeper客户端工具或者在系统中调用Zookeeper客户端的API(API应用程序编程接口)。\n[0024] 步骤20、在有序序列根节点下创建持久顺序节点;\n[0025] 所述步骤20具体为:系统中在需要生成顺序号时,连接到Zookeeper的服务器,在有序序列根节点下创建持久顺序节点,创建成功的节点名称的后10位即为该节点在有序序列根节点下的顺序号。\n[0026] 步骤30、取得持久顺序节点的顺序号;\n[0027] 所述步骤30具体为:在步骤20中创建成功持久顺序节点后Zookeeper返回给分布式系统创建成功的节点名称,截取节点名称后10位数字,即获得分布式系统需要的顺序号。\n[0028] 步骤40、删除所述顺序号的前一顺序号对应的顺序节点,组合有序序列根节点下的所有顺序号生成有序序列号。\n[0029] 所述步骤40具体为:在取得分布式系统需要的顺序号后,删除该顺序号的前一顺序号对应的顺序节点,以保证根节点始终保留最后一次创建的持久顺序节点,来控制有序序列根节点下的顺序节点数量。\n[0030] 总之,本发明利用Zookeeper的持久顺序节点(PERSISTENT_SEQUENTIAL),首先根据分布式系统需求在Zookeeper上预先创建一系列有序序列根节点,然后在需要生成有序序列号时在根节点下创建持久顺序节点获得顺序号,最后删除顺序号为获得的顺序号减一的节点,以保证根节点始终保留最后一次创建的持久顺序节点。\n[0031] 以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。
法律信息
- 2018-07-06
- 2015-03-25
实质审查的生效
IPC(主分类): G06F 17/30
专利申请号: 201410613887.1
申请日: 2014.11.04
- 2015-02-18
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2003-12-03
|
2003-02-26
| | |
2
| |
2009-09-16
|
2009-04-16
| | |
3
| |
2013-03-06
|
2012-11-05
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |