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位)