您的位置:首页 > 其它

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

2016-08-16 16:38 369 查看
之前参与一个峰值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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐