谈谈分布式系统中的唯一ID生成

本文探讨了分布式系统中生成唯一ID的几种常见方案,包括Mysql集群的自增ID、ID数据库(如Redis和Zookeeper)、Twitter的雪花算法以及mongoDB的ObjectId策略。分析了各方案的优缺点,如雪花算法的唯一性和部分有序性,但存在时钟回拨的风险,以及ID数据库的有序性与高维护成本。
摘要由CSDN通过智能技术生成

前言

我们目前主流的服务端系统都是分布式的架构。业务分布在不同的机器节点上产生数据,数据也存储在不同的机器节点。为了方便标识数据,我们使用唯一且有序的ID来标识数据。即:

  • 整个分布式系统中,新生成的ID永远不会产生与之前已经生成的ID重复;
  • 生成的所有ID可以根据生成的时间进行排序(生成时间晚的排序顺序靠后)

我们来看一下市面上的几种主流的ID生成方案。

一、Mysql 集群

由于我们的讨论前提是分布式架构的系统,所以这里的 Mysql 我们默认是集群版。
众所周知,Mysql 有自带的唯一ID机制,即自增主键,可以保证在同一个数据库中,表内生成的每一条记录都是唯一且有序的。

但是如果放在分布式系统里面,我们用分库/分表的架构存储记录,那就会导致在系统中产生重复的ID
如下图,表1 2 3都是存储相同记录的不同表(可以在同一个数据库里,也可以在不同数据库里),表1 2 3都会产生id相同的数据。

为了解决这个问题,mysql 官方支持数据库 ID 生成时设置步长,可以保证不同数据库中相同表的id唯一性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值