雪花 ID 在分布式环境中用于生成无冲突、简短、唯一的 ID。与依赖数据库生成 ID 或使用长 128 位 UUID 等传统方法不同,Snowflake ID 使用时间和简单的按位运算。这种巧妙的技术允许每个微服务独立生成唯一的 ID,而不需要中央系统来避免冲突。
生成雪花 ID 就像用三个关键部分构建拼图一样。让我们来分解一下:
取一个n位长的位串:
首先,我们从长度为 n 的位串开始。这将保存生成唯一 ID 所需的所有信息。
分为三段:i、j、k:
位串分为三部分,使得 i j k = n.
i - 时间组件:
第一部分 i 表示当前时间。选择一个固定的开始时间(也称为纪元),i 的位将通过以纳秒为单位的当前时间减去开始时间来计算。这可确保新的 ID 始终大于旧的 ID。
j - 机器 ID:
第二部分 j 是机器标识符。当你的微服务启动时,它会被分配一个唯一的ID(机器ID),它成为j部分。这可以确保不同机器生成的 ID 不会发生冲突,即使它们是在完全相同的时刻创建的。
k - 序列号:
最后一部分 k 是序列号。它的作用就像一个计数器,只要在同一时间单位内生成多个 ID,该计数器就会递增。这可以保持 ID 的唯一性,即使它们是快速连续生成的。
将雪花 ID 视为繁忙厨房中的特殊菜肴标签:
查看此 GitHub 存储库,了解 Snowflake ID 生成的 Go 实现
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3