分布式ID业界解决方案

 

分布式ID

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

分布式ID业界解决方案
类比身份证,引出分布式ID:
分布式ID业界解决方案

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

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

解决目标

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

  • CAS也是一个悲观锁

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

NAT 网络地址转换

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

单机版主键自增方案

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

分布式ID业界解决方案
分布式ID业界解决方案

分布式ID业界解决方案
分布式ID业界解决方案
分布式ID业界解决方案
分布式ID业界解决方案

  •  

相关文章: