简介

这是系统设计中两个最核心且容易混淆的性能指标。简单来说:
• RPS 是 “每秒请求数”,是从客户端或负载均衡器的视角看,服务器每秒接收到的请求数量
• QPS 是 “每秒查询数”,通常是从数据库或特定服务的视角看,其每秒执行的查询操作数量

1. 详细说明

1.1 RPS (Requests Per Second) - 每秒请求数

衡量服务器、服务或系统每秒接收到的外部请求(Request)的总数。一个来自用户浏览器、手机App或其他服务的HTTP调用,就算一个“请求”。 一个请求可能非常复杂,它可能触发了后端大量的工作,比如:

  • 调用多个微服务
  • 执行多次数据库查询
  • 进行复杂的计算
  • 访问缓存

用户访问CSDN首页的这个动作,向服务器发送了一个HTTP请求,这就算 1 RPS。但这个请求背后,服务器可能去数据库查询了10条用户关注的热帖、5条广告、3条消息通知,总共产生了 18次数据库查询。

1.2 QPS (Queries Per Second) - 每秒查询数

衡量数据库(如MySQL、Redis)或某个特定服务每秒执行的查询(Query)操作数量。关注的是对数据存储层的访问频率,通常指一次简单的数据操作,比如:

SELECT * FROM users WHERE id = 1;1次查询)
UPDATE posts SET likes = likes + 1 WHERE id = 123;1次查询)
Redis GET user:123:profile (1次查询)

如上所述,处理那1个用户访问首页的请求(1 RPS),数据库需要执行18次SELECT操作,那么数据库的负载就是 18 QPS。

2. 总结

可以把二者看作一种 “因果关系”:1个来自外部的 RPS,通常会在系统内部产生 N次 QPS(以及其他操作)。

# 用一个简单的公式来理解
总 QPS ≈ RPS ×(每个请求平均产生的查询次数)

补充

最近在一篇博客中看到这样一句话:

“写入吞吐量为 100K RPS,数据库仅支持 10K RPS”

这里的表述其实不够精确,它的意思是:

  1. 应用服务器(Application Server)每秒能接收和处理 10万个写入请求(100K RPS)。
  2. 但数据库(如MySQL)每秒最多只能安全地执行 1万次写入查询(10K QPS)。这里的“RPS”被博客作者用来指代数据库的写入操作速率,严格来说用“QPS”或“WPS(Writes Per Second)”更准确。

这就产生了一个矛盾: 应用层每秒接100k个请求,但数据库每秒只能处理1万个。如果不做任何处理,数据库会瞬间被压垮。如何解决这种差距?系统设计的一个重要目标,就是处理这种不匹配。下面是一些常用策略:

  1. 写缓冲(Write Buffering) & 异步处理
    使用消息队列(如Kafka, RocketMQ)。应用服务器收到请求(100K RPS)后,立即返回“成功”给用户,同时将写操作任务扔进消息队列。后台的Worker服务再以数据库能承受的速度(10K QPS)从队列里取出任务,慢慢写入数据库,也就是常说的异步处理。

  2. 批量写(Batching)
    不要来一个请求就写一次数据库。可以将多个请求合并成一个批量操作。100个写入请求可以合并成1个INSERT … VALUES (…), (…), …语句。这能将100 QPS降低到1 QPS,极大减轻数据库压力。

  3. 缓存(Caching)
    对于读多写少的场景,使用缓存(如Redis)来抵挡绝大部分的读请(QPS),让请求不直接到达数据库。

  4. 分库分表
    如果一个数据库实例只能处理10K QPS,那就用10个数据库实例,每个实例处理10 K QPS。通过将数据分散到不同的数据库节点上,来水平扩展整体的写入能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/920155.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/920155.shtml
英文地址,请注明出处:http://en.pswp.cn/news/920155.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何将用户反馈转化为可执行需求

用户反馈是企业优化产品、改进服务的重要依据。将用户反馈转化为可执行需求的核心在于通过系统化的流程对反馈进行收集、分析和分类,并结合企业的战略目标与技术能力,制定出具体的执行方案。这一过程不仅要求企业深入理解用户需求,还需要跨部…

ry-vue docker部署

目录 整体架构概览 创建 Docker 自定义网络 Redis 部署(缓存服务) redis.conf修改 启动 Redis 容器 测试 启动 MySQL 容器 允许 root 用户远程访问(%) 初始化数据库(可选) RuoYi-Admin 后端服务部…

Redis之Keys命令和Scan命令

序言 网上看到的面试题:Redis有1亿个key,其中10w个key是以某个固定的前缀开头,如何将它们全部找出来?一般有两种命令可以实现: Keys命令Scan命令 下面具体分析一下两种命令 Keys命令 Keys pattern如下图所示&…

【小沐学GIS】基于Godot绘制三维数字地球Earth(Godot)

🍺三维数字地球GIS系列相关文章(C)如下🍺:1【小沐学GIS】基于C绘制三维数字地球Earth(OpenGL、glfw、glut)第一期2【小沐学GIS】基于C绘制三维数字地球Earth(OpenGL、glfw、glut&…

day62 Floyd 算法 A * 算法

Floyd 算法本题是经典的多源最短路问题.Floyd 算法对边的权值正负没有要求,都可以处理。Floyd算法核心思想是动态规划。例如我们再求节点1 到 节点9 的最短距离,用二维数组来表示即:grid[1][9],如果最短距离是10 ,那就…

【软考论文】论可观测性架构技术的应用

🎁 考高级架构师的小伙伴注意了!📢 软考架构论文示例 2025年11月软考架构论文预测👍 一、历年论文题目 无!!! 二、考情分析 “可观测性技术”这一论题,目前在高级架构师与高级系统分…

软件测试:测试分类(一)

常用测试分类1.功能测试(人对功能的确定,保证某个功能可以正常进行)如验证你输入正确的手机号码和密码是否登录成功。手机号码不存在是否有提示,密码不正确是否有提示等2.自动化测试(如jmeter,属于黑盒测试…

BigFoot (Method Raid Tools)[MRT] (Event Alert Mod)[EAM]

检查法术技能ID,需要EAM命令,所以要先安装EAM BigFoot EventAlertMod lua-CSDN博客 /eam lookup 冰封之韧 同时我们发现一个糟糕的问题,为什么会有这么多ID呢,默认第一个 还有一种法子就是让别人开了技能告诉你ID,最…

【Scrapy-Redis】分布式爬虫实战(非常详细)

一、概要 1.分布式爬虫概念 分布式爬虫是一种利用多台机器协同工作的网络爬虫系统,通过任务分解、并行处理和资源共享,高效抓取并处理海量网页数据。其核心在于将爬取任务分配到不同节点,避免单点性能瓶颈,同时支持动态扩展和容错…

基于51单片机智能化交通红绿灯堵车流量红外设计

1 系统功能介绍 本设计题目为 基于51单片机智能化交通红绿灯堵车流量红外设计,主要用于十字路口交通信号智能控制,通过红外避障检测车流量,自动调节红绿灯时间,缓解拥堵。该系统由单片机、LED灯、红外避障传感器、LCD1602液晶显示…

VsCode 上的Opencv(C++)环境配置(Linux)

1.下载Opencv1.新建文件demo_cpp,在demo_cpp中新建third_parties文件2.OPENCV官网下载OpenCV-4.12.03.将下载好的opencv-4.12.0.zip压缩包在third_parties中解压,//以下均无特殊说明,均在vscode里的TERMINAL中输入 sudo apt-get install unzip//用于解压.zip文件 cd third_part…

sql xml模板

<?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace"com.example.mapper.UserMapper&quo…

docker在自定义网络中安装ElasticSearch和Kibana

创建自定义网络 创建一个名为 es-net 的桥接网络。这将作为 Elasticsearch 和 Kibana 的私有通信通道。 # 创建网络 docker network create es-net # 查看网络是否创建成功 docker network ls启动 Elasticsearch 容器 安装命令 docker run -d \--name elasticsearch \--net…

基于51单片机射频RFID停车刷卡计时收费系统设计

1 系统功能介绍 本设计题目为 基于51单片机射频RFID停车刷卡计时收费系统设计&#xff0c;旨在实现停车场车辆的刷卡计时和收费管理。系统通过单片机控制&#xff0c;结合 RFID 射频识别技术、LCD1602 显示以及蜂鸣器报警&#xff0c;实现停车时间的智能计时、累加及超时提醒功…

Netty源码—性能优化和设计模式

1.Netty的两大性能优化工具 (1)FastThreadLocal FastThreadLocal的作用与ThreadLocal相当&#xff0c;但比ThreadLocal更快。ThreadLocal的作用是多线程访问同一变量时能够通过线程本地化的方式避免多线程竞争、实现线程隔离。 Netty的FastThreadLocal重新实现了JDK的ThreadLoc…

Linux网络设备分析

🐧 Linux 网络设备驱动深入分析 本文将详细分析 Linux 网络设备驱动的工作原理、实现机制和代码框架,并通过一个虚拟网卡实例展示其实现,最后介绍常用的工具和调试手段。 1️⃣ Linux 网络设备驱动概述 Linux 网络设备驱动是内核中负责管理网络硬件(如以太网卡、Wi-Fi …

计算机视觉:从 “看见” 到 “理解”,解锁机器感知世界的密码

早上醒来&#xff0c;你拿起手机&#xff0c;人脸识别瞬间解锁屏幕&#xff1b;开车上班时&#xff0c;车载系统通过摄像头实时识别车道线&#xff0c;提醒你不要偏离&#xff1b;去医院做检查&#xff0c;医生用 AI 辅助的医学影像系统快速定位肺部微小结节&#xff1b;逛超市…

深入了解linux系统—— 线程封装

C11线程库 C11也提供了对应的线程库&#xff0c;在头文件<thread>中&#xff1b;C11将其封装成thread类&#xff0c;通过类实例化出对象&#xff0c;调用类内成员方法进行线程控制。 #include <iostream> #include <thread> #include <unistd.h> using…

安全防御-SCDN如何保护网站安全

随着互联网的快速发展&#xff0c;越来越多的企业依赖在线服务来运行其核心业务。与此同时&#xff0c;网络攻击的频率和复杂性也在不断增加&#xff0c;恶意流量成为许多企业头疼的问题。为了有效地提高网站的安全性和稳定性&#xff0c;德迅云安全加速SCDN被许多用户关注。今…

运筹优化(OR)-在机器学习(ML)浪潮中何去何从?

在如今机器学习的浪潮中&#xff0c;机器学习相关的岗位日益增多&#xff0c;而运筹优化的岗位却相对较少。这是今年我秋招过程中看到的现象。企业越来越希望候选人不仅能建模求解&#xff0c;还能理解如何用数据驱动优化。需要我们有一个完整的技术栈。那么我们就来看看OR与ML…