分布式:分布式系统下的唯一序列

在分布式系统中,为了保证业务操作的独立性和唯一性,通常需要生成全局唯一序列号。本文介绍了多种生成策略,包括数据库自增、系统时间毫秒数、UUID、批量预生成ID、Redis生成序列、snowflake算法、UidGenerator和Leaf等,分析了各自的优缺点,重点推荐了Redis方案和snowflake算法,适合高并发和对有序性有要求的场景。
摘要由CSDN通过智能技术生成

1 介绍

在分布式系统中,由于涉及到多个不同业务module的交互,以及高并发的场景。我们需要系统能够生成一个跨业务module的全网唯一序列号,来保证我们业务操作的独立性和唯一性。 

在常见的业务场景中,比如全局订单Id,唯一标识的支付编号等,都需要这个来保证。

那生成ID都有哪些解决方案呢?特别是在复杂的分布式系统业务场景中,我们应该采用哪种解决方案来实现这个唯一序列呢?

一般来说,这个唯一序号有如下几种特征:

  • 全局唯一性:确保生成的序列是全局唯一的,不可重复。

  • 有序性:确保生成的ID值对于某个用户或者业务是按一定的数字有序递增的。

  • 高可用性:确保生成ID功能的高可用,能够承接较大峰值,能够保证序列生成的有效性(不重复且有序)。

  • 带时间标记:ID中有时间片段组成,可是清晰识别出操作的时间。

下面是业内几种常见的分布式唯一序列生成方案,我们一一来介绍下。

2 数据库自增

数据库主键设置自增序号 auto_increment,可以按照一定的趋势自增,保证主键ID的唯一性。

这个方案简单易操作,优点是明显、可控。

但由于它是在数据库的单表上进行操作,对数据库性能依赖比较明显,高并发下的压力也很大。所以不是唯一ID生成的最佳方法。

1 create table `t_generator_id` 
2 ( 
3 `id` bigint(20) not null auto_inc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值