设计秒杀系统 | 青训营笔记

91 阅读3分钟

设计秒杀系统

这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天

如何评估一个系统

在系统设计和开发过程中,我们比较容易关注系统的功能维度,例如有没有实现预期功能,输入参数和输出参数是否匹配等等,这是比较容易测试和衡量的。

但是我们不能就此止步,因为满足功能是系统的基本要求,还需要关注系统的非功能维度,例如系统性能是否优秀,代码可扩展性如何,出现异常是否可以自动降级等等,这些指标决定了系统能否提供高质量的服务。

通常主要是通过来评估一个系统的架构:

ATAM(Architecture tradeoff Analysis Method)是卡梅隆大学软件工程协会提出来的一套架构权衡分析方法。

ATAM的评估目的是根据系统的质量属性和商业需求评估设计决策的结果

ATAM希望揭示出架构满足特定质量目标的情况,使我们更清楚的认识到质量目标之间的联系,即如何权衡多个质量目标

如何做好系统设计

  1. 场景分析

    什么系统,需要哪些功能,多大的并发量

  2. 存储设计

    数据如何组织,sql存储,nosql存储

  3. 服务设计

    业务功能实现和逻辑整合

  4. 可扩展性

    解决设计缺陷,提高鲁棒性、扩展性

秒杀系统设计

系统特点

  • 高性能:秒杀涉及大量的并发读和并发写,因此支持高并发访问这点非常关键
  • 一致性:秒杀商品减库存的实现方式同样关键,有限数量的商品在同一时刻被很多倍的请求同时来减库存,在大并发更新的过程中都要保证数据的准确性。
  • 高可用:秒杀时会在一瞬间涌入大量的流量,为了避免系统宕机,保证高可用,需要做好流量限制

设计思路

将请求尽量拦截在系统上游

  • 限流:屏蔽掉无用的流量,允许少部分流量走后端。假设现在库存为 10,有 1000 个购买请求,最终只有 10 个可以成功,99% 的请求都是无效请求
  • 削峰:秒杀请求在时间上高度集中于某一个时间点,瞬时流量容易压垮系统,因此需要对流量进行削峰处理,缓冲瞬时流量,尽量让服务器对资源进行平缓处理
  • 异步:将同步请求转换为异步请求,来提高并发量,本质也是削峰处理
  • 利用缓存:创建订单时,每次都需要先查询判断库存,只有少部分成功的请求才会创建订单,因此可以将商品信息放在缓存中,减少数据库查询
  • 负载均衡:利用 Nginx 等使用多个服务器并发处理请求,减少单个服务器压力