🌐全局唯一ID生成方案

type
status
date
slug
summary
tags
category
icon
password
Blocked by
Blocking
AI summary

uuid

是什么

uuid的全称是 universally unique identifier ,即通用唯一识别号,它由16字节(128byte)组成,可以用于唯一的标识信息。
格式为 8-4-4-4-12的16进制格式
使用 - 分隔

不同的UUID版本

1. UUID v1 (基于时间)

UUID v1 是基于时间戳生成的,并使用了机器的MAC地址来保证唯一性。其结构如下:
  • 前 60 位表示时间戳,单位是100纳秒(从1582年10月15日以来的时间)。
  • 13 位表示时钟序列,用来防止同一时间生成多个UUID时产生冲突。
  • 剩下的 48 位为节点标识符,通常为设备的 MAC 地址。
由于包含MAC地址,因此UUID v1可能会暴露硬件信息。

2. UUID v2 (DCE 安全)

UUID v2 类似于 v1,但根据用户的本地标识(如UID或GID)和时间戳生成。这种UUID较少使用。

3. UUID v3 (基于命名空间的散列)

UUID v3 使用命名空间和用户指定的名称生成。它基于MD5哈希算法,即根据命名空间和名称的MD5哈希值生成唯一标识符。此版本可以确保同一名称在同一命名空间下生成的UUID始终相同。
命名空间有四种标准类型:
  • DNS:基于域名系统
  • URL:基于URL
  • OID:基于对象标识符
  • X.500 DN:基于X.500目录名

4. UUID v4 (随机生成)

UUID v4 是目前最常用的版本,使用随机数生成器生成UUID。其128位中的122位是随机生成的,剩余6位用于版本信息和其他元数据。这使得v4版本的UUID具有较高的随机性和唯一性。
生成UUID v4的关键是使用高质量的随机数生成器,保证足够的随机性。

5. UUID v5 (基于命名空间的散列)

UUID v5 类似于 v3,但它使用的是SHA-1哈希算法而不是MD5,因此具有更高的安全性。和v3一样,v5生成的UUID对于相同的命名空间和名称也会一致。
 

使用场景

  • 文件、资源的唯一标识
  • 会话标识符
  • 分布式系统中的标识符:微服务架构中生成全局唯一的请求 ID、事务 ID、任务 ID 等。
  • 消息队列中的信息ID

雪花算法

是什么

雪花算法生成的ID通常是一个64位的整数,它的位结构如下:
  • 第一段1位未使用,永远固定为0,因为ID为正数
  • 第二段41位,为毫秒级时间(41位的长度可以使用69年)
  • 第三段10位,为workID(10位的长度最多能部署1024个节点)
  • 第四段为12位,表示每毫秒内的计数(12位的计数顺序号支持每个节点每毫秒支持产生4096个ID序号)
按照 1024个节点计算:每毫秒可以生成的ID序列号有 1024*4096=4194304,足以满足绝大多数业务场景
 
  1. 获取当前时间戳:计算当前时间与纪元时间的差值,以毫秒为单位。
  1. 生成ID
      • 将时间戳左移(41位),数据中心ID左移(5位),机器ID左移(5位),并将序列号添加到最低位。
      • 组合所有部分,生成一个64位的整数ID。
 

雪花算法存在的问题

SnowFlake强依赖 时间戳,所以时间的变动会造成SnowFlake的算法产生错误;使用时需要注意时钟回拨的现象
 
具体实现
 
Prev
sqlite内存模式下的性能测试
Next
linux笔记
Loading...
Article List