1、雪花算法概述
Snowflake 是 twitter 开发的全局唯一 ID 生成服务。
Twitter 的分布式雪花算法 Snowflake,经测试 Snowflake 每秒能够产生 26 万个自增可排序的ID
- twitter 的 Snowflake 生 成ID能够按照时间有序生成
- Snowflake 算法生成 id 的结果是一 个 64bit 大小的整数, 为一个 Long 型(转换成字符串后长度最多 19)。
- 分布式系统内不会产生 ID 碰撞(由 datacenter 和 workerld 作区分)并且效率较高。
分布式系统中,有一些需要使用全局唯一 ID 的场景, 生成ID的基本要求如下:
-
在分布式的环境下必须全局且唯一 。
-
一般都需要单调递增,因为一般唯一ID都 会存到数据库,而 innodb 的特性就是将内容存储在主键索引树上的叶子节点而且是从左往右,递增的,所以考虑到数据库性能,一般生成的 id 也最好是单调递增。为了防止 ID 冲突可以使用 36 位的 UUID,但是 UUID 有一些缺点, 首先他相对比较长,另外 UUID 一般是无序的。
-
可能还会需要无规则,因为如果使用唯一 ID 作为订单号这种,为了不让别人知道一天的订单量是多少,就需要这个规则。
2、雪花算法结构
上图的号段解析: