原创文章,如需转载,请注明来自:https://bigzuo.github.io/
背景介绍
项目开发过程中经常会需要生成一个唯一ID,并且由于现在项目应用都是集群部署,所以更多时候还需要保证唯一ID支持分布式。
一些情况下,开发人员为了省事,会直接使用时间戳System.currentTimeMillis()
或者是UUID。这两种方式都存在不完善的地方。尤其是采用时间戳,时间戳本质是毫秒数,完全不支持分布式,会存在很高可能导致生成的ID重复。UUID虽然本身生成机制可以保证全球唯一,横向扩展性好,但是部分场景下,UUID长度可能过长,并且UUID是字符串类型,对需要对ID进行排序、对比的场景支持的并不友好,索引效率也很低。
鉴于以上原因,我们基于Twitter 开源的分布式ID生成算法Snowflake重写了一套分布式ID生成算法,即可以保证分布式唯一,又可以解决采用时间戳或者UUID带来的问题。