分布式Unique ID的生成方法一览

本文探讨了在分布式环境中生成唯一ID的各种方法,包括基于发号器的Oracle自增ID、UUID的不同版本(如version1和version4)、Hibernate和MongoDB的实现变种,以及Twitter的Snowflake派号器。每种方法都有其特定的设计考虑,如时间戳、自增序列、机器和进程标识等,以确保ID的唯一性。文章还提出了在不使用派号器的情况下,如何将128位的UUID压缩到64位的Long类型的挑战及其解决方案。
摘要由CSDN通过智能技术生成

来源:江南白衣

链接:calvin1978.blogcn.com/articles/uuid.html

分布式的Unique ID的用途如此广泛,从业务对象Id到日志的TraceId,本文总结了林林总总的各种生成算法。


1. 发号器


我接触的最早的Unique ID,就是Oracle的自增ID。


特点是准连续的自增数字,为什么说是准连续?因为性能考虑,每个Client一次会领20个ID回去慢慢用,用完了再来拿。另一个Client过来,拿的就是另外20个ID了。


新浪微博里,Tim用Redis做相同的事情,Incr一下拿一批ID回去。如果有多个数据中心,那就拿高位的几个bit来区分。


只要舍得在总架构里增加额外Redis带来的复杂度,一个64bit的long就够表达了,而且不可能有重复ID。


批量是关键,否则每个ID都远程调用一次谁也吃不消。


2. UUID


Universally Unique IDentifier(UUID),有着正儿八经的RFC规范,是一个128bit的数字,也可以表现为32个16进制的字符,中间用”-”分割。


- 时间戳+UUID版本号,分三段占16个字符(60bit+4bit),

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值