分布式全局ID(号段模式/雪花算法)
2021-03-11 17:33:03 48 举报
AI智能生成
分布式全局ID(号段模式/雪花算法)是分布式系统中用于生成唯一标识符的一种策略。号段模式将ID划分为多个号段,每个号段内生成的ID是唯一的,不同号段之间可以重复。雪花算法是一种基于时间戳和机器码的算法,通过组合不同的位数来生成唯一的ID。这种策略可以保证在分布式系统中生成的ID具有全局唯一性和递增性,避免了单点故障和数据冲突的问题。
作者其他创作
大纲/内容
分布式ID特点
全局唯一、递增、高可用、高性能
数据库主键自增
有序且占用空间小,但是并发性能不高
分库分表需要改造,复杂,且导致数据量泄漏
在单库或读写分离或一主多从情况下,存在单点故障
UUID
优点
简单、代码方便
性能好,全球唯一
缺点
没有排序,无法保证趋势递增
使用字符串存储,查询效率低
占用空间大,传输数据量大
Redis
优点
不依赖于数据库,灵活方便、性能比数据库高
数字ID天然有序,便于分页或排序
缺点
如果系统中没有使用到redis,需要引入,增加系统复杂度
需要编码和配置的工作量比较大
号段模式
依赖于数据库,但是区别于数据库主键自增的模式
假设100为一个号段,每取一次可以获得100个ID,性能显著提高
雪花算法
SnowFlake 是 Twitter 开源的分布式 ID 生成算法,结果是一个 Long 型的 ID
使用 41bit 作为毫秒数,10bit 作为机器ID,12bit 作为毫秒内流水号,符号位永远是0
组成部分64bit
1bit始终是0,代表正数,符号位
41bit是时间戳,单位是毫秒
10bit是机器ID,5个区域位,5个服务器标识位
12bit是序列号,每个节点1毫秒产生4096个ID
大厂
滴滴 Tinyid
百度 Uidgenerator
Java语言;基本无人维护;只支持雪花算法
美团 Leaf
Java语言;最近维护为2020年;支持号段模式和雪花算法
分布式事务 👉
分布式锁 👉
0 条评论
下一页