基於雪花算法(SnowFlake)的分佈式ID生成器都有哪些

什麼是雪花算法?

參考鏈接:https://blog.csdn.net/chen_changying/article/details/79454901

基於雪花算法的分佈式ID生成器都有哪些?

百度(uid-generator)

uid-generator是由百度技術部開發,項目GitHub地址: https://github.com/baidu/uid-generator
uid-generator是基於Snowflake算法實現的,與原始的snowflake算法不同在於,uid-generator支持自定義時間戳、工作機器ID和 序列號 等各部分的位數,而且uid-generator中採用用戶自定義workId的生成策略。

uid-generator需要與數據庫配合使用,需要新增一個WORKER_NODE表。當應用啓動時會向數據庫表中去插入一條數據,插入成功後返回的自增ID就是該機器的workId數據由host,port組成。

對於uid-generator ID組成結構:

workId,佔用了22個bit位,時間佔用了28個bit位,序列化佔用了13個bit位,需要注意的是,和原始的snowflake不太一樣,時間的單位是秒,而不是毫秒,workId也不一樣,而且同一應用每次重啓就會消費一個workId

美團(Leaf)

Leaf由美團開發,同時支持號段模式和snowflake算法模式,可以切換,項目GitHub地址:https://github.com/Meituan-Dianping/Leaf
Leaf的snowflake模式依賴於ZooKeeper,不同於原始snowflake算法也主要是在workId的生成上,Leaf中workId是基於ZooKeeper的順序Id來生成的,每個應用在使用Leaf-snowflake時,啓動時都會都在Zookeeper中生成一個順序Id,相當於一臺機器對應一個順序節點,也就是一個workId

滴滴(Tinyid)

Tinyid由滴滴開發,項目GitHub地址:https://github.com/didi/tinyid
Tinyid是基於號段模式原理實現的與Leaf如出一轍

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章