概述在分布式系统中,有一些场景需要使用全局唯一的ID。在这种情况下,可以使用36位UUID来防止ID冲突。但是,UUID有一些缺点。首先,它们相对较长。此外,UUID通常是无序的。有时我们希望使用更简单的ID,希望ID能够按时间顺序生成。Twitter的Snowflake解决了这个需求。最初,Twitter将存储系统从MySQL迁移到了Cassandra。因为Cassandra没有顺序ID生成机制,所以开发了这样一个全球唯一的ID生成服务。结构体snowflake结构如下(各部分用-隔开):最高位为符号位,始终为0,后面41位为毫秒级时间(41位的长度可以用69年)然后5位datacenterId和5位workerId(10位长度最多支持部署1024个节点)最后12位为毫秒内计数(12位计数序列号支持每个节点生成4096每毫秒ID序列号)。总数加起来刚好是64位,是ALong类型。(转成字符串后最大长度为19)snowflake生成的id一般按照时间增量排序,整个分布式系统不会发生id冲突(以datacenter和workerId区分),效率高.经过测试,snowflake每秒可以生成26万个ID。
