一、TPS 是什么
TPS (Transactions Per Second)
即每秒事务数。它是衡量一个系统(尤其是数据库和处理交易的系统)在单位时间内(每秒)处理事务能力的核心性能指标。
关键点:
“事务”是核心:这里的“事务”不是一次简单的请求或点击,而是一个逻辑上的工作单元。一个事务通常包含一个或多个操作,这些操作必须全部成功或全部失败,满足 ACID 特性(原子性、一致性、隔离性、持久性)。
成功才算数:只有被成功提交(Commit)的事务才会被计入 TPS。失败回滚(Rollback)的事务不计入。
二、TPS 与相关概念的辨析(非常重要)
很多人容易将 TPS 与 QPS、并发数混淆。理解它们的区别是正确评估系统性能的关键。
指标 全称 含义 关注点 关系
TPS Transactions Per Second 每秒处理的事务数 数据库、交易系统处理业务逻辑的能力 1个事务 ≈ 1个或多个QPS
QPS Queries Per Second 每秒请求/查询数 Web服务器、缓存处理请求的吞吐量 1个事务可能包含N个QPS
并发数 Concurrent Users 系统同时处理的请求数量 系统的负载压力 并发数 ≈ TPS * 平均响应时间(RT)
举例说明:
假设一个用户完成一次“支付”事务,这个事务包含以下步骤:
请求支付页面(1个QPS)
创建订单(1个QPS,对应1个数据库写事务)
扣减库存(1个QPS,对应1个数据库写事务)
支付扣款(1个QPS,对应1个数据库写事务)
对于用户和Web服务器来说,这次支付产生了 4个QPS。
但对于数据库来说,这次支付可能包含了 3个事务(创建订单、扣减库存、支付扣款)。
因此,这个业务的整体 TPS ≈ 3,而 QPS ≈ 4。
结论:TPS 通常小于或等于 QPS。 在简单查询场景下(如根据ID查用户信息),1个QPS可能只对应0个事务(因为是读操作,不开启事务)或1个简单事务。在复杂业务场景下,1个业务请求(QPS)可能引发多个数据库事务(TPS)。
三、如何测量和计算 TPS?
通常使用压测工具来获取 TPS。
压测工具:如 JMeter, LoadRunner, wrk, sysbench (用于数据库基准测试) 等。
计算方法:
最基本公式:TPS = (总成功事务数) / (总压测时间)
在压测工具中,通常会直接报告这个值。
与响应时间(RT)的关系 - Little’s Law(利特尔法则)
这是一个非常重要的排队论公式,用于理解系统性能:
并发数 = TPS * 平均响应时间(RT)
推导:TPS = 并发数 / 平均响应时间(RT)
举例:假设一个系统平均响应时间为 50ms (0.05秒),同时有 1000 个并发用户请求。
TPS = 1000 / 0.05 = 20,000
这意味着该系统每秒能处理 2 万笔事务。(这是一个理论值,实际中会受限于CPU、IO等资源)
四、影响 TPS 的关键因素
提升 TPS 意味着要消除系统的瓶颈。主要瓶颈通常来自以下几个方面:
数据库(最常见的瓶颈)
磁盘 I/O:事务需要写日志(Redo Log)、刷脏页。使用更快的 SSD 硬盘能极大提升 TPS。
锁竞争:高并发下,事务对数据的互斥访问会导致锁等待(Lock Wait), dramatically 降低 TPS。优化方案包括:使用乐观锁、减少事务粒度、避免长事务、合理使用索引减少锁范围。
CPU:复杂的 SQL 查询、连接操作、排序分组等会消耗大量 CPU 资源。
数据库配置:如连接数 (max_connections)、日志刷盘策略 (innodb_flush_log_at_trx_commit) 等。
应用代码
低效的代码和算法:循环嵌套、不必要的序列化/反序列化。
不合理的事务范围:将不必要的操作放在事务中,增加了事务持有锁的时间。
网络 I/O:频繁的远程调用(RPC)、调用慢第三方服务。
基础设施
CPU:应用服务器的计算能力。
网络带宽与延迟:数据中心之间的网络延迟会直接影响响应时间,从而影响 TPS。
五、如何优化和提升 TPS?
数据库优化
架构层面:读写分离、分库分表,将负载分散到多个数据库节点。
SQL 优化:建立合理索引、避免 SELECT *、优化复杂查询。
事务优化:尽量使用短事务、尽快提交事务、将耗时的操作(如RPC调用)移出事务。
连接池:使用数据库连接池,避免频繁创建和销毁连接的开销。
应用层优化
引入缓存:使用 Redis 等缓存热点数据,减少对数据库的读事务。
异步化:将非核心操作(如发短信、记录日志)通过消息队列异步处理,缩短主事务链路。
代码优化:优化业务逻辑,避免不必要的计算和循环。
基础设施优化
硬件升级:CPU、内存、更快的 SSD 硬盘。
监控与诊断:使用 APM 工具(如 Apache SkyWalking, Pinpoint)定位性能瓶颈,找到最耗时的操作。
总结
TPS 是一个直接反映系统业务处理能力的黄金指标。它不同于衡量吞吐量的 QPS,而是更专注于“事务”这个完整的业务单元。
评估系统性能时,必须结合 TPS、响应时间(RT) 和错误率一起看。单纯追求高 TPS 而牺牲了稳定性(高错误率)或用户体验(高延迟)是不可取的。
优化 TPS 是一个系统工程,需要从数据库、应用代码、架构设计等多个层面进行分析和优化,其核心在于减少 I/O 等待、降低锁竞争、缩短响应路径。
2514

被折叠的 条评论
为什么被折叠?



