业务场景
当某个请求需要获取大量全局唯一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不会重复呢?这里使用雪花算法。