请选择 进入手机版 | 继续访问电脑版

3楼社区

查看: 26|回复: 3

一种自动配置雪花 id 算法参数的方法

[复制链接]

该用户从未签到

2830

主题

2830

帖子

8631

积分

版主

Rank: 7Rank: 7Rank: 7

积分
8631
发表于 2020-10-21 08:40:42 | 显示全部楼层 |阅读模式
id-demo

Snowflake powered by Redis or Zookeeper
简化参数配置

雪花 id 算法需要配置 dataCenterId 和 workerId,分别都是 5 位,两项加起来是 10,范围是 2 ^ 10 = 1024; 可以简化处理,两个参数简化为一个,使用下面的依赖,
  1. <dependency> <groupId>com.relops</groupId> <artifactId>snowflake</artifactId> <version>1.1</version> </dependency>
复制代码
  1. int node = 0; Snowflake snowflake = new Snowflake(node);
复制代码


node 的范围建议 0~1023
解决分配 node 参数难题

在集群部署环境,多台服务器肯定是不能用同一个 node 参数的,比较简单想到的方案就是根据服务器的 ip 地址分配,不过需要首先知道所有服务器的 ip 地址,不过这样的方案是无法支持服务器扩容的,也不支持容器化部署的方式;

假设服务器数量不超过 10 个,版本迭代大约所有服务器都会重新部署,想办法让每次部署都获取新的 node,因为只要是新的就不会存在冲突,

方案 1, 使用 Redis 的 increment 原子性操作,然后对 1024 取模即为新分配的 node,想象 1024 数字环,当新部署服务器获得余数再次出现 0 时,原来其他的服务器获取的 node 要比 0 大很多,千数量级比个位数数量级的差距还是足够我们使用的;

方案 2, 使用 Zookeeper 的 SEQUENTIAL 模式创建节点,获得序列值然后也是对 1024 取模处理,基本与方案 1 相同。
demo

,

方案2优化了一下,使用PERSISTENT_SEQUENTIAL创建模式,比较ip:port是否已经存在,存在就使用原来的序号;,
id-demo

Snowflake powered by Redis or Zookeeper
简化参数配置

雪花 id 算法需要配置 dataCenterId 和 workerId,分别都是 5 位,两项加起来是 10,范围是 2 ^ 10 = 1024; 可以简化处理,两个参数简化为一个,使用下面的依赖,
  1. <dependency> <groupId>com.relops</groupId> <artifactId>snowflake</artifactId> <version>1.1</version> </dependency>
复制代码
  1. int node = 0; Snowflake snowflake = new Snowflake(node);
复制代码


node 的范围建议 0~1023
解决分配 node 参数难题

在集群部署环境,多台服务器肯定是不能用同一个 node 参数的,比较简单想到的方案就是根据服务器的 ip 地址分配,不过需要首先知道所有服务器的 ip 地址,不过这样的方案是无法支持服务器扩容的,也不支持容器化部署的方式;

假设服务器数量不超过 10 个,版本迭代大约所有服务器都会重新部署,想办法让每次部署都获取新的 node,因为只要是新的就不会存在冲突,

方案 1, 使用 Redis 的 increment 原子性操作,然后对 1024 取模即为新分配的 node,想象 1024 数字环,当新部署服务器获得余数再次出现 0 时,原来其他的服务器获取的 node 要比 0 大很多,千数量级比个位数数量级的差距还是足够我们使用的;

方案 2, 使用 Zookeeper 的 SEQUENTIAL 模式创建节点,获得序列值然后也是对 1024 取模处理,基本与方案 1 相同。
demo
回复

使用道具 举报

该用户从未签到

0

主题

107

帖子

2342

积分

传奇人物

Rank: 10Rank: 10Rank: 10

积分
2342
发表于 2021-1-11 21:06:58 | 显示全部楼层
时光如飞刀,刀刀催人老
回复

使用道具 举报

该用户从未签到

0

主题

149

帖子

2628

积分

传奇人物

Rank: 10Rank: 10Rank: 10

积分
2628
发表于 2021-2-15 09:23:45 | 显示全部楼层
神马都是浮云!很给力!
回复

使用道具 举报

该用户从未签到

1

主题

107

帖子

2307

积分

传奇人物

Rank: 10Rank: 10Rank: 10

积分
2307
发表于 2021-2-23 14:07:07 | 显示全部楼层
666
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

快速回复 返回顶部 返回列表