分布式ID业界解决方案
分布式ID
- 分布式
- ID 唯一身份標識
類比身份證,引出分布式ID:
AtomicInteger / AtomicLong 線程對外看是唯一的
資源征用的場景如何保證唯一:鎖
樂觀鎖 / 悲觀鎖
解決目標
緩存+鎖細粒度化+無鎖,保證全局唯一即可
- CAS也是一個悲觀鎖
下面方法基本都是互相借鑒的
基于UUID生成唯一ID
邏輯主鍵、物理主鍵:id是int自增主鍵,uuid是普通的varchar列
名字空間:國家-地區(qū)
不能使用IP代替MAC(局域網(wǎng)可以,廣域網(wǎng)不行:NAT)
可以使用NAT轉(zhuǎn)換IP地址
UUID生成策略
UID是用戶ID,GID是用戶組 / 線程組ID
隨機數(shù)算法:數(shù)論當中的線性同余,保證每個值的概率分布接近同一個值,不是真正的隨機數(shù)
Java的UUID生成策略,用的是下圖中的 version 4
NAT 網(wǎng)絡(luò)地址轉(zhuǎn)換
NAT名字很準確,網(wǎng)絡(luò)地址轉(zhuǎn)換,就是替換IP報文頭部的地址信息。NAT通常部署在一個組織的網(wǎng)絡(luò)出口位置,通過將內(nèi)部網(wǎng)絡(luò)IP地址替換為出口的IP地址提供公網(wǎng)可達性和上層協(xié)議的連接能力。
必須先建立路由表,然后進行轉(zhuǎn)發(fā)
用來進行IP地址不夠用的問題
單機版主鍵自增方案
現(xiàn)在沒人用了,Redis都比這個方法好
每臺機器設(shè)置不同的初始值,且步長和機器數(shù)相等。
此方法想想都覺得難受…而且拓展性不好
兩臺機器同時申請?zhí)柖蔚臅r候,怎么保證號段唯一?用樂觀鎖
用redis實現(xiàn)分布式id,性能比用db的方案好很多
可以和上面號段的方法結(jié)合使用
存在異步復(fù)制的問題,如果業(yè)務(wù)不能夠容忍,去修改redis源碼,改成同步復(fù)制,但是性能會下降
總結(jié)
以上是生活随笔為你收集整理的分布式ID业界解决方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java程序员需要掌握的计算机底层知识(
- 下一篇: Java程序员需要掌握的计算机底层知识(