一种多应用ID生成方法及系统与流程

文档序号:26139293发布日期:2021-08-03 14:22阅读:115来源:国知局
一种多应用ID生成方法及系统与流程

本发明属于分布式系统管理方法技术领域,尤其涉及一种多应用id生成方法及系统。



背景技术:

目前现有id的生产方案主要有基于数据库自增的id生成方法、基于uuid的id生成方法、基于redis的id生成方法。基于数据库自增的id生成方法利用数据库自增id来实现,具备简单、有序、全库唯一的优点,但可扩展性和健壮性不强,同时无法做到分布式环境下的全局唯一。基于uuid的id生成方法让分散式系统中所有的元素都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的制定;算法的核心思想是结合机器的网卡、当地时间、一个随机数来生成uuid;其缺点是随机性强、不连续、不单调(不能递增或者递减)。传统基于redis的id生成方法通过分布式redis实现id的生成,提升了id生成效率,但针对多应用缺乏统一的规划和管理,比较混乱,无法实现全局唯一性。

随着云计算的快速发展,越来越多的应用采用基于云平台的架构。通常在企业内部云中,集成多种企业应用,每种企业应用需要使用不同的全局唯一数字id。通常全局唯一数字id缺乏统一的规划和管理,容易造成id使用混乱。



技术实现要素:

本发明针对现有的id生成方法无法实现分布式多应用环境下的全局唯一性的问题,提出一种多应用id生成方法及系统。

为了实现上述目的,本发明采用以下技术方案:

一种多应用id生成系统,包括:id服务层、id分发层、数据持久层;

所述id服务层由多个idgen服务构成,用于根据id信息和redis信息为第三方应用程序提供基于rpc的id申请;所述id信息包括项目名称、id名称、id被分配的redis标识;所述redis信息包括redis标识、redis服务器ip、redis服务器端口、redis密码;所述id分发层由多个redis服务器构成,用于id的生成,所述redis服务器与id名称建立多对一关系;

所述数据持久层由数据库或者文件构成,用于存放id信息和redis信息。

进一步地,所述数据持久层还用于存放id的状态信息,所述id的状态信息为有效或无效。

进一步地,所述id服务层只能访问id的状态信息为有效的id信息。

一种多应用id生成方法,包括:

步骤1:数据持久层建立多种应用的id信息和redis信息;

步骤2:id服务层访问数据持久层,获取redis信息,枚举并访问redis信息,如果redis服务无法访问,则依据redis信息,启动redis服务;

步骤3:id服务层内多个idgen服务建立互斥机制,从数据持久层加载id信息,枚举id信息,依据id信息连接到redis服务器上,如果redis服务器上所述id信息不存在,则在redis服务器上建立对应id信息;

步骤4:第三方应用程序通过rpc调用id服务层的任一idgen服务申请id。

进一步地,所述redis服务器开启持久化功能,用于保存最新的id信息。

进一步地,所述步骤4包括:

第三方应用程序调用rpc接口申请id,包括id名称申请;

id服务层的任一idgen服务根据id名称查询id所在的redis服务器;

redis服务器据id名称调用incr命令,生成新的id;

idgen服务将从redis服务器获取的新的id返回给第三方应用程序。

进一步地,所述redis服务器生成新的id时采用动态扩展的方式增加id范围。

与现有技术相比,本发明具有的有益效果:

现有id通常采用数据库、uuid、redis等方式来生成,无法实现分布式多应用环境下的全局唯一性。本发明针对云平台运行环境,通过构建id服务层、id分发层、数据持久层,对应用id和redis服务器进行统一的规划和管理,为多应用提供了统一的全局唯一数字id,采用分布式架构实现了应用id的快速生成和查找,通过应用id与redis的动态绑定实现了资源的弹性、可扩展。

附图说明

图1为本发明实施例一种多应用id生成系统的架构图;

图2为本发明实施例一种多应用id生成方法的基本流程图;

图3为本发明实施例另一种多应用id生成方法的基本流程图。

具体实施方式

下面结合附图和具体的实施例对本发明做进一步的解释说明:

如图1所示,一种多应用id生成系统,包括:id服务层、id分发层、数据持久层;

所述id服务层由多个idgen服务构成,用于根据id信息和redis信息为第三方应用程序提供基于rpc的id申请;所述id信息包括项目名称、id名称、id被分配的redis标识;所述redis信息包括redis标识、redis服务器ip、redis服务器端口、redis密码;

所述id分发层由多个redis服务器构成,用于id的生成,redis服务器与id名称建立多对一关系,即一种id只对应一个redis服务器,一个redis服务器对应多种id;值得说明的是,id名称可以理解为id类型名称,一般一个项目(应用)中申请的id为同一种类型,即申请的id名称相同;

所述数据持久层由数据库或者文件构成,用于存放id信息和redis信息,其中id信息包括项目名称、id名称、id被分配的redis标识,其中redis信息包括redis标识、redis服务器ip、redis服务器端口、redis密码。

进一步地,所述id的状态信息为有效或无效。

进一步地,所述id服务层只能访问id的状态信息为有效的id信息。

在上述实施例的基础上,如图2所示,本发明还公开一种多应用id生成方法,包括:

步骤s101:数据持久层建立多种应用的id信息和redis信息;

步骤s102:id服务层访问数据持久层,获取redis信息,枚举并访问redis信息,如果redis服务无法访问,则依据redis信息,启动redis服务;

步骤s103:id服务层内多个idgen服务建立互斥机制,从数据持久层加载id信息,枚举id信息,依据id信息连接到redis服务器上,如果redis服务器上所述id信息不存在,则在redis服务器上建立对应id信息;

步骤s104:第三方应用程序通过rpc调用id服务层的任一idgen服务申请id。

进一步地,所述redis服务器开启持久化功能,用于保存最新的id信息。

进一步地,所述步骤s104包括:

第三方应用程序调用rpc接口申请id,包括id名称申请;

id服务层的任一idgen服务根据id名称查询id所在的redis服务器;

redis服务器据id名称调用incr命令,生成新的id;

idgen服务将从redis服务器获取的新的id返回给第三方应用程序。

进一步地,所述redis服务器生成新的id时采用动态扩展的方式增加id范围。

作为一种可实施方式,当数据持久层为mysql数据库时,如图3所示,本发明的另一种多应用id生成方法,包括:

步骤s201:mysql数据库建立id信息表和redis信息表;所述redis信息表包含redis标识、redis服务器ip、redis服务器端口、redis密码;所述id信息表包含项目名称、id名称、id被分配的redis标识、id状态。

步骤s202:分别录入redis信息和id信息。

步骤s203:idgen查询mysql数据库的redis信息,并枚举redis信息,依据redis服务器ip、redis服务器端口、redis密码,连接redis服务器;如果连接不成功,则依据redis服务器ip、redis服务器端口、redis密码启动redis服务。

步骤s204、idgen查询数据库的id信息表,并枚举id信息,依据枚举的id信息连接到redis服务器上;如果查询不到,则在该redis服务器上建立该id信息。

步骤s205:应用app调用rpc接口申请id,id申请包含项目信息、id名称等信息。

步骤s206:idgen根据id名称查询id所在的redis服务器,连接redis服务器,并申请id。

步骤s207:redis服务器依据id名称调用incr命令,生成新的id;如果新的id数目超过设置的阈值,则启动id更新,动态扩展id范围。

步骤s208:idgen将从redis获取的新的id,返回给应用app。

综上,现有id通常采用数据库、uuid、redis等方式来生成,无法实现分布式多应用环境下的全局唯一性。本发明针对云平台运行环境,通过构建id服务层、id分发层、数据持久层,对应用id和redis服务器进行统一的规划和管理,为多应用提供了统一的全局唯一数字id,采用分布式架构实现了应用id的快速生成和查找,通过应用id与redis的动态绑定实现了资源的弹性、可扩展。

以上所示仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1