面试:秒杀系统

面试:秒杀系统

 

问题场景

在进行系统设计的过程中,首先问题场景的特点。秒杀系统是十分典型的高并发场景,其特点也十分显著:高并发、低库存、高瞬时流量。再者分析整个系统的输入输出,即大概的 API 网关拥有的功能:查(用户查询商品信息)、改(用户购买商品)。将系统的特点和功能分析完毕后,就可以根据这些信息进行系统设计。一个常规的秒杀系统从前到后,依次有:

 前端页面 -> 代理服务 -> 后端服务 -> 数据库

根据这个流程,一般优化设计思路:将 请求拦截在系统上游,降低下游压力。在一个并发量大,实际需求小的系统中,应当尽量在前端拦截无效流量,降低下游服务器和数据库的压力,不然很可能造成数据库读写锁冲突,甚至导致死锁,最终请求超时。

整体优化手段包含:缓存限流削峰(MQ)异步处理降级熔断SET化快速扩容

 

前端页面

  • 资源静态化:将活动页面上的所有可以静态的元素全部静态化,尽量减少动态元素;通过CDN缓存静态资源,来抗峰值。
  • 禁止重复提交:用户提交之后按钮置灰,禁止重复提交
  • URL动态化:防止恶意抓取

 

代理服务

利用负载均衡(例如 Nginx 等)使用多个服务器并发处理请求,减小服务器压力。

 

后端服务

  • 用户限流:在某一时间段内只允许用户提交一次请求,比如可以采取 IP 限流
  • 业务拆分
  • 利用 MQ 削峰
  • 利用缓存应对大量查询请求
  • 利用缓存应对写请求(注意数据一致性、持久性问题):缓存也是可以应对写请求的,可把数据库中的库存数据转移到 Redis 缓存中,所有减库存操作都在 Redis 中进行,然后再通过后台进程把Redis中的用户秒杀请求同步到数据库中。

 

数据库

  • 多数据库:防止数据热点问题
  • 优化 SQL 防止死锁

 

原文来源:https://hadyang.github.io/interview/docs/architecture/design/seckill/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值