这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
分布式 ID
加上第二台服务器的第一天,数据库就报了一串唯一键冲突:两台机器各自自增,都生成了 1001,编出来的短码一模一样。自增 ID 在单机时代是完美的答案,一旦要横向扩展,它就变成了问题本身。
这一章要找的是多台机器下仍然全局唯一的短码来源。Redis 的 INCR 最轻,单线程执行让自增天然原子,一个命令就够,代价是 Redis 挂了 ID 就发不出来,于是有了哨兵、集群、RDB 与 AOF 的持久化取舍和启动时的计数器校准。号段缓存再往前一步,一次从存储里取回一批号段在本地慢慢发,把对外部存储的依赖降到最低,代价是要处理号段用完的边界和双 Buffer 的切换。Snowflake 则完全绕开外部存储,把 64 位拆成符号位、41 位时间戳、10 位机器 ID 和 12 位序列号,结构精确到能算出一台机器能撑多少年、集群能扩到多少台,可时钟回拨和机器 ID 分配成了它的软肋。
读完你应该能说清这几种方案各自把风险放在了哪里,能拆解一个分布式 ID 的每一位含义,并在单机与集群之间给出有依据的取舍——规模不大时用 Redis 计数器就够,超大规模再上 Snowflake。
发现内容有问题?
告诉我们哪里需要改进。
