架构 秒杀系统优化思路


写在前面

秒杀系统是经常需要优化的系统,对架构设计要求很高,面试过程中也经常问到,今天就来系统学习一下如何优化秒杀系统

秒杀场景

  • 每个人都读自己的数据:im系统,如qq,微博
  • 一个人读多个人的数据:微博关注人的动态、微信朋友圈动态、抖音关注的博主动态
  • 多个人读取一个的数据:12306买票、小米手机官网抢手机

优化方向

  • 将请求尽量拦截在上游,越上游越好。
  • 缓存

常见系统架构

客户端(浏览器、app)-》网关层-》服务层-》数据库层

因此优化主要从这4个层面考虑

各层次优化

客户端

  • 产品层面,用户点击“查询”或者“购票”后,按钮置灰,禁止用户重复提交请求;
  • 代码层面,限制用户在x秒之内只能提交一次请求;

这种办法只能拦住普通用户(但99%的用户是普通用户)对于群内的高端程序员是拦不住的

网关层

  • 限流。对同一个用户一定时间内只能访问一次。
  • 缓存。对相同的请求直接返回缓存的内容。尤其是秒杀系统,对数据准确性要求并不严格。

服务层

  • 消息队列。将请求放入指定大小的队列中,开启指定数量线程处理请求,对于其他请求返回失败或者等待。
  • 异步。异步处理请求,对客户端返回成功,页面显示处理中。

数据库层

  • 分库分表
  • 主从:一主多从

总结

本文主要从请求经过的层次来优化秒杀系统,其中每个层次优化方法还有多种,我的另外一篇文章面试:如何设计高并发系统从服务部署、后端架构方面介绍了一些优化

参考

[1]架构 秒杀系统优化思路

[2]面试:如何设计高并发系统


文章作者: Alex
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Alex !
  目录