随笔分类
全局唯一 ID
系统全局唯一 ID是我们设计一个系统时常会遇到的一个问题,当然不仅限于系统设计,在开发时遇见也不少:比如全局唯一地去标识某个流程,某个事物时,就有需要;生成 ID的方法有很多,但我们通常希望它是高效、快速、低占用的,以来适应不同的场景、需求以及特性要求
目前感觉一个良好的实现策略便是:SnowFlake
雪花,一种浪漫的蕴意:你永远无法在大自然中找到两片一模一样的雪花!
Java中使用 long来去存储基于 snowflake生成的 id
SnowFlake能做到分布式下 ID的全局唯一,其核心思想便是:符号位 (1bit) - 时间戳毫秒数(41bit) - 数据中心标志(5bit) - 机器标志(5bit) - 递增序号(12bit),其中数据中心标志和机器标志作为机器的表示 ID,也就是支持去标识 1024个机器
- 1 bit:符号位
- 41 bit:表示时间戳,精确到毫秒
- 10 bit:机器的标识 id,这块会去关联本地网卡的 mac地址
- 12 bit:当前节点在 1ms能够生成的最多的 id数,4096
压测:1 ms可生成 4000个 ID
待补充...