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

    xiaoxiao2026-08-07  13

    之前参与一个峰值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
    转载请注明原文地址: https://ju.6miu.com/read-1310955.html
    最新回复(0)