分布式唯一ID实现
在业务开发中,大量场景需要用到唯一ID,比如系统流水号,订单号等等。
那么,分布式唯一ID有哪些特征呢?
- 唯一性: 生成的ID全局唯一。
- 高可用: 可保证在高并发下的可用性,确保任何时候都能正确生成ID。
- 自主性:分布式环境下不依赖中心认证,即可自行生成ID。
- 安全性:不暴露系统和业务信息。
- 有序性:生成的ID按某种规则有序,便于数据库插入及排序。(某些情况下也需要无序ID)
常见的分布式唯一ID生成方法有哪些?
- 数据库自增ID
使用数据库的ID自增策略。
优点:
简单,天然有序。
缺点:
- :并发性不好。
- :依赖数据库,数据库故障后不可用。
- Redis生成ID
redis的所有命令操作都是单线程的,本身提供像incr和increby这样的自增原子命令,能保证生成的ID唯一有序。
优点:
- :并发性能好
- :数字ID天然有序,对分页或排序结果很有帮忙
缺点: - :如果系统中没有redis,需要引入新组件,增加系统复杂度。
- UUID生成
结合机器的网卡(基于名字空间/名字的散列值MD5/SHA1),当地时间(基于时间戳&时钟序列)及一个随机数来生成UUID
优点:本地生成,没有网络消耗,生成简单,没有高可用风险。
缺点:
- :不易于存储:UUID太长,16字节128位。
- :信息不安全,基于MAC地址生成的UUID的算法可能会造成MAC地址泄漏。
- :UUID无序,不利于数据库查询,查询效率低。