SLA中QPS、TP999等概念

news/2024/12/22 1:07:23/

文章目录

    • 一、SLA概念
    • 二、TP999
      • 1.1 概念
      • 1.2 作用
    • 三、QPS
      • 3.1 基本概念
      • 3.2 公式:
      • 3.3 数据库连接池 和 线程池处理请求区别
      • 3.4 粗估QPS的计算公式【不知道avg的情况下】

一、SLA概念

参考文档:SLA

二、TP999

1.1 概念

  • 接口的响应TP99线的时间

  • TP99指的是满足百分之九十九的网络请求所需要的最低耗时。同理TP999指的满足千分之九百九十九的网络请求所需要的最低耗时,这里的百分比按耗时由小到大的序列截取。

  • 举个例子:有四次请求耗时分别为:

10ms,1000ms,100ms,2ms,由小到大排序后为 2ms,10ms,100ms,1000ms

计算TP50:4次请求中,99%的请求数为4*0.5,进位取整也就是2次,满足这全部2次请求的的最低耗时为10ms,也就是TP99的答案是10ms。

计算TP99:4次请求中,99%的请求数为4*0.99,进位取整也就是4次,满足这全部4次请求的的最低耗时为1000ms,也就是TP99的答案是1000ms。

可以发现,TP后的数字越大,对耗时的容忍性越低,这个下限取决于那个最耗时的请求,有点像木桶效应~

1.2 作用

可以定制rpc的timeout时间,如果tp999一般在500ms,那么调用方就可以设置timeout = 1500ms左右

三、QPS

3.1 基本概念

1、含义:即每秒的响应请求数,也即是最大吞吐能力。

⚠️:【是1s能处理的请求数量,不是1s可以打进来多少请求】,即我提供的接口方法的最大吞吐量

3.2 公式:

QPS = 最大的工作线程数 / avg

  • 最大连接数

    minWorkerThreads(默认即可)最少的工作线程数10流量存在明显的高低峰的场景下,可以根据服务实际情况调大,避免服务出现不断动态地创建和销毁线程
    maxWorkerThreads(默认即可)最大的工作线程数256
    workQueueSize(默认即可)线程池队列大小0
    selectorThreads(默认即可)select线程数4
    keepAliveTime线程池空闲时,线程存活的时间30s

    a、是接口1s可以支持的最大连接数量。和接口使用的框架、通信协议有关

    b、mt使用的是thrift的rpc,底层是netty。maxWorkerThreads = 256

    c、dubbo、springcloud也有自己相应的最大工作线程数

  • avg

    a、一般就是接口的平均响应时间,可以等效理解为RT(接口请求的一次往返时间)

    b、流量不高的时候,接口avg可能是100ms。但是高并发的时候,avg可能会高2-3倍

    eg:

    ​ 1、接口是rpc并发查询下游数据,然后内存处理,返回。正常时,rpc并发查询下游是30个请求,我们配置的mdp核心线程数是32,完全够用,所以avg = 100ms

    ​ 2、当并发高了,33请求并发查询下游数量。1-32的请求,还是100ms,但是第33个请求来了,可能第1个请求刚好处理完了或正在处理,或者基本上刚开始处理。所以第33个请求处理完成需要100ms,整体需要100ms[1-32] + 100ms[33] = 200ms

    ​ 3、所以,并发高了,avg肯定会变大。可以采取并发请求的数量 / 核心线程数 * 之前的avg【一般就是扩大2-3倍】

    c、接口avg的影响因素,一般分为

    ​ 1、代码问题【for循环嵌套过多、处理逻辑繁琐等】

    ​ 2、mdp线程池核心的数量,并发处理度

    ​ 3、查询db,sql语句的快慢、索引是否添加、甚至是mysql的连接耗时等

    ​ 4、适当的让少一些流量进来,也能提升avg-流量削峰(不好的请求、redis同一个人的请求拒绝)

    ​ 5、使用缓存数据、读缓存等也能提高接口的性能

    d、数据库连接池 和 线程池处理请求的区别

    ⚠️:mysql不是安装在你appkey代码跑的服务器上,mysql有自己的服务器集群。

3.3 数据库连接池 和 线程池处理请求区别

一、数据库连接池
此处连接池逻辑和线程池逻辑类似,初始化的时候初始化常驻链接,每过来一个新的连接,执行如下逻辑:
mdp.zebra[0].maxPoolSize=100
mdp.zebra[0].initialPoolSize=30

1.连接数是否小于常驻连接数,若小于则拿出来用recycle,否则进入步骤二;

2.连接数是否小于最大连接数,若小于则创建新连接,用后close,否则进入步骤三;

3.等待其他连接关闭,等待的时间是否小于最大等待时长,若小于则创建新连接,用后close,否则抛出GetConnectionTimeoutException

二、线程池
首先检测线程池运行状态,如果不是RUNNING,则直接拒绝,线程池要保证在RUNNING的状态下执行任务。

如果workerCount【线程数量】 < corePoolSize,则创建并启动一个线程来执行新提交的任务。

如果workerCount >= corePoolSize,且线程池内的阻塞队列未满,则将任务添加到该阻塞队列中。

如果workerCount >= corePoolSize && workerCount < maximumPoolSize,且线程池内的阻塞队列已满,则创建并启动一个线程来执行新提交的任务。

如果workerCount >= maximumPoolSize,并且线程池内的阻塞队列已满, 则根据拒绝策略来处理该任务, 默认的处理方式是直接抛异常。

  • 综上所述:

    一台机器的QPS = 256 / 100ms = 2560。5台机器 = 2560 * 5 = 12800

    ⚠️这里的256,是你整个服务的最大工作线程。256不一定都给你这个接口方法用

    所以,一台机器的此方法QPS = 256 /10 / 100ms = 250左右 , 6台机器 1500 QPS左右

3.4 粗估QPS的计算公式【不知道avg的情况下】

  • 正常情况下avg可以根据访问db的sql时间大概能推断出来,但是有时候不知道avg,此时可以使用下面公式:
  • pv访问量*0.8 / 864000 * 0.2 = 集群QPS

http://www.ppmy.cn/news/1122853.html

相关文章

【计算机网络】IP协议(下)

文章目录 1. 特殊的IP地址2. IP地址的数量限制3. 私有IP地址和公网IP地址私有IP为什么不能出现在公网上&#xff1f;解决方案——NAT技术的使用 4. 路由5. IP分片问题为什么要进行切片&#xff1f;如何做的分片和组装&#xff1f;16位标识3位标志13位片偏移例子 细节问题如何区…

rk3399 linux4.19 ubuntu mpv播放概率性内核崩溃在vop_crtc_atomic_flush

现象&#xff1a;使用 mpv播放视频时&#xff0c;播放一段时间后内核core 环境&#xff1a; linux sdk版本&#xff1a;4.19.172 ubuntu18系统 验证&#xff1a; 1. /etc/mpv/mpv.conf 默认配置voxv 播放一段时间后&#xff0c;内核core 2. /etc/mpv/mpv.conf vogpu播放稳定…

Linux系统编程——总结初识Linux(常用命令、特点、常见操作系统)

文章目录 UNIX操作系统&#xff08;了解&#xff09;Linux操作系统主要特征Linux和unix的区别和联系什么是操作系统常见的操作系统Ubuntu操作系统Ubuntu安装linux下的目录的类型(掌握)shell指令shell指令的格式文件操作相关指令系统相关命令网络相关命令其他命令软件安装相关的…

OmniPlan Pro 4 for Mac:引领项目管理的创新与高效

OmniPlan Pro 4是一款强大且高效的项目管理工具&#xff0c;专为Mac用户设计。它提供了一套综合性的解决方案&#xff0c;帮助用户在Mac上便捷地进行项目规划、追踪和管理。凭借其直观的界面&#xff0c;用户可以快速上手&#xff0c;并且能充分利用这款工具的各种功能。 规划…

【云原生】kubernetes中pod(进阶)

目录 一、资源限制 业务cpu 内存 1.1CPU 资源单位 1.2 内存 资源单位 示例1 示例2&#xff1a; 二、健康检查&#xff1a;又称为探针&#xff08;Probe&#xff09; 2.1探针的三种规则 2.2 Probe支持三种检查方法 2.3示例 示例1&#xff1a;exec方式 示例3&#xf…

systemd Linux 发行版 antiX推出antiX 23 发布

导读基于 Debian “稳定 “分支的无 systemd Linux 发行版 antiX 的开发人员宣布推出 antiX 23。 这是该项目基于 Debian 12 的第一个版本&#xff1a;”antiX 23 ‘Arditi del Popolo’是基于 Debian ‘书虫’的新版本。 像往常一样&#xff0c;我们为 32 位和 64 位架构提供…

基于springboot+vue的入校申报审批系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

动静分离和前后端分离

动静分离和前后端分离 一、动静分离 侧重单体项目的静态资源分离 二、前后端分离 前后端完全分离