分布式唯一ID的生成方案

2019-12-03  本文已影响0人  SlowGO

分布式ID的特性

不能出现重复的ID,这是最基本的要求。

有利于关系数据库索引性能。

既然是服务于分布式系统,为多个服务提供ID服务,访问压力一定很大,所以需要保证高可用。

如果ID是有规律的,就容易被恶意操作,在一些场景下需要ID无规则。

生成方案

UUID

核心思想是结合机器的网卡、当地时间、一个随机数来生成。

优点:

缺点:

数据库

利用数据库自增ID的特性来生成,如 MySQL 的 auto_increment

优点:

缺点:

Redis

Redis 提供了自增的原子命令,可以保证唯一、有序。

优点:

缺点:

雪花算法

给每台机器分配一个唯一标识,然后通过下面的结构实现全局唯一ID:

时间戳 + 机器标识 + 自增序列号

毫秒在高位,自增序列在低位,一定是递增的。

优点:

缺点:

小结

不同的方案有不同的特点,需要根据自己的需求场景来选择适合的。

例如在美团早期,ID方案就是多种形式的:

后来推出了一个类雪花算法的分布式ID服务:Leaf,QPS压测结果近5w/s。

项目地址:

https://github.com/Meituan-Dianping/Leaf

再推荐2个参考项目:

https://github.com/hengyunabc/redis-id-generator

https://github.com/baidu/uid-generator

image
上一篇 下一篇

猜你喜欢

热点阅读