Twitter的分布式自增ID算法snowflake
概述:
结构:
源码:
https://github.com/twitter-archive/snowflake
工程落地经验:
糊涂工具包:
https://github.com/dromara/hutool
springboot整合雪花算法:
优缺点:
解决时钟回拨问题:
百度开源的分布式唯一ID生成器:UidGenerator
Leaf一一美团点评分布式ID生成系统
这个是雪花算法用到的 zk jar包
gitee:https://github.com/Meituan-Dianping/Leaf.git
Leaf 提供两种生成的ID的方式(号段模式和snowflake模式),你可以同时开启两种方式,也可以指定开启某种方式(默认两种方式为关闭状态)。
Leaf Server的配置都在leaf-server/src/main/resources/leaf.properties中
注意:号段是从数据库中读取的,默认从1开始,然后区间事2000,如果中途宕机了,2000没有用完的话,也会抛弃,从2001开始技术
```sql CREATE DATABASE leaf CREATE TABLE `leaf_alloc` ( `biz_tag` varchar(128) NOT NULL DEFAULT '', `max_id` bigint(20) NOT NULL DEFAULT '1', `step` int(11) NOT NULL, `description` varchar(256) DEFAULT NULL, `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`biz_tag`) ) ENGINE=InnoDB; insert into leaf_alloc(biz_tag, max_id, step, description) values('leaf-segment-test', 1, 2000, 'Test leaf Segment Mode Get Id') ```
| 配置项 | 含义 | 默认值 | | ------------------------- | ----------------------------- | ------ | | leaf.name | leaf 服务名 | | | leaf.segment.enable | 是否开启号段模式 | false | | leaf.jdbc.url | mysql 库地址 | | | leaf.jdbc.username | mysql 用户名 | | | leaf.jdbc.password | mysql 密码 | | | leaf.snowflake.enable | 是否开启snowflake模式 | false | | leaf.snowflake.zk.address | snowflake模式下的zk地址 | | | leaf.snowflake.port | snowflake模式下的服务注册端口 | |
雪花算法:换一个类
zk的作用就是自动生成workId(10位)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通