概述

大厂的qps有多少?

瓜子qps=2000-
国美 美团qps=5000+
JD/淘系(垃圾请求每天10几T) /腾讯游戏 无上限
淘宝大秒系统设计

其他的高并发场景
  • 秒杀、
  • 机器考试交卷

硬件配置

一个应对百万并发的秒杀系统需要什么硬件配置?

Redis

混合存储:内存占用超90%会将冷数据逐出存至硬盘

单机内存qps12万,
单机硬盘冷数据 冷热随机访问1.5万,20%热5.4万,1%高热11.4万

阿里云集群双副本:
  • 总内存: 64G或128G
  • 8*2 8分片的主从又副本
  • 吞吐量:qps=80万 每秒创建连接数=5万 最大连接数8万 带宽=384M/s

4216G qps=40万
redis单次操作理论RT<5ms
ehcache单次操作RT<0.5ms

RDS

8核32G
最大连接数:4千 IOPS:8K
QPS:8万
TPS: 内存命中时4K, 磁盘IO时450

ECS

以4核16G机器为例:
单机Nginx的最大QPS=5-10万并发
单机tomcat最大QPS=50K (内部无业务代码实现) ,真实场景下单tomcat的并发数不超过200
如果接口RT=20ms, 单机tomcatQPS=200*(1000/20) = 1万qps
1Nginx+8Tomcat=12万Qps
10万的qps需要2Nginx+8Tomcat

软件系统

前端

前后端分离
静态缓存和部分缓存

网络

  • 单独域名 单独nginx部署如 seckill.qq.com
  • CDN 缓存静态资源/少量一致性要求低的动态缓存 ( 与服务端数据一致性问题)
    • 10分钟更新一次的 如 搜索结果页 列表页
    • job十分钟更新一次 (大型项目几百-几万个job,job使用非常频繁)
  • WAF流量清洗

openresty软防火墙 (nginx+lua+redis )

lua是胶水语言,可以和任何语言粘合使用。
WAF软防火墙 流量清洗
验证码验证 单点登录token验证
整合缓存系统 输出动态页面/JSON结果

nginx单机(8核):Worker数量*每Worker连接数(65536) = 15万并发 真实场景单机Nginx5万qps

服务端

分布式事务 数据一致性
缓存
服务管理与监控
服务高可用

架构与设计

秒杀系统的核心思想

  • 过滤请求
    • 分层过滤
      • 前端过滤无效点击
      • oprenresty过滤redis黑名单、单ip请求频繁的、无token的用户和评定为高风险的请求
    • 分流 将一部分请求导流到其他地方(如静态页面显示秒杀失败)
    • 限流
    • 风控防刷
  • 多级缓存
    • cdn缓存
    • 分布式redis缓存
    • 本地内存/硬盘缓存
  • 削峰填谷
    • 异步
    • 令牌桶

多级缓存架构

  • 流量接入缓存层
    • HTTPDNS
    • Waf
    • 全网CDN
    • 硬防火墙
    • 完成流量清洗、分发
  • 应用接入缓存层
    • Nginx静态文件缓存
    • Nginx动态数据缓存
    • Lua-resty-lrucache
    • URL定向缓存请求转发
    • Kafka异步日志分析
    • 单点登录系统
  • 应用缓存层
    • Redis Cluster集群
  • Kafka 集群
    • Zookeeper 集群
  • JVM EHcache
  • 应用业务层
    • SpringCloud
    • Flink
    • Spark
  • 数据持久层
    • Mysql 集群
    • MyCat

点我 -> 查看有赞TMC透明缓存架构

参考资料

马士兵亿级流量多级缓存架构

  • 1-5 流量接入层
  • 6:CAP/日志/监控 -> 4.md