首页 > 编程语言 >Snowflake 雪花算法补充

Snowflake 雪花算法补充

时间:2023-02-03 00:00:19浏览次数:44  
标签:Java hutool workId 雪花 dataCenterId 算法 节点 Snowflake

  1. 雪花算法,要保持全局唯一,必须要指定唯一的dataCenterId和 workerId,正常这两个数都是0-31 之间的一个值。

  2. 如果我们自己的商用节点,应该依赖注册中心,手动的为每隔节点指定 dataCenterId和workerId

  3. hutool 里面的 雪花算法能用吗?

    hutool里面的没有注册中心,所以不能保证全局唯一的dataCenterId和workId,但是 hutool里面里面的 dataCenterId 是通过物理地址算出来的,然后workId 是通过 dataCenterId的Java对象地址算出来的.

    结论:同一台物理机上 dataCenterId会相等,不同物理机的 dataCenterId 大概率不会相等,同一个Java进程里面 workId 会相等,Java进程重启 workId 会变化 大概率不会相等

    所以可以简单的看成hutool随机的指定了dataCenterId和workId重复的概率 1/255 分之一,如果你能接受2台机子重复概率是1/255分之一就

  4. 怎么保存dataCenterId和workId在集群节点上唯一?

    • 常用的做法是依赖zk的零时节点。

    • 也可以考虑redisson带有看门狗的分布式锁。(对于不想额外引入zk的程序,并且已经有redis)。

    • 可以读取物理机硬盘内指定文件的内的编号,依赖人工保证生成的dataCenterId和workId是否重复,并且下次启动的时候还是读取这个文件。对于redis都没有的程序推荐这种做法,简单并且一劳用益。

标签:Java,hutool,workId,雪花,dataCenterId,算法,节点,Snowflake
From: https://www.cnblogs.com/cxygg/p/17087797.html

相关文章