如何产生足够的UUID?

UUID,是指通用唯一标识符,Universally Unique Identifier

首先说明一下题意,类似雪花算法(SnowFlake)这种方式,因为生成的结果长度是固定的(64bit),因此,只能产生有限个UUID。
如果要在一个大的集群,或者说全世界范围内产生足够多的UUID,可以怎么做呢?

  • 第一步,假设有一个全局的Leader机(可以做成主备),它负责向各个一级机构(比如国家)批量分配连续的UUID。这里用String类型来表示一个10进制数,分配的时候指定开始值和分配数量即可。

  • 第二步,二级机构(比如各个省、州、邦)可以向一级机构批量(开始序号+数量)申请UUID。一级机构如果剩余足够的UUID,则直接分配并返回,否则一级机构向全局Leader进行批量申请,申请到之后再向二级机构返回。

  • 第三步,如上方式继续下分,直到市——县——镇(乡)——街道(村)——小区……

  • 直到最下一级机构,直接给终端返回一个个具体的UUID。

当然,以上过程可以扩展,也可以优化:

1、 因为在垂直方向,是可以增加更多的层级的。

2、 越往上的机构,一次申请的UUID数量应该越大(而且应该足够大),这样能够有效减少分配的次数。

以上整个过程是一个分治过程,从上往下一步步进行垂直扩展。事实上,全世界公网IP地址的分配,就是类似的原理。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值