雪花算法问题
时间回拨问题
我们在部署服务器的时候是集群的,集群的时候有一个时间同步服务器,也就是说ABCD这几台服务器同步同一台 叫做E的服务器,E服务器会与网络的时间同步。简单的说,有可能产生时间差,这个时间差产生的id,因为我们64bit的一个生成的序列里面有一个是按照时间戳来的,也就是说在这个时间戳内生成一百万个id的话,那他有可能就是重复的。
解决办法:如果生成的时间戳小于上一个生成时间戳,那他就会废弃当前生成的id,以保证他的id不重复。
//如果当前时间小于上一次ID生成的时间戳,说明系统时钟回退过这个时候应当抛出异常
if (timestamp < lastTimestamp) {
throw new RuntimeException(
String.format("Clock moved backwards. Refusing to generate id for %d milliseconds", lastTimestamp - timestamp));
}
还没有评论,来说两句吧...