Seata内置了一个分布式UUID生成器,用于辅助生成全局事务ID和分支事务ID。具体如下特点:
- 高性能
- 全局唯一
- 趋势递增
这个分布式UUID生成器是基于雪花算法进行改良的,本文针对改良的方法、目的等进行总结
改良点
改良版雪花算法的实现原理参考如下:
- Seata基于改良版雪花算法的分布式UUID生成器分析
- 关于新版雪花算法的答疑
改良版的雪花算法,主要做出如下3点改变
:
- 时间戳不再时刻追随系统时钟。
- 节点ID和时间戳互换位置。
改成:
- 调整了节点ID的生成策略:
- 原版在用户未手动指定节点ID时,会截取本地IPv4地址的低10位作为节点ID。 在实践生产中,发现有零散的节点ID重复的现象(多为采用k8s部署的用户)
- 改为优先从本机网卡的MAC地址截取低10位,若本机未配置有效的网卡,则在[0, 1023]中随机挑一个作为节点ID