返回

提问 添加收藏

分享一段生成分布式全局唯一ID的代码

浪客Dandy 发布于 2017年08月28日 (共有1个回帖)

首先,说一下为什么要自己生成去全局唯一ID:

  • 在分布式系统中,很难依赖数据库生成ID(性能上的瓶颈、不想绑定在某个数据库的实现方法,比如MongoDB的ObjectId)
  • 需要一个可以根据时间粗略排序的ID,所以类似UUID的算法不行

我的具体实现办法,参考自Google Firebase公布的算法https://firebase.googleblog.com/2015/02/the-2120-ways-to-ensure-unique_68.html?m=1,此算法本身类似Twitter Snowflake,区别在于长度更长,20个字符串,Snowflake为64bit数字,因此时间戳长度可以支持到AD10000+。另外不再需要输入机器ID、数据中心ID之类的数据,采用纯随机算法。同样可以保证粗略的时间排序。

最后附上我的Java代码实现,线程安全,性能优异:

https://gist.github.com/longkerdandy/a296b7a084fd191af6e4176eed168812

文明上网,理性发言
客户端 Android iPhone WP7