怎样评估系统支持的TPS是多少

文章介绍了TPS(每秒事务处理量)和QPS(每秒查询率)的区别,并提供了通过分析Nginxaccess.log使用GoAccess和httplogviewer工具确定系统TPS的方法。此外,还讨论了提高TPS的策略,包括数据库优化、读写分离、多线程和缓存利用等。
摘要由CSDN通过智能技术生成

前言

什么是TPS?每秒事务处理量(Transaction Per Second),它是衡量系统处理能力的重要指标。简单的说就是,用户向服务器发送一个请求然后收到服务器的响应结果,这算是一个事物处理。如果一秒内能处理N个这样的事物,那TPS=N。与TPS相对应的,我们经常提到的QPS,那么QPS与TPS有什么区别?

什么是QPS?每秒查询率(Queries Per Second),是一台服务器每秒能响应的查询次数。注意一点,QPS重点在于查询效率,不包含增删改,所以不建议它来作为衡量系统处理能力的指标。

TPS和QPS有什么区别

  1. 如果对应一个单一的查询接口,QPS=TPS
  2. 通常情况下,在页面上点击一个按钮,可能触发多次服务器请求,那么点击按钮后最后得到响应结果,那么这算一个TPS,这一个TPS中又包含多个QPS

例如一个下单场景,点击下单按钮,会触发下面请求:

  1. 校验订单信息(其中有一个QPS)
  2. 创建订单(其中有一个QPS)
  3. 唤起支付(其中有一个QPS) 那么完成整个下单操作就是一个TPS,TPS倾向于一次业务操作。

所以对于后端来说,怎么确定系统的TPS成为关键。

怎样确定TPS

第一种情况,系统已经在生产环境运行一段时间,可以通过访问日志确定,例如Nginx的access.log日志,可以结合goaccess与http log viewer使用(下面会介绍这两个工具怎么使用),goaccess和http log view都可以获取到精确到分的HIT(点击量),获取到精确到分的最高HIT,例如最高HIT为600,则每秒600/60,TPS则要做到这个值得2-5倍,所以TPS最少要大于20。

第二种情况,新项目还没上线,需要评估出大概能支持的TPS,可以借鉴二八定律:社会上20%的人占有80%的社会财富,用在评估TPS时,80%的用户在20%的时间访问,例如,系统用户日活在1万,一天去掉凌晨0点到6点访问量低的6个小时,剩下按一天按18小时计算,TPS=100080% /(18606020%)。

goaccess使用

GoAccess 是一款开源(MIT许可证)的且具有交互视图界面的实时 Web 日志分析工具,通过你的 Web 浏览器或者 *nix 系统下的终端程序即可访问。
官网地址:https://goaccess.io/
下载安装(以centos为例):

yum install goaccess

下面以Nginx日志为例,做一下日志分析,可以创建一个goaccess文件,专门用于分析日志

cd /usr/local
mkdir goaccess

从服务器上获取Nginx日志access.log,放在goaccess目录下,接下来通过命令执行分析

goaccess -qo report.html --log-format=COMBINED  access.log

-q:忽略请求的查询字符串。即: www.google.com/page.htm?query => www.google.com/page.htm,去掉查询字符串将极大降低内存消耗,特别对带时间戳的请求。
-o:将给定文件重定向到标准输出,通过后缀名决定输出格式
–log-format:用于指定日志字符串格式,默认的 Nginx 日志需要指定 COMBINED

生成report.html,下载到本地,用浏览器打开,非常直观的显示各项数据,我们要评估TPS,主要关注下面这一项:独立访客
按日期
此面板按照日期展示了访问次数,独立访客数,以及累计消耗的带宽等指标。具有相同IP,相同访问时间,相同的 UserAgent 的 HTTP 请求将会被识别为独立访客。默认情况下包含了网络爬虫。您也可以选择使用 --date-spec=hr 参数将按照日期分析修改为按照小时,例如:05/Jun/2016:16 。这对于希望在小时级别去跟踪每日流量非常有帮助。

# 生成小时级别的命令
goaccess -qo report.html --log-format=COMBINED --date-spec=hr  access.log
# 生成分钟级别的命令
goaccess -qo report.html --log-format=COMBINED --date-spec=min  access.log

按小时展示了按小时统计,很明显看出在哪个小时内访问量达到峰值

按分钟
展示了按分钟统计,可以看出某一天哪一分钟达到峰值

拿个这峰值我们就可以评估TPS了

我们也可以按时间切割日志

  1. 设置的日期到文件结束
sed -n '/01\/Jan\/2023/,$ p' access.log | goaccess -a -o report.html
  1. 可以按时间段分析
sed -n '/01\/Jan\/2023/,/31\/Jan\/2023/ p' access.log | goaccess -a -qo report.html

http log viewer使用

下载地址:https://www.apacheviewer.com/download/
下载成功后,执行exe文件,按提示安转即可

  1. 导入access.log
    在这里插入图片描述
  2. 导入成功后
    在这里插入图片描述
  3. 导入时也可按时段导入
    在这里插入图片描述
  4. 按时间统计访问量
    在这里插入图片描述
  5. 可以按小时或按分钟生成报告
    在这里插入图片描述
  6. 报告生成
    在这里插入图片描述
    在这里插入图片描述
    可以大概看出每小时或每分钟的最高访问量多少,从而评估TPS

怎样提高TPS

  1. 数据库连接池是否配置合理
  2. 优化SQL,有条件的话配置主从库,读写分离
  3. 优化业务逻辑
  4. 使用多线程
  5. 使用缓存
  6. 最后如果TPS还上不去的话,可考虑提高硬件资源
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值