主键问题以及分布式 id

分布式 id 需要处理的问题主要是同一时间在多台机器中保证生成的 id 唯一,为了这么做我们可以这么做:

分布式 id 生成策略

先说几个已经被淘汰的策略引出分布式 id 的问题

1,UUID:UUID 随机并且唯一,在单一的数据库中就不适合作为主键,因为生成的字符串太长不符合索引优化规则

2,自增 ID:不管是数据库自增还是MP自增,分布式数据库中总是要存放一定范围的数据,使用自增策略可能会导致不同数据库存放同一id的问题

以下的方法比较靠谱

3,redis 生成:利用 redis 的 incr 命令生成 id,设置起始值和步长,步长值是配置了多少台 redis,这种方法同样适应与数据库多主模式

4,雪花算法:生成一个64bit的id,也就是long类型的数字,长度适中并且方便快捷

雪花算法

雪花算法是一个比较常见的生成分布式 id 的方式,它会生成一个 8 字节的数据,通过确保每段数据在空间与时间上唯一来确定最终数据的唯一

64bit 中,起始 1bit 为0,闲置不用

接下来 41bit 代表时间戳,这个是毫秒级的时间,存放时间戳的差值(当前时间-固定的开始时间),41位的时间戳可以使用69年

10bit 存放机器 id,前 5bit 代表机器位置(配置在不同地区的机器有不同 id),后 5bit 代表机器 id (一个地区会配置集群)

最后的 12bit 代表流水号,一个毫秒时间内最多可以处理4096个 id

相关推荐
z***02609 分钟前
【RabbitMQ】超详细Windows系统下RabbitMQ的安装配置
windows·分布式·rabbitmq
回家路上绕了弯1 小时前
生产环境服务器变慢?从应急到根因的全流程诊断处理指南
分布式·后端
喵了几个咪6 小时前
Golang微服务框架Kratos应用分布式任务队列Machinery
分布式·微服务·golang
x***58706 小时前
后端分布式缓存一致性哈希,Java实现
分布式·缓存·哈希算法
g***86697 小时前
RabbitMQ之交换机
分布式·rabbitmq·ruby
不会写代码的ys7 小时前
仿RabbitMQ实现消息队列(三)--muduo介绍与使用
linux·分布式·rabbitmq
一只会写代码的猫8 小时前
当分布式协同成为主流应用架构时系统可信计算将面临的新挑战与革新方向
分布式·架构
q***84578 小时前
分布式监控Skywalking安装及使用教程(保姆级教程)
分布式·skywalking
小坏讲微服务10 小时前
Docker Compose搭建Git仓库私服上传微服务
分布式·git·docker·微服务·容器·springcloud·springalibaba
Violet_YSWY11 小时前
Kafka KRaft 模式(无 ZooKeeper)是啥
分布式·zookeeper·kafka