通过 **Redis Lua 脚本原子特性**,完成用户购票令牌分配,通过令牌限流以应对海量用户购票请求。

业务背景:购票流程的核心逻辑是什么?:
在这里插入图片描述

1.通过自定义注解实现幂等性,防止用户重复提交(通过uniqueKeyPrefix+key来生成唯一注解,当相同的请求发送过来即返回Message)2.通过责任链来验证提交参数 3.通过分布式锁来避免分配相同的座位 4.远程调用订单服务生成订单号(基因法) 5.创建订单记录 6.延迟关闭订单(如何将消息消费在订单服务,涉及到远程循环依赖,需要避免)

但是!!!V1版本购票存在问题(为了保障列车座位不超卖以及一个座位不分配给多名用户,选择使用分布式锁来保障数据安全和一致性。):1.考虑到节假日高铁系统的瞬时高并发压垮系统,大量的抢票请求卡在获取分布式锁阶段(一般tomcat同一时间最多200个请求)因此大量请求会因为分布式锁的申请而发生阻塞,导致请求无法快速处理。这会导致后续请求长时间被阻塞,使系统陷入假死状态。无论请求的数量有多大,系统都无法返回响应。此外,随着请求的积累,还存在内存溢出的风险。更糟糕的是,如果 SpringBoot Tomcat 的线程池被分布式锁占用,查询请求也将无法得到响应2. v1使用的分布式锁是非公平锁,为了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值