【项目经验】雪花算法与时钟回拨问题解决

本文介绍了在服务器时钟回拨导致雪花算法ID冲突的问题,提出了解决方案,包括修改ID生成算法、调整workerID,并探讨了等待时钟追赶、下线服务、时钟回拨容忍策略和NTP同步等处理方法。同时,对比了美团leaf和百度UID的分布式ID生成方案。
摘要由CSDN通过智能技术生成

一、背景

    4月10日晚,因某方案需要,某同事将服务器时间由4月10日 18:51分改成了4月11日18:51;
    修改几分钟后触发多个业务线阈值报警,大量客诉进线;
    某同事发现修改时间时未摘量,迅速将时间恢复到正常:4月10日 18:57,并将该服务器部署所有的docker实例重启;
    10分钟后业务恢复正常。

服务部署情况:

    k8s+docker;不同业务工程混部


问题描述

     时钟被调成4月11日18:51-4月11日18:57期间,发号器生成了基于该时间段的ID,并贯穿业务全流程,同时暴露给了第三方。如果不处理数据,并继续沿用现在的算法,真正到4月11日18:51-4月11日18:57时,会产生大量ID冲突,引起二次风暴。

二、如何解决?

1、雪花算法描述

        雪花算法是生成分布式唯一ID的方法之一,因为它的全局唯一性、高性能、时间有序、信息量大、高并发性能好、易于部署、不依赖第三方库等优点,被广泛应用。

        我们也在雪花算法的基础上,设计了类雪花算法的分布式ID生成算法。

        因为雪花算法依赖服务器时间,所以其有典型的缺点:时钟回拨问题。当时钟回拨时,会导致生成重复的ID。
       不出意外的话,我们出了意外。。。

        为了后面理解方便,这里简述下我们ID组成:

  • 13
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小王师傅66

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值