一、雪花算法简介:
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