分布式是大型架构核心,下面我详解分布式ID@mikechen
数据库自增ID(集中式自增)
利用数据库的 auto_increment 、或 sequence 生成 ID。

优点
-
实现极其简单;
-
ID 绝对递增;
-
无额外组件;
缺点
-
单点瓶颈;
-
扩展性极差;
-
分库后需要额外规则(步长、偏移);
适用场景
-
单体应用;
-
低并发系统;
-
过渡方案;
UUID(通用唯一识别码)
通过算法生成 128 位随机 ID(如: UUID v4)。

优点
-
本地生成,无中心;
-
性能极高;
-
实现简单;
缺点
-
无序,严重影响索引;
-
存储空间大(16 字节;)
-
可读性差;
适用场景
-
对顺序不敏感;
-
写多读少;
-
日志、链路追踪 ID;
雪花算法(Snowflake)
Twitter 开源的方案,通过位运算拼接生成 64 位 ID。
如下图所示:

优点
-
完全去中心化;
-
性能极高(百万级 QPS);
-
趋势递增;
缺点
-
依赖时钟一致性;
-
时钟回拨处理复杂;
-
需要机器 ID 管理;
适用场景
-
微服务架构;
-
高并发分布式系统;
-
对性能要求极高;
Redis自增ID
利用 Redis 的 INCR / INCRBY 保证原子性生成 ID。

优点
-
高性能(10w+ QPS);
-
实现简单;
-
ID 递增;
缺点
-
依赖 Redis 可用性;
-
需要处理持久化、主从切换问题;
-
仍是“中心化组件”;
适用场景
-
中等规模系统;
-
已有稳定 Redis 集群;
-
不追求极致去中心化。
