聊一聊Twitter的雪花算法

开发
Twitter的雪花算法方法是一种在分布式系统中生成唯一ID的解决方案。Twitter在推文、私信、列表等方面使用这种方法。

什么是Twitter的雪花算法方法?

这是一种在分布式系统中生成唯一ID的解决方案。Twitter在推文、私信、列表等方面使用这种方法。

(1) ID是唯一且可排序的

(2) ID包含时间信息(按日期排序)

(3) ID适用于64位无符号整数

(4) 仅包含数字值

  • 符号位(1位):保留位(始终为0)。这可以为将来的请求保留。它可以潜在地用于使整体数字为正数。
  • 时间戳(41位):以毫秒为单位的纪元时间戳(雪花的默认纪元等于2010年11月04日01:42:54 UTC)
  • 机器ID(10位):可容纳1024台机器
  • 序列号(12位):每台机器上的本地计数器,每次增加1。该数字在每毫秒重置为0。从理论上讲,一台机器每秒最多可以支持4096(2¹²)个新ID。

Twitter雪花算法方法的优缺点

  • 它长度为64位,是UUID的一半大小
  • 可扩展性强(可容纳1024台机器)
  • 高可用性(每台机器每毫秒可以生成4096个唯一ID)
  • 一些UUID版本不包含时间戳。在这种情况下,Twitter雪花算法具有可排序的优势。
  • 设计需要Zookeeper(缺点)
  • 生成的ID不像UUID那样是随机的。将来的ID可以预测。
  • 41位中可以表示的最大时间戳(约69年)。需要在此之后找到解决方案 :)

使用注意事项

  • Discord使用雪花算法,将其纪元设置为2015年的第一秒。
  • Instagram使用了格式的修改版本,其中41位用于时间戳,13位用于分片ID,10位用于序列号。
  • Mastodon的修改格式具有48位的毫秒级时间戳,它使用了UNIX纪元。剩下的16位用于序列数据。
责任编辑:赵宁宁 来源: 小技术君
相关推荐

2023-12-12 07:13:39

雪花算法分布式ID

2021-01-29 08:32:21

数据结构数组

2020-05-09 14:20:11

信息安全加密

2023-07-06 13:56:14

微软Skype

2024-09-12 10:06:21

2020-09-08 06:54:29

Java Gradle语言

2023-09-22 17:36:37

2021-01-28 22:31:33

分组密码算法

2020-05-22 08:16:07

PONGPONXG-PON

2021-08-01 09:55:57

Netty时间轮中间件

2024-10-28 21:02:36

消息框应用程序

2023-09-27 16:39:38

2018-06-07 13:17:12

契约测试单元测试API测试

2021-07-16 11:48:26

模型 .NET微软

2021-03-01 18:37:15

MySQL存储数据

2021-12-06 09:43:01

链表节点函数

2023-05-15 08:38:58

模板方法模式

2022-08-08 08:25:21

Javajar 文件

2021-08-04 09:32:05

Typescript 技巧Partial

2019-02-13 14:15:59

Linux版本Fedora
点赞
收藏

51CTO技术栈公众号