基于雪花算法(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如出一辙

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