分布式系统如何生成全局自增ID

最近复习的时候看到不少人说被问到分布式系统全局ID的问题,有些还要求是全局自增的(TinyURL)
自己搜集了一些资料,但是不是很确定,所以想请老师来点评一下

分布式系统如何生成全局自增ID
参考 Srinath's Blog :My views of the World: Generating a Distributed Sequence Number

  • zookeeper 慢
  • custom server 单点失效 承受不住高并发
  • snowflake 时钟回滚问题

请问面试如果被问到了,选哪个好?

另:如果不要求自增,是不是用uuid就好了?

Snowflake 是自增ID的比较好的方案,这个时钟回滚的问题确实存在,解决方案也很简单,检测出来时钟回滚的话就在可以利用预留出来的2位的bits。00是普通情况,01是发生第一次回滚,10是第二次,11是第三次。这样的话必须要在同一个时间戳上回滚3次才会报错,算是足够好了。
参考这篇文章

1赞

请问Snowflake id怎么用成TinyURL 的short url呢?Snowflake id本身太长,肯定不行。如果hash后,那么就有不唯一的可能。感觉无论是uuid还是Snowflake id都没法用啊。。。求指点