|
秒杀解决方案
秒杀
高并发
高可用
高并发:
- 分布式服务、负载均衡、集群
- 保证单个服务的QPS足够高
- 必须尽可能减少单个业务执行时间
订单业务:
- 业务复杂,执行链路较长
- 跨越服务较多
- 写和读操作频繁
执行效率低,并发差
解决思路:减少业务执行时间
- 读操作:加缓存
- 写操作:变同步写为异步写
整个下单业务都变成异步写。
用户请求到达 ---> 先预减库存 ---> 发送一条MQ消息 ---> 返回用户结果
MQ的作用:流量削峰
订单业务,监听MQ,执行下单操作。
核心的预减库存:利用Redis存储库存,在Redis中完成减库存操作
redis如何保证减库存的线程安全?
- 乐观锁方案:Redis事务,watch num;
- Redis的Lua脚本:原子性
前端问题:
- 页面的静态化:动静结合(部分动态数据,依然异步加载)
- 客户端缓存:304,页面缓存在客户端
- Nginx解析缓存:
- 土豪(RMB玩家):CDN服务,html、js、css、image
|
|