来源:江南白衣
链接: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),