一开始用的百度雪花算法封装的一个项目,在生成测试时发现会有重复ID,并且在一次压测后,k8s 集群所有工作节点都宕机了,回退代码后恢复。
后来用百度雪花算法的项目自己改成 springboot 集成,maven 方式引入项目,一次压测后还是把工作节点搞宕机了,回退代码后恢复。

准备放弃百度雪花算法,自己实现时钟回拔掩码来解决 k8s pod 时钟抖动的问题
参考:https://yanmouxie.com/snowflake-id-for-kubernetes-handle-clock-backwards.html

思路在上文中再加一个点,2位时钟回拔掩码,一共4个值,维护一个掩码对应的时间戳列表,每当出现时钟回拔时,保存当前时间戳至对应掩码位置,开始寻找列表中为null或者时间戳比当前时间戳小的值,找不到时报错 Clock moved backwards.能支持四次时间回拔,每次重回拔后的时间开始重新计算生成ID,且时间稳定后可复用掩码,也保证了列表所有值不符合要求时不会继续生成异常ID。
k8s pod 总不会连续向下抖动4次吧,就不信治不了它。

好文:https://blog.csdn.net/qusikao/article/details/137155439
看了上面文章后决定采用timestamp+1的方式解决这个问题,毕竟我并不在意ID中的时间,只希望有稳定的ID生成,掩码的方式会导致可生成的ID数量变少。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注