qps20w背后的设计:秒杀\抢券项目——深度分析与总结

之前参与一个峰值qps达到20w多的电商促销项目,现在做一些总结与思考,可能存在纰漏,欢迎交流探讨。本人长期专注于服务层,文中对前端以及运维的理解可能不够深入

欢迎各位有理有据的交流探讨。

架构隔离

在开始具体细节时,先说说架构隔离。

对于这个促销系统的部署完全与主站的其他系统隔离开,避免大流量冲击下对其他系统造成影响,甚至雪崩。

  • 域名隔离 使用独立的域名对请求做隔离
  • 应用隔离 使用独立的集群机器部署前端应用与服务端应用
  • 数据隔离 使用独立的Redis集群、mysql集群处理数据

前端流控

  • 基本校验 一些简单的资格校验,如登陆等等
  • 页面静态数据缓存 浏览器缓存静态数据、CDN缓存静态数据。
  • 业务流程削峰 通过使用验证码或者问答,拉车秒杀时间,放缓瞬时并发。

反向代理缓存

在反向代理(Varnish,Nginx)中缓存静态页面,对页面请求直接返回。
这里写图片描述

服务端设计

服务端是本文重点,也是我关注的地方。

实现无锁设计(数据库的部分根据业务场景用乐观锁):

图片较大,我希望用一张图描述我想说的,请点击右键单独放大查看。
这里写图片描述

扩容

没有机会做,但是思考了下这种方案可取。还是用一张图
这里写图片描述

分库分表

待续

缓存击穿问题解决

待续

集群性能常用计算公式

qps(query per second)=并发数/响应时间(通常要求0.1s左右)

tps(transaction per second)=事务数/响应时间(事务 比如接口指有个clientSend
并且clientReceive的过程)

  • 如何 根据服务日调用次数 计算每天峰值的qps?

    ( 日调用次数 * 80% ) / ( 24*3600 * 20% ) = 峰值时间每秒请求数(QPS)  
    
  • 单节点qps

    最大连接数/平均响应时间()=qps
    

    通常最大线程数<=最大连接数
    平均响应时间通常要求100ms左右

  • 根据峰值qps与单节点qps计算节点个数?

    峰值接口需要的QPS / 单节点的QPS = 需要的节点实例
    
  • 示例:
    每天300w 调用量的接口,这个接口需要满足到多少QPS?

      ( 3000000 * 0.8 ) / (86400 * 0.2 ) = 139 (QPS) 
    

    单机QPS是58,需要结果节点来支持?**

    139 / 58 = 3
    
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值