秒杀系统(1)-秒杀系统架构设计的关键点

正常电子商务流程

(1)查询商品;(2)创建订单;(3)扣减库存;(4)更新订单;(5)付款;(6)卖家发货

秒杀的特性

(1)低廉价格;(2)大幅推广;(3)瞬时售空;(4)一般是定时上架;(5)时间短、瞬时并发量高

秒杀需解决两个问题

从秒杀的特性(瞬时售空–>页面会在规定时间段猛增访问量和下单数量)可以看出,秒杀的实现需要解决两个问题:并发读,并发写
并发读的核心优化理念是尽量减少用户到服务端来“读”数据,或者让他们读更少的数据;并发写的处理原则也是一样,它要求我们在数据库层面独立出来一个库,做特殊处理。
而从一个架构师的角度来看,要想打造并维护一个超大流量并发读写、高性能、高可用的系统,在整个用户请求路径上从浏览器到服务器我们要遵循几个原则:

  1. 保证用户请求的数据要少
  2. 请求数要尽量少
  3. 路径要尽量短
  4. 依赖要尽量少
  5. 不要有单点
架构原则:“4要1不要”

数据要尽量少,从而减少cpu的消耗
数据要尽量少,一是指用户请求的数据能少就少。请求的数据包括上传给系统的数据和系统返回给用户的数据(网页)。二是要求系统依赖的数据能少就是,包括系统完成某些业务逻辑需要读取和保存的数据,这些数据一般是和后台服务以及数据库打交道的。
不管是用户请求的数据,还是系统依赖的数据,在网络传输过程中都是需要做压缩和字符编码的,有些还涉及到数据的序列化和反序列,这些都会拖慢CPU的性能。

请求数要尽量少,减少加载时间
请求数要尽量少主要指用户请求的页面返回后,浏览器渲染这个页面还有包含其他的额外请,比如CSS/JavaScript、图片等都可以定位为“额外请求”,这些额外请求应该尽量少。

路径要尽量短,减少节点消耗
所谓“路径”,就是用户发出请求到返回数据这个过程中,需求经过的中间的节点数。每经过一个节点,一般都是会产生一个新的socket连接,而每增加一个连接都会增加新的不确定性。所以缩短请求路径不仅可以增加可用性,同样可以有效提升性能(减少中间节点可以减少数据的序列化和反序列化),并减少延时(减少网络传输耗时)。

依赖要尽量少,减少加载时间指的是要完成一次用户请求必须依赖的系统或者服务,这里的依赖指的强依赖。比如秒杀页面就必须强依赖商品信息、用户信息,而其他优惠券、成交列表就不是必须要的了。

不要有单点,要有备份
系统中的单点可以说是系统架构上的一个大忌,因为单点意味着没有备份,风险不可控,我们设计分布式系统最重要的原则就是“消除单点”。

最后

架构是一种平衡的艺术,而最好的架构一旦脱离了它所适应的场景,一切都将是空谈。


节选自《如何设计一个秒杀系统》

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值