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

一、背景

    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组成:

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-09 18:24:06       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-09 18:24:06       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-09 18:24:06       87 阅读
  4. Python语言-面向对象

    2024-05-09 18:24:06       96 阅读

热门阅读

  1. Jetpack Compose六:动画和手势

    2024-05-09 18:24:06       33 阅读
  2. 设计模式——适配器模式(Adapter)

    2024-05-09 18:24:06       35 阅读
  3. E2PROM读写函数

    2024-05-09 18:24:06       40 阅读
  4. 引入OSS

    引入OSS

    2024-05-09 18:24:06      27 阅读
  5. 可视化卷积网络

    2024-05-09 18:24:06       24 阅读
  6. web server apache tomcat11-32-rewrite

    2024-05-09 18:24:06       36 阅读
  7. C# Solidworks二次开发:枚举应用实战(第十二讲)

    2024-05-09 18:24:06       31 阅读
  8. 学习c#第23天 StringBuilder 效率测试

    2024-05-09 18:24:06       30 阅读
  9. LeetCode 16.最接近的三数之和

    2024-05-09 18:24:06       37 阅读
  10. thinkphp5.1 新建模块

    2024-05-09 18:24:06       31 阅读