分布式ID的特点
- 全局唯一性:不能出现有重复的ID标识,这是基本要求。
- 递增性:确保生成的ID对于用户或业务是递增的。
- 高可用性:确保任何时候都能生成正确的ID。
- 高性能性:在高并发的环境下依然表现良好。
原理
雪花算法,是Twitter开源的由64位整数组成分布式ID,性能较高,并且在单机上递增
1.第一位 占用1bit,其值始终是0,没有实际作用。
2.时间戳 占用41bit,单位为毫秒,总共可以容纳约69年的时间。当然,我们的时间毫秒计数不会真的从1970年开始记,所以这里的时间戳只是相对于某个时间的增量。
3.工作机器id 占用10bit,其中高位5bit是数据中心ID,低位5bit是工作节点ID,最多可以容纳1024个节点。
4.序列号 占用12bit,用来记录同毫秒内产生的不同id。每个节点每毫秒0开始不断累加,最多可以累加到4095,同一毫秒一共可以产生4096个ID
同一毫秒的ID数量 = 1024 * 4096 = 4194304
算法实现
package main
import (
"fmt"
"github.com/bwmarrin/snowflake"
"time"
)
var node *snowflake.Node
func Init<