百度ID生成器可以达到百万TPS,为什么如此高性能?
1、消费未来时间
百度ID生成器也是基于雪花算法,雪花算法中最后12位用于自增序列,这决定了雪花算法只支持每秒生成最多4096个id,这在一些批量生产数据的场景会不够用,百度ID生成器可以每秒几百万甚至更多,是因为百度ID生成器可以消费未来时间。消费未来时间是什么意思呢?正常雪花算法是取当前时间,百度的ID生成器可以利用未来时间生成好id缓存起来。并发大时可以使用到未来时间。
2、本地生成并缓存
和常规雪花算法实现一样,百度id生成器也是本地生成,不是那种集中式中心架构。本地生成无需消耗网络io,另外百度id生成器可缓存,提前消费未来时间生成足够多的id缓存起来。缓存的实现采用了RingBuffer环形数组。
3、缓存行补齐
RingBuffer的实现Tail和Cursor变量可能存在伪共享的问题,导致性能损耗,对Tail和Cursor变量进行缓存行补齐可以消除伪共享,Disruptor 也是用了缓存行补齐。