前言
唯一ID在互联网大厂的业务线中广泛使用,比如订单号、数据库主键、IM消息序号、交易流水号等等,这些ID的共同特点是唯一标记某一个业务记录或者消息、部分ID自增、全局有序或者局部有序。
UUID作为是一种全局唯一的方案是可供使用的选择之一,但在实际操作中大家一般使用的很少,几个原因:
1. 16个字节128位占用太多的存储空间不适合用来作为主键;
2. UUID的版本1基于MAC地址和时间戳,可保证全局唯一,但容易被硬件追踪;
3. 后续版本使用伪随机数、SHA1又没有前向兼容,用在特定业务的一定范围内使用没有问题,但作为分布式系统的唯一ID不适合。
所以就有了各个互联网大厂分享的各自业务中实现唯一ID的不同算法和系统部署方案,唯一ID算法主要核心聚焦在以下几点:
* ID位数
* ID算法原理
* 全局唯一
* 全局(局部)趋势有序
* 时钟回拨问题
* 外部系统依赖
技术实现汇总
从大厂分享的技术实现汇总如下:
厂牌技术方案ID位数全局唯一有序时钟回拨外部系统依赖TwitterSnowFlake64全局唯一局部有序block waitMongoDB