当需要生成大量的全局唯一ID怎么办


业务场景

当某个请求需要获取大量全局唯一ID怎么办?比如导入数据。

这个时候肯定不能循环调用ID生成服务去去单个获取

方案一:批量获取

比如需要获取2万个id,则调用批量接口一次性获取2万个id。这是一种方法,但是ID生成器服务一次性生成2万个id需要时间,容易造成接口超时。而且长时间占用ID生成器服务容易导致其他服务故障。

提前获取

做一个id pool, 提前在本地缓存一批id,比如1万个。需要的时候从id pool获取,当id pool中数量低于某个值则自动从id生成器服务获取id。

这种方案可以,但是id pool设置成多大呢?太大了容易造成各个服务之间的id没有趋势递增,不可能在本地缓存100万个id,那有的服务可能一辈子都用不完。当然这种方案已经比第一种方案好多了,在实际开发过程中推荐使用。

降级本地生成id

下面再假设,id pool中的id还是不够用,那怎么办?从id生成器服务区获取又容易造成超时等问题,这个时候就可以降级,本地生成id。

那如何确保不同的服务本地生成的id不会重复呢?这里使用雪花算法

参考

[1]雪花算法,什么情况下发生 ID 冲突?


文章作者: Alex
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Alex !
  目录