一次复杂的雪花算法使用总结

本文总结了一次使用雪花算法在分布式环境下的实践经验,包括算法原理、项目背景、需求分析、问题解决方案以及资源分配策略。通过配置hostid和workerid,确保了在多台服务器和多个worker间生成的ID唯一且有序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、雪花算法简介:

1、雪花算法是Twitter 开源的分布式、自增长 id 生成算法;

2、雪花算法生成的id是一个无符号长整型(unsigned long)的id,它占64个bit(8*8);

二、项目背景:

1、多台服务器组成的集群;

2、每台服务器同时启动多个worker;

3、每个worker使用雪花算法生成自增长id、再通过mycat进行批量入库。

三、需求分析:

1、自增长;

2、分布式;

显然,雪花算法很适合我们。

四、问题分析及解决方案:

1、Q:如何确保生成的id为正?

A:让id的第一个bit位固定为0。

2、Q:如何确保id自增?

A:使用毫秒级时间戳。

3、如何确保集群中不同的机器上的生成id不重复?

A1:每台服务器有一个固定的机器id(hostid),这个能确保集群中不同的机器上的生成id不重复。

A2:给每台服务器配置一个id,用这个id代替hostid,这个能确保集群中不同的机器上的生成id不重复。

4、如何确保同一台机器上不同的worker生成的id不重复?

A1:每个worker即一个进程(pid),可以取进程id来区别不同worker。

A2:将每个worker的pid映射成对应的workerid,并写入配置文件中。

5、如何确保同一worker的同一毫秒内生成的id不重复?

A:增加序号来控制,如果时间相同则改变序号值。

 

通过上面的分析,我们可以确定雪花算法生成的id包括以下五部分:符号位、时间戳、hostid、workerid、序号

1)符号位,无意义;

2)时间戳,控制自增长;

3)hostid,控制不同机器生成不重复的id;

4)workerid,控制同一机器上不同进程生成不重复的id;

5)序号,控制同一机器上同一进程且同一时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值