分布式环境生成唯一订单id方案

在分布式环境中,生成全局唯一的订单id是一项挑战。本文介绍了四种常见的解决方案:数据库自增主键、UUID、时间戳+ip/Mac地址以及Snowflake算法。其中,Snowflake算法因其高并发性和低依赖性成为推荐选项,它能在一个毫秒内生成419万个唯一id,并通过64位结构包含时间戳、工作节点id和序列号。美团点评的Leaf系统也是一个开源的分布式唯一id生成方案,提供更高效和灵活的选择。
摘要由CSDN通过智能技术生成

分布式环境生成一个唯一id从来不是一个容易的事,不同的节点都独立的各自生成id,高并发性场景下容易生成相同的订单id。


方案1:数据库自增主键

优点:全局唯一、不会重复

缺点:订单id有序、容易被外界爬虫知道业务的订单量数据


方案2:UUID

UUID(Universally Unique Identifier)的标准型式包含32个16进制数字,以连字号分为五段,形式为8-4-4-4-12的36个字符,示例:550e8400-e29b-41d4-a716-446655440000

优点:性能非常高,本地生成,没有网络消耗

缺点:不易于存储,UUID太长,16字节128位,通常以36长度的字符串表示

           由于是无序,长字符串,存储数据库后索引效率比较差

String uuid = UUID.randomUUID().toString()

方案3:时间戳 + ip或者Mac地址

优点:无序、高并发情况下几乎不可能产生相同id,大部分业务可以满足使用

缺点:不适用超高并发,例如1ms可以生成多个订单id的场景,对系统健壮性要求极高的场景


方案4:snowflake(推荐)

Snowflake

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值