雪花算法如何应用于分布式系统生成超长尾词唯一ID?

2026-04-02 01:380阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计559个文字,预计阅读时间需要3分钟。

雪花算法如何应用于分布式系统生成超长尾词唯一ID?

背景分布系统中,某些场景下需要使用全局唯一的ID。为防止ID冲突,可以使用36位的UUID。但UUID存在一些缺点,因此在这种需要全局唯一ID的场景下,仍可使用36位的UUID来避免ID冲突。

背景分布式系统中有一些需要使用全局唯一ID的场景这种时候为了防止ID冲突可以使用36位的UUID但是UUID有一些缺点有一些需要使用全局唯一ID的场景这种时候为了防止ID冲突可以使用36位的UUID但是UUID有一些缺点首先他相对比较长另外UUID一般是无序的。

有些时候我们希望能使用一种简单一些的ID并且希望ID能够按照时间有序生成。

而twitter的snowflake解决了这种需求最初Twitter把存储系统从MySQL迁移到Cassandra因为Cassandra没有顺序ID生成机制为了满足Twitter每秒上万条消息的请求每条消息都必须分配一条唯一的id这些id还需要一些大致的顺序(方便客户端排序)并且在分布式系统中不同机器产生的id必须不同所以twitter开发了这样一套全局唯一ID生成服务。

Snowflake算法核心

  • SnowFlake的结构如下(每部分用-分开): 把时间戳工作机器id序列号组合在一起。

*1位标识由于long基本类型在Java中是带符号的最高位是符号位正数是0负数是1所以id一般是正数最高位是0

*41位时间截(毫秒级)注意41位时间截不是存储当前时间的时间截而是存储时间截的差值(当前时间截 - 开始时间截) 后得到的值这里的的开始时间截一般是我们的id生成器开始使用的时间由我们程序来指定的(如下下面程序IdWorker类的startTime属性)。

阅读全文

本文共计559个文字,预计阅读时间需要3分钟。

雪花算法如何应用于分布式系统生成超长尾词唯一ID?

背景分布系统中,某些场景下需要使用全局唯一的ID。为防止ID冲突,可以使用36位的UUID。但UUID存在一些缺点,因此在这种需要全局唯一ID的场景下,仍可使用36位的UUID来避免ID冲突。

背景分布式系统中有一些需要使用全局唯一ID的场景这种时候为了防止ID冲突可以使用36位的UUID但是UUID有一些缺点有一些需要使用全局唯一ID的场景这种时候为了防止ID冲突可以使用36位的UUID但是UUID有一些缺点首先他相对比较长另外UUID一般是无序的。

有些时候我们希望能使用一种简单一些的ID并且希望ID能够按照时间有序生成。

而twitter的snowflake解决了这种需求最初Twitter把存储系统从MySQL迁移到Cassandra因为Cassandra没有顺序ID生成机制为了满足Twitter每秒上万条消息的请求每条消息都必须分配一条唯一的id这些id还需要一些大致的顺序(方便客户端排序)并且在分布式系统中不同机器产生的id必须不同所以twitter开发了这样一套全局唯一ID生成服务。

Snowflake算法核心

  • SnowFlake的结构如下(每部分用-分开): 把时间戳工作机器id序列号组合在一起。

*1位标识由于long基本类型在Java中是带符号的最高位是符号位正数是0负数是1所以id一般是正数最高位是0

*41位时间截(毫秒级)注意41位时间截不是存储当前时间的时间截而是存储时间截的差值(当前时间截 - 开始时间截) 后得到的值这里的的开始时间截一般是我们的id生成器开始使用的时间由我们程序来指定的(如下下面程序IdWorker类的startTime属性)。

阅读全文