关于TP90 TP99 等常用于评估软件系统的处理性能的指标概念
工作中还是蛮少直接接触到评估系统性能的,但是不妨碍有兴趣了解。认为这是常识,只是个人才疏学浅不了解其定义。
TP=Top Percentile,Top百分数,是一个统计学里的术语,与平均数、中位数都是一类,为等水位线(waterline)。
TP50、TP90和TP99等指标常用于系统性能监控场景,指高于50%、90%、99%等百分线的情况。
上面都是学术上的定义,具体到软件系统评估的实践中怎么理解呢?以TP90为例(借用网络上搜到的资源):
The tp90 is a minimum time under which 90% of requests have been served.
tp90 = top percentile 90
Imagine you have response times:10s,1000s,100s,2s
Calculating TP is very simple:
1. Sort all times in ascending order: [2s, 10s, 100s, 1000s]
2. find latest item in portion you need to calculate.
2.1 For TP50 it will be ceil(4*0.5) = 2 requests. You need 2nd request.
2.2 For TP90 it will be ceil(4*0.9) = 4. You need 4th request.
3. We get time for the item found above. TP50=10s. TP90=1000s
可以认为 TP90的意思是保证90%请求都能被响应的最小耗时。例如上例中TP90=4s,就是如果要保证90%的用户得到有效的时间是4s;同理保证50%的用户得到有效相应的时间是2s。
如果现有需求:每隔5s打印一次最近1分钟内A、B、C三个方法的TP90、TP99的耗时情况。如何实现呢?
分析:
1、如果要计算 TP90、TP95 或者 TP99 等水位线的值,其前提就是需要我们将所有的待计算值保存起来。此需求中打印时刻最近1分钟内调用个方法的耗时时间。
2、用什么数据结构来存储这一系列的值呢?数组?或者列表?实际上,无论选择哪一种数据结构都不能假设其长度无限大,因为内存空间是有限的,而且数据结构也有理论上的最大值,但是要存储的值的个数却可能是无限的。因此,就需要利用有限长度的数据结构存储更多的数值。此例中,选择的数据结构是TreeSet。
3、最后一步就是由低到高顺序排序后计算等水位线的值了。
实现:
1、利用dubbo filter统计各方法调用耗时时间,使用数据结构TreeSet(Java)。
首先看下为什么选用TreeSet,看下TreeSet的结构:

SortedSet通过implements Comparable进行自定义排序:

此案例中耗时时间由小到大排序:


2、计算等WaterLine的值:这个算法就比较简单了,不介绍了直接上图

此文中仅介绍与WaterLine相关的内容,其具体实现再何处体现,后续Dubbo扩展点之一Filter中详述。
关于TP90 TP99 等常用于评估软件系统的处理性能的指标概念的更多相关文章
- scikit-learn 中常用的评估模型
一,scikit-learn中常用的评估模型 1.评估分类模型: 2.评估回归模型: 二.常见模型评估解析: •对于二分类问题,可将样例根据其真实类别和分类器预测类别划分为:(T,F表示预测的 ...
- 利用pl/sql执行计划评估SQL语句的性能简析
一段SQL代码写好以后,可以通过查看SQL的执行计划,初步预测该SQL在运行时的性能好坏,尤其是在发现某个SQL语句的效率较差时,我们可以通过查看执行计划,分析出该SQL代码的问题所在. 那么,作为 ...
- 通过数据库评估存储设备IO性能-Oracle11gIO校准功能介绍
通过数据库评估存储设备IO性能 ---------Oracle11g IO校准功能介绍 前言 I/O子系统是ORACLE数据库的一个重要组成部分,因为I/O操作是贯穿数据库管理全过程,它操作的对象包括 ...
- 磁盘 IO 和网络 IO 该如何评估、监控、性能定位和优化?
生产中经常遇到一些IO延时长导致的系统吞吐量下降.响应时间慢等问题,例如交换机故障.网线老化导致的丢包重传:存储阵列条带宽度不足.缓存不足.QoS限制.RAID级别设置不当等引起的IO延时. 一.评估 ...
- 常用SQL操作(MySQL或PostgreSQL)与相关数据库概念
本文对常用数据库操作及相关基本概念进行总结:MySQL和PostgreSQL对SQL的支持有所不同,大部分SQL操作还是一样的. 选择要用的数据库(MySQL):use database_name; ...
- CentOS评估磁盘I/O性能读写极限测试
用一个fio工具 安装 yum -y install fio 二,FIO用法: 随机读:fio -direct=1 -iodepth 1 -thread -rw=randread -ioengine ...
- 使用mongoperf评估磁盘随机IO性能
用法举例: # 16个io线程 # 随机读写10GB的测试文件 echo "{nThreads:16,fileSizeMB:10000,r:true,w:true}" | mong ...
- 【redis常用的键值操作及性能优化】
服务端 启动redis服务 { // -a:指定密码 -h:指定主机 -p:指定端口 } //让redis 服务中断崩溃 //保存和关闭 //后台备份 //设置登录密码 //redis-benchma ...
- PCB常用低速、高速板材参数性能(2)
随机推荐
- 极简promise雏形
function Promise(fn) { var value = null, callbacks = []; //callbacks为数组,因为可能同时有很多个回调 this.then = fun ...
- 开发 IDEA Plugin 引入探针,基于字节码插桩获取执行SQL
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 片面了! 一月三舟,托尔斯泰说:"多么伟大的作家,也不过就是在书写自己的片 ...
- linux下编译支持opencl的opencv for android
主要的步骤其他人已经写过,请参考这篇:https://www.cnblogs.com/hrlnw/p/4720977.html 操作的细节请参考附件的pdf: https://files.cnblo ...
- 【摘抄】疑问chatterbot
ChatterBot使用哪种机器学习? -------------------------------------------------- - 简而言之,ChatterBot使用了许多不同的机器学 ...
- Cesium入门3 - Cesium目录框架结构
Cesium入门3 - Cesium目录框架结构 Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ app目录 下 ...
- 针对vue中请求数据对象新添加的属性不能响应式的解决方法
1.需要给对象添加属性时,不能采用传统的obj.属性=值,obj[属性]=值 来添加属性,在vue页面时需要这样使用 this.$set(obj,"propertyName",&q ...
- gin中绑定表单数据至自定义结构体
package main import "github.com/gin-gonic/gin" type StructA struct { FieldA string `form:& ...
- RSS生成工具/服务推荐
时至2022,关于碎片化阅读.信息焦虑的讨论仍在继续且似乎并没有形成广泛共识的解决办法.而研究生期间主要研究方向就是推荐系统且未来也大概率从事相关岗位的我,对以算法为中心的信息获取方式可以说是又爱又恨 ...
- WTM多租户改造
首先简单说下多租户的几种实现方式 多租户(Multi-Tenant ),即多个租户共用一个实例,租户的数据既有隔离又有共享,说到底是要解决数据存储的问题. 常用的数据存储方式有三种. 方案一:独立数据 ...
- Learning local feature descriptors with triplets and shallow convolutional neural networks 论文阅读笔记
题目翻译:学习 local feature descriptors 使用 triplets 还有浅的卷积神经网络.读罢此文,只觉收获满满,同时另外印象最深的也是一个浅(文章中会提及)字. 1 Cont ...