雪花算法处理时钟回拨能否直接把当前时间设为上一次时间戳?

目前遇到时钟回拨是直接抛出异常,我知道还有一种方式是两个时间判断相差多少,相差不多就sleep一段时间,现在考虑碰到这种场景直接把当前时间戳设为上一次时间戳处理是否可行,后面的逻辑不变,初步看代码逻辑应该是可行,不会出现重复,副作用只是这个id的时间戳部分与实际生成时间不同。

阅读 2.1k
2 个回答
新手上路,请多包涵

时间戳设为上一次时间戳, 那上一次时间戳如果有生成过id的话不是重复了. 别人sleep一段时间是能保证不重复的. 你这我觉得不行.

image.png

之前看到的一个解决方案是,在【机房id_节点id】处空置出几位,来作为:时钟回拨标识位。

比如空置出3位,则有2^3-1 7次的回拨容忍。

或者当前节点出现回拨,抛出异常,使调用者去其他节点获取。


本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题