背景
实际业务中,往往会用数据库自增ID来作为业务对象的唯一ID;
但数据日渐增多的互联网行业,分库分表则成了行业的通用解决方案;
此时数据库自增ID就不能满足业务需求了,行业内有各种分布式ID生成解决方案,其中雪花ID就是其中使用较多的一种。
雪花算法原理
1 基本构成
雪花算法(Snowflake)是 Twitter 开源的分布式 ID 生成算法,可以基于时间生成全局不重复的、有序的、可自增的 64 Bit 的 ID,适用于分布式系统中的 ID 生成需求。
在标准版本中由以下部分组成:
符号位(1bit)- 时间戳相对值(41bit)- 数据标志(5bit)- 机器标志(5bit)- 递增序号(12bit)
0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000
一起来一共64Bit组成,其中:
1、最高位是符号位,用于区分是正数还是负数,这里始终为0,我们用不到;
2、41位的毫秒级时间戳,41位的长度可以使用69年;
3、5位datacenterId和5位workerId,加起来共10位,最多支持32 x 32 = 1024个节点
4、最后12位是毫秒内的计数,12位的计数顺序号支持每个节点每毫秒产生4096个ID序号