B2C 标准版 (PHP) 演示 标准版 (PHP)
S2B2C 会员电商系统演示 Pro会员电商系统
S2B2C/O2O 多门店系统演示 多门店系统
B2B2C/O2O 多商户系统 (PHP) 演示 多商户系统 (PHP)
B2B2C/O2O 多商户系统 (Java) 演示 多商户系统 (Java)
B2C 标准版 (Java) 演示 标准版 (Java)
B2B2C 多商户外贸版演示 多商户外贸版
B2C 知识付费系统演示 知识付费系统
陀螺匠
产品 演示网址 账号 密码

CRMEB客服

CRMEB咨询热线 咨询热线

400-8888-794

CRMEB微信扫码咨询

微信扫码咨询

微信扫码咨询

应用市场 应用市场 CRMEB开源商城下载 源码下载 CRMEB帮助文档 帮助文档
返回顶部 返回顶部
CRMEB客服
CRMEB论坛
秒杀业务优化思路
开源商城
开源软件
开源系统
商城系统
2022-08-20
15868

各位小伙伴面试的时候,经常会碰到面试官问一些高并发相关的业务场景,这篇文章帮助进入开发行业不久的程序猿了解如何简单实现抢购相关的业务流程,帮助大家梳理下思路。

下面以CRMEB开源商城为例,了解下秒杀活动的创建流程。

首先通过数据验证后,接下来开启事务来保证数据的一致性,然后创建秒杀商品,之后将库存写入Redis缓存中,这块后面优化思路里面会提到。


用户下单时同样先开启事务,进行原子性操作,经过库存检测等验证后,创建成功后预扣除库存、积分抵扣等操作。

后续会进行创建后置事件,例如订单记录、消息推送、订单超时自动取消、计算订单佣金、支付提醒等功能都可以放在后置事件中。

下面从几个方面简单说下优化思路:

1. 数据库作为最终数据存储的地方,数据的准确性是放在第一位的,为了防止商品出现超卖的情况,一般会通过锁来解决,悲观锁/乐观锁,配合事务来一起使用,数据量大的情况下可以考虑读写分离,上云数据库

2. 为了缓解网络IO和服务器压力,还可以将商品、库存等信息放在缓存中搭配使用,这样既能提高用户访问体验,还能减轻数据库访问压力,后续扣库存可以搭配消息队列来进行处理

3. 可以部署多台服务器共同承担压力,有效降低服务器故障几率,保证秒杀业务统的高可用。

4. 可以通过CDN过滤大量的静态文件请求,服务端提前将数据放入缓存进行预热,加大服务器的吞吐量。

5. 作为电商项目,其中秒杀模块一种常见的促销方式,常用于刺激用户消费,往往商品一上架就被抢购一空。这类活动的特点就是用时比较短,瞬时并发量高,类似的还有12306抢票,淘宝双十一等。

6. 服务器的处理资源是有限的,为了避免出现超载导致服务器宕机,访问量过高导致服务器被压垮,这种情况下除了部署多台服务器以外还可以进行限流操作,防止恶意攻击和刷单,这块常用的有令牌桶算法和漏桶算法,相对来说令牌桶算法会尽可能的压榨服务器性能,建议优先使用令牌桶算法进行限流。

7. 为了应对短时间大量的读写高峰,可以考虑加入消息队列来进行削峰、解耦,业务线可以进行拆分,积分、库存、优惠券等操作可以放入不同的消息队列中进行异步消费,降低请求耗时,来提高服务吞吐量。


微信登录/注册

切换手机号登录

{{ bind_phone ? '绑定手机' : '手机登录'}}

{{codeText}}
切换微信登录/注册
暂不绑定
添加官方客服微信
CRMEB公众号二维码

联系客服 领取源码+接口文档🎁