分佈式系統之發號器

1、發號器特徵redis

1)全局惟一性:保證不會出現重複ID算法

2)有序性:保證必定的順序性數據庫

3)易擴展:方便擴容安全

4)易恢復:服務不可用時或數據能從原服務器恢復服務器

5)高性能網絡

2、實現發號器的方式併發

2.一、數據庫自增分佈式

優勢:性能

1)保證惟一性spa

2)保證順序遞增

3)簡單

缺點:

1分表分庫後ID會重複

2)經過設置固定步長解決分錶帶來的問題,但擴容不方便

3網絡異常時沒法判斷插入是否成功,若是在執行語句時發生。網絡中斷,客戶端沒法知道事務是否成功,即便成功,也無法再得到產生的 ID

2.二、當前時間毫秒值

優勢:

1)性能好

2)不依賴數據庫,id能優先生成

缺點:

1併發超過1000時,會產生重複ID

2)時鐘回撥會產生重複ID

3)分佈式應用不適用

2.三、UUID

優勢:

1)簡單、性能好

2)不受分表分庫影響

缺點:

1沒法保證遞增趨勢

2UUID32位字符串,佔用空間大

3)查詢性能慢,做爲數據庫主鍵時,新增數據效率慢,會對索引重排序

2.四、數據庫ID分組(設置不一樣的自增步長)

和數據庫自增相似,只是設置不一樣的步長,可知足分佈式應用ID重複的場景,但不易擴容

2.五、Snowflake算法

優勢:全局惟一性,併發高,性能好,易恢復,易擴展

缺點:收時鐘回撥影響

2.六、Redis鍵自增

3、實現思路

3.1  Snowflake算法

11位:符號位,0表示正數,1表示負數,發號器第一位默認爲0

22-42位:時間戳,精確到毫秒

343-52位:機器ID機房ID+服務器ID

453-64位:序列號,自增加,支持同一個節點1ms可產生4096ID

3.2  redis實現思路

1)每次預先從redis取一批有效的ID,用完後再去redis取,提升性能

2)發號器sdk保證線程安全

3)redis保證ID惟一性

相關文章
相關標籤/搜索