以下是你上传的「Snowflake 中的坑及配置实践」内容的文字版整理:
简介:分布式 ID 生成器 Snowflake 里面的坑你是否知道?
一、分布式 ID 生成器需求
-
性能强劲
-
全局唯一不能重复
-
防止恶意用户根据 ID 的规律来获取数据
二、全局唯一不能重复的坑
坑一:
- 分布式部署就需要分配不同的
workId
,如果workId
相同,可能会导致生成的 ID 相同
坑二:
-
分布式情况下,需要保证各个系统时间一致
如果服务器的时钟回拨,就会导致生成的 ID 重复
什么时候会有系统回拨?
-
小滴课堂-老王闲着,人工在生产环境做了系统时间调整,应该不会这么傻吧?
-
业务需求,代码里确实做了系统时间同步
-
三、配置实操
示例配置:
spring.shardingsphere.sharding.tables.traffic.key-generator.props.worker.id=1
四、实现方式
方式一:MybatisPlus 中配置
-
用于订单 ID 的配置,示例代码如下(
TrafficDO
类配置):@TableId(value = "id", type = IdType.ASSIGN_ID)
-
默认实现类为
DefaultIdentifierGenerator
,底层使用的是雪花算法
方式二:Sharding-JDBC 配置文件中配置
-
在注释 DO 类中 ID 分配策略如下:
id 生成策略
key-generator:
column: id
props:
worker:
id: 0
# id 生成策略
type: SNOWFLAKE
是否需要我将这些内容也整理成页面样式(例如 Markdown 网页或 PDF 版)?也可以合并前两部分一起做。