这是一个业务场景图解大全,主要包括微服务架构、JVM内存模型、高并发秒杀系统、库存扣减处理和防护机制等核心内容,使用图文方式帮助理解在实际业务中如何应对高并发、突发流量等挑战。
一、微服务架构图(部分结构类似于网络拓扑图)

二、JVM内存区域分布图

三、秒杀场景图解

疑问解析
1.前端限流:秒杀流量还有个特点,就是大部分请求实际都是无效的,因为秒杀的商品库存往往都是个位数,而抢购的用户是其成干上万倍。在前端随机限流,降低请量。说的更直白一些即部分用户点击抢购按钮,但是请求发不到后端,直接前端代码返回秒杀结束。(如果预测量在太大,可以这样操作,毕竟也是随机的)
2.在量级没这么大的情况下,实际上的秒杀架构不需要如上图所示,例如不需要引入 lvs、本地缓存之类的。
四、高并发库存扣减图解其一

疑问解析
1.redis 操作成功后,mq发送失败怎么办?因此,还需要一个准实时对账机制, lua脚本内不仅要扣减库存,还需要利用 zset 增加流水,score 设置为时间。定时拉取一段时间流水记录比对数据库的库存是否一致,如果不一致则补偿。或者其他形式的补偿机制。
2.同时兜底确实很重要!所以在业务上的设计我们要尽量考虑异常极端情况,设计一个简单的兜底也比没兜底好。针对秒杀,其实最简单的方案就是加个开关:关闭秒杀,直接返回秒杀结束。
3.预防黑产,借助一些算法对用户的来源、行为数据等等进行分析,如果发现不法分子,则将其加入到黑名单中。脚本抢购实际上可以用验证码、答题等机制拦截,并且这种机制也可以打散用户的请求,降低瞬时流量高峰。