分布式ID业界解决方案

分布式ID

  • 分布式
  • ID 唯一身份标识

在这里插入图片描述
类比身份证,引出分布式ID:
在这里插入图片描述

AtomicInteger / AtomicLong 线程对外看是唯一的

资源征用的场景如何保证唯一:锁
乐观锁 / 悲观锁

解决目标

缓存+锁细粒度化+无锁,保证全局唯一即可

  • CAS也是一个悲观锁

下面方法基本都是互相借鉴的
在这里插入图片描述
基于UUID生成唯一ID
逻辑主键、物理主键:id是int自增主键,uuid是普通的varchar列
名字空间:国家-地区
不能使用IP代替MAC(局域网可以,广域网不行:NAT)
可以使用NAT转换IP地址
在这里插入图片描述
UUID生成策略
UID是用户ID,GID是用户组 / 线程组ID
随机数算法:数论当中的线性同余,保证每个值的概率分布接近同一个值,不是真正的随机数
在这里插入图片描述
Java的UUID生成策略,用的是下图中的 version 4
在这里插入图片描述
在这里插入图片描述

NAT 网络地址转换

NAT名字很准确,网络地址转换,就是替换IP报文头部的地址信息。NAT通常部署在一个组织的网络出口位置,通过将内部网络IP地址替换为出口的IP地址提供公网可达性和上层协议的连接能力。
必须先建立路由表,然后进行转发
用来进行IP地址不够用的问题
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

单机版主键自增方案

现在没人用了,Redis都比这个方法好
在这里插入图片描述
每台机器设置不同的初始值,且步长和机器数相等。
此方法想想都觉得难受…而且拓展性不好
在这里插入图片描述
两台机器同时申请号段的时候,怎么保证号段唯一?用乐观锁
在这里插入图片描述
用redis实现分布式id,性能比用db的方案好很多
可以和上面号段的方法结合使用
存在异步复制的问题,如果业务不能够容忍,去修改redis源码,改成同步复制,但是性能会下降
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值