【Spring Cloud Alibaba】开源组件Sentinel

news2024/11/16 13:57:49

目录

  • 什么是Sentinel
    • 发展历史
    • 与Hystrix的异同
  • Sentinel可以做什么?
  • Sentinel的功能
  • Sentinel的开源生态
  • Sentinel的用户
  • 安装Sentinel控制台
    • 预备环境准备
    • Sentinel 分为两个部分:
    • 下载地址
  • 项目集成Sentinel
    • 创建项目
    • 修改依赖信息
    • 添加启动注解
    • 添加配置信息
    • 在控制器类中新增一个测试接口
    • 启动Nacos、order-sentinel-provider
  • Sentinel核心功能
    • Sentinel:分布式系统的流量防卫兵
    • 流量控制
    • 熔断降级
      • Sentinel熔断降级策略
        • 限制并发线程数进行降级
        • 通过响应时间进行降级
    • 系统负载保护
    • Sentinel核心规则
      • QPS和TPS
        • QPS
        • TPS
        • QPS VS TPS
      • RT,响应时间
      • 并发数:
      • 吞吐量
        • 系统吞吐量几个重要参数
    • 簇点链路规则
      • 配置直接流控模式——阈值类型为QPS
      • 配置直接流控模式——阈值类型为线程数
      • 接口(先访问一下),然后再去控制台
      • 配置关联流控模式——阈值类型为QPS
      • 配置流控效果——Warm Up(预热)
      • 配置流控效果——排队等待
    • 流控规则配置项的说明
    • Sentinel的降级规则
      • 回顾熔断降级
      • Sentinel熔断策略
        • RT(平均响应时间,秒级)
        • 异常比例 (ERROR_RATIO):
        • 异常数 (ERROR_COUNT):
      • 配置降级规则——降级策略为RT
      • 配置降级规则——降级策略为异常比例
      • 配置降级规则——降级策略为异常数
    • Sentinel的热点参数限流
      • 何为热点
      • 热点参数限流
      • 兜底方法
  • 附:参考百度解释:吞吐量(TPS)、QPS、并发数、响应时间(RT)几个概念
    • 响应时间(RT)
    • 吞吐量(Throughput)
    • 并发用户数
    • QPS每秒查询率(Query Per Second)

什么是Sentinel

  • 分布式系统的流量防卫兵
  • Sentinel 是阿里中间件团队开源的,面向分布式服务架构的轻量级高可用流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助用户保护服务的稳定性。
  • Sentinel官网:https://github.com/alibaba/Sentinel/
  • Sentinel中文官网:https://github.com/alibaba/Sentinel/wiki/介绍

发展历史

  • 2012年,Sentinel诞生于阿里巴巴,其主要目标是流量控制。
  • 2013-2017年,Sentinel迅速发展,并成为阿里巴巴所有微服务的基本组成部分。 它已在6000多个应用程序中使用,涵盖了几乎所有核心电子商务场景。
  • 2018年,Sentinel演变为一个开源项目。
  • 2020年,Sentinel Golang发布。

与Hystrix的异同

SentinelHystrix
产生背景阿里巴巴公司Netflix公司
用途服务容错框架服务容错框架
支持语言Java、Go、C++Java
支持功能流量控制、熔断降级、系统自适应保护流量控制、熔断降级
线程模型单线程模型多线程模型
监控中心自带的Sentinel控制台需要借助Hystrix Dashboard
配置方式通过规则或代码配置通过注解或配置文件
隔离策略信号量隔离线程池隔离/信号量隔离
熔断降级策略基于响应时间或失败比率基于失败比率
实时指标实现滑动窗口滑动窗口(基于 RxJava)
规则配置支持多种数据源支持多种数据源
扩展性多个扩展点插件的形式
基于注解的支持支持支持
限流基于 QPS,支持基于调用关系的限流不支持
流量整形支持慢启动、匀速器模式不支持
系统负载保护支持不支持
控制台开箱即用,可配置规则、查看秒级监控、机器发现等不完善
常见框架的适配Servlet、Spring Cloud、Dubbo、gRPC 等Servlet、Spring Cloud Netflix

Sentinel可以做什么?

  • 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
  • 完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
  • 广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Apache Dubbo、gRPC、Quarkus 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。同时 Sentinel 提供 Java/Go/C++ 等多语言的原生实现。
  • 完善的 SPI 扩展机制:Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。
    在这里插入图片描述

Sentinel的功能

功能说明
实时监测Sentinel能够实时监测系统、网络或应用程序的活动,以便及时发现异常或威胁。
预警和警报当发现异常情况或威胁时,Sentinel能够发送警报或预警,提醒相关人员采取行动。
自动化分析Sentinel利用机器学习和人工智能等技术,能够对大量数据进行自动化分析,识别潜在的威胁和异常行为。
威胁情报Sentinel能够从不同的安全信息源获取最新的威胁情报,以帮助分析和应对威胁。
多层防御Sentinel通过多层次的防御机制,包括防火墙、入侵检测系统和反病毒软件等,来保护系统免受不同类型的攻击。
日志记录和审计Sentinel可以记录和审计系统的活动日志,以便对安全事件进行调查和分析。
自定义规则和策略Sentinel允许管理员根据自己的需求,制定自定义的监测规则和安全策略。
可扩展性Sentinel能够适应不同规模和复杂度的系统,并能够扩展以支持更大的负载和数据量。
用户友好界面Sentinel通常提供直观简洁的用户界面,使管理员能够轻松配置和监控安全系统。

Sentinel的开源生态

在这里插入图片描述

Sentinel的用户

在这里插入图片描述

安装Sentinel控制台

预备环境准备

Sentinel依赖 Java 环境来运行。请确保安装了JDK或JRE。

Sentinel 分为两个部分:

  • 核心库(Java 客户端)不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。
  • 控制台(Dashboard)基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等应用容器。

下载地址

  • https://github.com/alibaba/Sentinel/releases
  • 选择的版本:1.7.2
  • 将下载好的jar包拷贝到D:\Soft\Sentinel(需要自己创建,也可以是其他盘路径)
  • 进入D:\Soft\Sentinel,在磁盘地址栏中输入cmd,出现命令行窗口
  • 在命令行窗口输入:java -jar sentinel-dashboard-1.7.2.jar
    • 因为我的电脑上装了JDK8和JDK17,sentinel这个版本只能用JDK8运行,因此我用这个命令:C:\Program Files\Java\jdk1.8.0_281\bin>java -jar D:\soft\Sentinel\sentinel-dashboard-1.7.2.jar
      在这里插入图片描述
  • 运行成功后,访问Sentinel的控制台
  • 在浏览器中输入:http://localhost:8080
  • 输入用户名和密码:sentinel
    在这里插入图片描述在这里插入图片描述

项目集成Sentinel

创建项目

  • 指定artifactId为order-sentinel-provider
    在这里插入图片描述

修改依赖信息

在这里插入图片描述

添加启动注解

  • @EnableDiscoveryClient
@SpringBootApplication
@EnableDiscoveryClient
public class OrderSentinelProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderSentinelProviderApplication.class, args);
    }
}

添加配置信息

spring:
  application:
    name: order-sentinel-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
    sentinel:
      transport:
        dashboard: localhost:8080
        port: 8719
server:
  port: 8086

在控制器类中新增一个测试接口

@RestController
@Slf4j
public class LimitFlowController {
    @RequestMapping("/test")
    public String test(){
        log.info("=========阈值类型为QPS,Sentinel测试。");
        return "Sentinel调试环境已经准备";
    }
}

启动Nacos、order-sentinel-provider

  • 注意:直接启动订单微服务和Sentinel,会发现Sentinel中没有订单微服务的数据,因为Sentinel是懒加载机制,所以需要访问一下接口,再去访问Sentinel 就有数据了

在这里插入图片描述

Sentinel核心功能

Sentinel:分布式系统的流量防卫兵

  • 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。
  • Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
  • 所以,Sentinel的核心功能包括:流量控制、熔断降级、系统负载保护。

流量控制

  • 在高并发、大流量场景下,进入系统的流量如果不加控制的话,系统就很有可能会被流量压垮。
  • 所以,在流量正式进入系统之前,需要对流量进行控制,以便使流量均匀、可控的方式进入系统。
  • Sentinel作为一个非常出色的容错组件,能够将不可控的流量经过处理转化成均匀、可控的流量。

熔断降级

  • 如果检测到系统中的某个调用链路中某个节点出现故障,比如请求超时、服务宕机或者异常比超出一定阈值时,就会对出现故障的节点的调用频率进行限制,甚至不调用出现故障的节点,让请求能够快速失败并返回,以最大程度避免影响到其他节点的服务而导致系统的级联故障。

Sentinel熔断降级策略

  • Sentinel主要通过限制并发线程数和响应时间对资源的访问进行降级
限制并发线程数进行降级
  • Sentinel可以通过限制服务节点的并发线程数量,来减少对其他服务节点的影响。
  • 例如,当某个服务节点出现故障,例如响应时间变长,或者直接宕机。此时,对服务的直接影响就是会造成请求线程数的不断堆积。
  • 如果这些堆积的线程数达到一定的数量后,对当前服务节点的后续请求就会被拒绝,等到堆积的线程完成任务后再开始继续接收新的请求。
通过响应时间进行降级
  • Sentinel除了可以通过限制并发线程数进行降级外,也能够通过响应时间进行降级。
  • 如果依赖的服务出现响应时间过长的情况,则所有对该服务的请求都会被拒绝,直到过了指定的时间窗口之后才能再次访问该服务。

系统负载保护

  • Sentinel提供了系统维度的自适应保护能力。当系统的压力和负载比较高的时候,如果还持续让大量的请求进入系统,此时就有可能将系统压垮,进而导致系统宕机。
  • Sentinel会在集群环境下,将本应服务A承载的流量转发到其他服务器上,比如转发到服务器B上。如果此时服务器B也处于高负载的状态,则Sentinel会提供相应的保护机制,让系统的入口流量和系统的整体负载达到平衡,让系统整体可用,并且能够最大限度的处理请求。

Sentinel核心规则

  • Sentinel的核心规则包括流控规则、熔断规则、热点规则、授权规则和系统规则
  • Sentinel能够对流量进行控制,主要是监控应用的QPS流量或者并发线程数等指标,如果达到指定的阈值时,就会被流量进行控制,以避免服务被瞬时的高并发流量击垮,保证服务的高可靠性

QPS和TPS

QPS
  • Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数
  • 是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。
TPS
  • 是Transactions Per Second的缩写,也就是事务数/秒。
  • 它是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。
  • 客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。
QPS VS TPS
  • QPS基本类似于TPS,但是不同的是,对于一个页面的一次访问,形成一个TPS;
  • 但一次页面请求,可能产生多次对服务器的请求,服务器对这些请求,就可计入“QPS”之中。
  • 如,访问一个页面会请求服务器2次,一次访问,产生一个“T”,产生2个“Q”。

RT,响应时间

  • 响应时间:执行一个请求从开始到最后收到响应数据所花费的总体时间,即从客户端发起请求到收到服务器响应结果的时间。
  • 响应时间RT(Response-time),是一个系统最重要的指标之一,它的数值大小直接反应了系统的快慢。

并发数:

  • 并发数是指系统同时能处理的请求数量,这个也是反应了系统的负载能力。

吞吐量

  • 系统的吞吐量与request对CPU的消耗、外部接口、IO等等紧密关联。
  • 单个request 对CPU消耗越高,外部系统接口、IO速度越慢,系统吞吐能力越低,反之越高。
系统吞吐量几个重要参数

分别是:QPS(TPS)、并发数、响应时间。

  • QPS(TPS):(Query Per Second)每秒钟request/事务 数量
  • 并发数:系统同时处理的request/事务数
  • 响应时间:一般取平均响应时间
  • QPS(TPS) = 并发数/平均响应时间
  • 并发数 = QPS * 平均响应时间

簇点链路规则

  • 点击簇点链路菜单,可以看到之前访问过的接口,如下所示
    在这里插入图片描述

  • 点击右侧的流控按钮,会弹出新增流控规则的提示框,如下所示
    在这里插入图片描述

配置直接流控模式——阈值类型为QPS

  • 这里,针对 http://localhost:8086/test接口进行直接流控模式
  • 在新增流控规则里阈值类型选择QPS,单机阈值输入1,表示每秒钟的请求量如果超过1,则会触发Sentinel的限流操作

配置直接流控模式——阈值类型为线程数

  • 这里,针对 http://localhost:8086/test2接口进行直接流控模式
  • 在新增流控规则里阈值类型选择线程数,单机阈值输入1,表示当调用API的线程数达到阈值时,则会触发Sentinel的限流操作

接口(先访问一下),然后再去控制台

@RestController
@Slf4j
public class LimitFlowController {
    @RequestMapping("/test")
    public String test(){
        log.info("=========阈值类型为QPS,Sentinel测试。");
        return "Sentinel调试环境已经准备";
    }
    @RequestMapping("/test2")
    public String test2() throws InterruptedException {
        System.out.println("=========阈值类型为线程数,Sentinel测试。");
        TimeUnit.SECONDS.sleep(2);
        return "Sentinel调试环境已经准备";
    }
}

在这里插入图片描述在这里插入图片描述在这里插入图片描述

配置关联流控模式——阈值类型为QPS

  • 这里,针对 http://localhost:8086/test3接口进关联流控模式
  • 在新增流控规则里阈值类型选择QPS,单机阈值输入5,表示当关联资源/test的QPS阈值超过5时,就限流/test3的访问
    @RequestMapping("/test3")
    public String test3() {
        System.out.println("=========阈值类型为QPS,流控模式为关联。");
        return "Sentinel调试环境已经准备";
    }

在这里插入图片描述在这里插入图片描述

配置流控效果——Warm Up(预热)

  • Warm up也叫预热模式,是应对服务冷启动的一种方案。请求阈值初始值是 threshold / coldFactor,持续指定时长后,逐渐提高到threshold值。而coldFactor的默认值是3。
    在这里插入图片描述
    @RequestMapping("/save")
    public String save() {
        System.out.println("=========阈值类型为QPS,流控模式为直接,流控效果为 Warm up预热。");
        return "Sentinel调试环境已经准备:预热";
    }

在这里插入图片描述在这里插入图片描述

配置流控效果——排队等待

  • 能够使请求均匀的通过,单机的阈值为每秒通过的请求数量,其余的请求会排队等待。
  • 另外,还会设置一个超时时间,当请求超过超时时间未处理时,会被丢弃。
    在这里插入图片描述
    @RequestMapping("/query")
    public String query() {
        System.out.println("=========阈值类型为QPS,流控模式为直接,流控效果为等待。");
        return "Sentinel调试环境已经准备:排队等待";
    }

在这里插入图片描述
在这里插入图片描述

流控规则配置项的说明

  • 资源名:资源的唯一名称,默认就是请求的接口路径,可以自行修改,但是要保证唯一。
  • 针对来源:具体针对某个微服务进行限流,默认值为default,表示不区分来源,全部限流。
  • 阈值类型:
    • QPS(每秒钟的请求数量):当调用该API的阈值达到达到阈值时候,进行限流,
    • 并发线程数:当调用该API的线程数达到阈值时,进行限流。
  • 单机阈值:与阈值类型组合使用。如果阈值类型选择的是QPS,表示当调用接口的QPS达到阈值时,进行限流操作。如果阈值类型选择的是并发线程数,则表示当调用接口的并发线程数达到阈值时,进行限流操作。
  • 是否集群:选中则表示集群环境,不选中则表示非集群环境。
  • 流控模式:
    • 直接:当API调用达到限流条件时,直接限流
    • 关联:当关联的资源达到阈值时,限流自己
    • 链路:统计从指定链路访问到本资源的请求,触发阈值时,对指定链路限流
  • 流控效果
    • 快速失败:直接失败,抛出异常
    • Warm Up:根据codeFactor(冷加载因子 默认为3)的值,从阈值/codeFactor,经过预热时长,才达到设置的QPS阈值。
    • 排队等待:匀速排队,让请求以均匀的速度通过,阈值类型必须设置为QPS,否则无效

Sentinel的降级规则

回顾熔断降级

  • 除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。一个服务常常会调用别的模块,可能是另外的一个远程服务、数据库,或者第三方 API 等。
  • 例如,支付的时候,可能需要远程调用银联提供的 API;查询某个商品的价格,可能需要进行数据库查询。然而,这个被依赖服务的稳定性是不能保证的。如果依赖的服务出现了不稳定的情况,请求的响应时间变长,那么调用服务的方法的响应时间也会变长,线程会产生堆积,最终可能耗尽业务自身的线程池,服务本身也变得不可用。
  • 现代微服务架构都是分布式的,由非常多的服务组成。不同服务之间相互调用,组成复杂的调用链路。以上的问题在链路调用中会产生放大的效果。复杂链路上的某一环不稳定,就可能会层层级联,最终导致整个链路都不可用。因此我们需要对不稳定的弱依赖服务调用进行熔断降级,暂时切断不稳定调用,避免局部不稳定因素导致整体的雪崩。熔断降级作为保护自身的手段,通常在客户端(调用端)进行配置。

Sentinel熔断策略

RT(平均响应时间,秒级)
  • 平均响应时间超出阈值且在时间窗口内通过的请求>=5,两个条件同时满足后触发降级
  • 窗口期过后关闭断路器
  • RT最大为4900(更大的值需要在配置文件中设置)
异常比例 (ERROR_RATIO):
  • QPS>=5且异常比例(秒级统计)超过阈值时,触发降级
  • 时间窗口结束后,关闭降级
异常数 (ERROR_COUNT):
  • 异常数(分钟统计)超过阈值时,触发降级
  • 时间窗口结束后,关闭降级

配置降级规则——降级策略为RT

这里,针对 http://localhost:8086/hy1接口进行降级

    @RequestMapping("/hy1")
    public String hy1() throws InterruptedException {
        TimeUnit.SECONDS.sleep(1);
        System.out.println("=========降级测试策略为RT,Sentinel测试。");
        return "Sentinel调试环境已经准备:降级测试";
    }

在这里插入图片描述在这里插入图片描述

配置降级规则——降级策略为异常比例

这里,针对 http://localhost:8086/api/testSentinelE接口进行降级

    @RequestMapping("/hy2")
    public String hy2() throws InterruptedException {
        System.out.println(1/0);
        System.out.println("=========降级测试策略为异常比例,Sentinel测试。");
        return "Sentinel调试环境已经准备:异常比例";
    }

在这里插入图片描述在这里插入图片描述

配置降级规则——降级策略为异常数

  • 这里,针对 http://localhost:8086/api/testSentinelF接口进行降级
  • 在新增降级规则里降级策略选择异常数,异常数为5,时间窗口为70。当1分钟的异常数超过超过5时,触发降级
  • 点击5次以后,触发降级
    @RequestMapping("/hy3")
    public String hy3() throws InterruptedException {
        System.out.println(1/0);
        System.out.println("=========降级测试策略为异常数,Sentinel测试。");
        return "Sentinel调试环境已经准备:异常数";
    }

在这里插入图片描述在这里插入图片描述

Sentinel的热点参数限流

何为热点

  • 热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。比如
    • 商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制
    • 用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制

热点参数限流

  • 热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。
  • 热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。

兜底方法

  • 之前的兜底方法:限流出问题后,系统默认提示
    • Blocked by Sentinel(flow limiting)
  • @SentinelResource 注解:用于自定义定义资源,并提供可选的异常处理和 fallback 配置项:
    • value:资源名称,必需项(不能为空)。
    • blockHandler / blockHandlerClass: blockHandler 对应处理 BlockException 的函数名称,可选项。
    • fallback / fallbackClass:fallback 函数名称,可选项,用于在抛出异常的时候提供 fallback 处理逻辑。
    @RequestMapping("/getGoods")
    @SentinelResource(value = "getGoods",blockHandler = "blockHandlerGetGoods")
    public String xian(String id,String name)  {
        return "Sentinel调试环境已经准备:异常比例";
    }

    public String blockHandlerGetGoods(String id, String name, BlockException ex){
        return "访问过快!等一会再访问吧!";
    }
  • 注意:兜底方法,参数要一致,添加BlockException
  • 配置热点规则——热点参数限流
    • 这里,针对 http://localhost:8086/getGoods接口进行热点参数限流
    • 新增热点规则
      在这里插入图片描述
      发送请求测试
      http://localhost:8086/getGoods
      http://localhost:8086/getGoods?id=1
      http://localhost:8086/getGoods?id=1&name=aa
      http://localhost:8086/getGoods?name=aa
      在这里插入图片描述

附:参考百度解释:吞吐量(TPS)、QPS、并发数、响应时间(RT)几个概念

响应时间(RT)

  • 响应时间是指系统对请求作出响应的时间。
  • 直观上看,这个指标与人对软件性能的主观感受是非常一致的,因为它完整地记录了整个计算机系统处理请求的时间。
  • 由于一个系统通常会提供许多功能,而不同功能的处理逻辑也千差万别,因而不同功能的响应时间也不尽相同,甚至同一功能在不同输入数据的情况下响应时间也不相同。
  • 所以,在讨论一个系统的响应时间时,人们通常是指该系统所有功能的平均时间或者所有功能的最大响应时间。
  • 当然,往往也需要对每个或每组功能讨论其平均响应时间和最大响应时间。

  • 对于单机的没有并发操作的应用系统而言,人们普遍认为响应时间是一个合理且准确的性能指标。
  • 需要指出的是,响应时间的绝对值并不能直接反映软件的性能的高低,软件性能的高低实际上取决于用户对该响应时间的接受程度。
  • 对于一个游戏软件来说,响应时间小于100毫秒应该是不错的,响应时间在1秒左右可能属于勉强可以接受,如果响应时间达到3秒就完全难以接受了。
  • 而对于编译系统来说,完整编译一个较大规模软件的源代码可能需要几十分钟甚至更长时间,但这些响应时间对于用户来说都是可以接受的。

吞吐量(Throughput)

  • 吞吐量是指系统在单位时间内处理请求的数量。
  • 对于无并发的应用系统而言,吞吐量与响应时间成严格的反比关系,实际上此时吞吐量就是响应时间的倒数。
  • 前面已经说过,对于单用户的系统,响应时间(或者系统响应时间和应用延迟时间)可以很好地度量系统的性能,但对于并发系统,通常需要用吞吐量作为性能指标。

  • 对于一个多用户的系统,如果只有一个用户使用时系统的平均响应时间是t,当有你n个用户使用时,每个用户看到的响应时间通常并不是n×t,而往往比n×t小很多(当然,在某些特殊情况下也可能比n×t大,甚至大很多)。
  • 这是因为处理每个请求需要用到很多资源,由于每个请求的处理过程中有许多不走难以并发执行,这导致在具体的一个时间点,所占资源往往并不多。
  • 也就是说在处理单个请求时,在每个时间点都可能有许多资源被闲置,当处理多个请求时,如果资源配置合理,每个用户看到的平均响应时间并不随用户数的增加而线性增加。
  • 实际上,不同系统的平均响应时间随用户数增加而增长的速度也不大相同,这也是采用吞吐量来度量并发系统的性能的主要原因。
  • 一般而言,吞吐量是一个比较通用的指标,两个具有不同用户数和用户使用模式的系统,如果其最大吞吐量基本一致,则可以判断两个系统的处理能力基本一致。

并发用户数

  • 并发用户数是指系统可以同时承载的正常使用系统功能的用户的数量。
  • 与吞吐量相比,并发用户数是一个更直观但也更笼统的性能指标。
  • 实际上,并发用户数是一个非常不准确的指标,因为用户不同的使用模式会导致不同用户在单位时间发出不同数量的请求。
  • 以网站系统为例,假设用户只有注册后才能使用,但注册用户并不是每时每刻都在使用该网站,因此具体一个时刻只有部分注册用户同时在线,在线用户就在浏览网站时会花很多时间阅读网站上的信息,因而具体一个时刻只有部分在线用户同时向系统发出请求。
  • 这样,对于网站系统我们会有三个关于用户数的统计数字:注册用户数、在线用户数和同时发请求用户数。
  • 由于注册用户可能长时间不登陆网站,使用注册用户数作为性能指标会造成很大的误差。
  • 而在线用户数和同事发请求用户数都可以作为性能指标。
  • 相比而言,以在线用户作为性能指标更直观些,而以同时发请求用户数作为性能指标更准确些。

QPS每秒查询率(Query Per Second)

  • 每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。
  • 对应fetches/sec,即每秒的响应请求数,也即是最大吞吐能力。 (看来是类似于TPS,只是应用于特定场景的吞吐量)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大数据开发统计数据的详细口径是什么

在进行开发数据需求之前,我们先要明确数据统计的详细口径是什么。 需求1:(不明确的示例) 统计商品的销售数量。 存在的问题: 这个需求表述过于简单,未明确指出统计商品销售数量的时间范围、商品类型等关键…

《十八岁出门远行》世界很小,案牍劳形;世界很大,日短心长

《十八岁出门远行》世界很小,案牍劳形;世界很大,日短心长 余华,作家,著有《在细雨中呼喊》《活着》《文城》《兄弟》等。 文章目录 《十八岁出门远行》世界很小,案牍劳形;世界很大,日…

SOA的参考架构

1. 以服务为中心的企业集成架构 IBM的Websphere业务集成参考架构(如图1所示,以下称参考架构)是典型的以服务为中心的企业集成架构。 图1 IBM WebSphere业务集成参考架构 以服务为中心的企业集成采用“关注点分离(Separation of Co…

Redisson分布式锁原理解析

前言 首先Redis执行命令是单线程的,所以可以利用Redis实现分布式锁,而对于Redis单线程的问题,是其线程模型的问题,本篇重点是对目前流行的工具Redisson怎么去实现的分布式锁进行深入理解;开始之前,我们可以…

正宇软件助力江西数字人大建设,高效解决群众“急难愁盼”问题

近日,赣州市南康区群众通过“江西数字人大”小程序成功解决道路塌陷等民生问题,引发社会广泛关注。这一成功案例不仅彰显了“数字人大”在解决群众“急难愁盼”问题中的重要作用,也凸显了江西地区近年来在数字化人大建设方面的显著成效。正宇…

【高频】什么是索引的下推和覆盖

面试回答: 索引的下推是指数据库引擎在执行查询时,将过滤条件尽可能地应用到索引上,以减少需要检索的数据量,从而提高查询性能。这样可以减少数据库引擎从磁盘加载的数据量,提高查询效率。覆盖索引是指一个索引包含了…

uniapp余额银行卡支付密码界面实现(直接复制)

示例: 插件地址:自定义数字/身份证/密码输入框,键盘密码框可分离使 - DCloud 插件市场 1.下载插件并导入HBuilderX,找到文件夹,copy number-keyboard.vue一份为number-keyboard2.vue(number-keyboard.vue是…

Android 高德地图API(新版)

新版高德地图 前言正文一、创建应用① 获取PackageName② 获取调试版安全码SHA1③ 获取发布版安全码SHA1 二、配置项目① 导入SDK② 配置AndroidManifest.xml 三、获取当前定位信息① ViewBinding使用和导包② 隐私合规设置③ 权限请求④ 初始化定位⑤ 获取定位信息 四、显示地…

ChatGPT-4o在临床医学日常工作、数据分析与可视化、机器学习建模中的技术

2022年11月30日,可能将成为一个改变人类历史的日子——美国人工智能开发机构OpenAI推出了聊天机器人ChatGPT-3.5,将人工智能的发展推向了一个新的高度。2023年11月7日,OpenAI首届开发者大会被称为“科技界的春晚”,吸引了全球广大…

Web 网页性能优化

Web 网页性能及性能优化 一、Web 性能 Web 性能是 Web 开发的一个重要方面,侧重于网页加载速度以及对用户输入的响应速度 通过优化网站来改善性能,可以在为用户提供更好的体验 网页性能既广泛又非常深入 1. 为什么性能这么重要? 1. 性能…

研发效能DevOps: Ubuntu 部署 JFrog 制品库

目录 一、实验 1.环境 2.Ubuntu 部署 JFrog 制品库 3.Ubuntu 部署 postgresql数据库 4.Ubuntu 部署 Xray 5. 使用JFrog 增删项目 二、问题 1.Ubuntu 如何通过apt方式部署 JFrog 制品库 2.Ubuntu 如何通过docker方式部署 JFrog 制品库 3.安装jdk报错 4.安装JFrog Ar…

九种mfc140u.dll丢失的解决方法,全面解决mfc140u.dll文件丢失

mfc140u.dll是 Microsoft Visual C 2015 Redistributable 的一部分,它与 Microsoft 基础类库(MFC)的 Unicode 版本有关。当您在运行使用 Visual C 2015 开发的应用程序时,可能会碰到关于mfc140u.dll丢失的错误。下面列出了一些解决…

黑龙江等保测评流程

黑龙江的等保测评过程是一个系统严谨的过程,目的在于保证信息系统的安全与机密性符合国家规定的要求。下面将详细介绍黑龙江等保测评的流程: 一、定级与备案 首先,企业要依据自身的业务特点、信息系统的重要性和所承载的信息的敏感程度&…

React - 实现走马灯组件

一、实现效果 二、源码分析 import {useRef, useState} from "react";export const Carousel () > {const images [{id: 3, url: https://sslstage3.sephorastatic.cn/products/2/4/6/8/1/6/1_n_new03504_100x100.jpg}, {id: 1, url: https://sslstage2.sephor…

Spring系统学习 -Spring IOC 的XML管理Bean之bean的获取、依赖注入值的方式

在Spring框架中,XML配置是最传统和最常见的方式之一,用于管理Bean的创建、依赖注入和生命周期等。这个在Spring中我们使用算是常用的,我们需要根据Spring的基于XML管理Bean了解相关Spring中常用的获取bean的方式、依赖注入值的几种方式等等。…

数据结构笔记1 绪论,线性表

学习视频: 第01周c--1.2基本概念和术语1_哔哩哔哩_bilibili 01《数据结构》绪论_哔哩哔哩_bilibili 数据: 1.数值型的数据:整数,实数 2.非数值型的数据:文字、图像.. 数据元素:(元素&#xf…

四款优秀的电脑屏幕监控软件|监控电脑屏幕的必备软件

在选择监控电脑屏幕的软件时,我们需要考虑多个因素,包括软件的功能性、易用性、兼容性、安全性以及价格等。以下是几款在市场上广受好评的监控电脑屏幕的软件,它们各自具有独特的特点和优势。 1.安企神软件 安企神软件是一款专业的电脑屏幕监…

【电气学习六】HART仪表与HART信号

【电气学习六】HART仪表与HART信号 学习使人快乐 文章目录 【电气学习六】HART仪表与HART信号前言一、HART仪表是什么?二、HART协议1.什么是HART协议?2.HART协议的工作原理3.HART协议的特点4.HART协议的命令格式5.无源信号与有源信号的定义6.如何采集无源…

编写程序,提示用户输入以米/秒(m/s)为单位的速度v和以米/秒的平方(m/s)为单位的加速度 a,然后显示最短跑道长度。

(物理:求出跑道长度)假设一个飞机的加速度是a而起飞速度是v,那么可以使用下 面的公式计算出飞机起飞所需的最短跑道长度: 编写程序,提示用户输入以米/秒(m/s)为单位的速度v和以米/秒的平方(m/s)为单 位的加速度 a,然后显示最短跑道长度。下面…

C++基础与深度解析 | 模板 | 函数模板 | 类模板与成员函数模板 | concepts | 完美转发 | 模板的其他内容

文章目录 一、函数模板二、类模板与成员函数模板三、Concepts(C20)四、模板相关内容1.数值模板参数与模板模板参数2.别名模板与变长模板3.包展开与折叠表达式4.完美转发与lambda表达式模板5.消除歧义与变量模板 一、函数模板 在C中,函数模板是一种允许你编写可以处理…