Spring Cloud Alibaba 之 Sentinel

系列文章目录

第一章 Java线程池技术应用
第二章 CountDownLatch和Semaphone的应用
第三章 Spring Cloud 简介
第四章 Spring Cloud Netflix 之 Eureka
第五章 Spring Cloud Netflix 之 Ribbon
第六章 Spring Cloud 之 OpenFeign
第七章 Spring Cloud 之 GateWay
第八章 Spring Cloud Netflix 之 Hystrix
第九章 代码管理gitlab 使用
第十章 SpringCloud Alibaba 之 Nacos discovery
第十一章 SpringCloud Alibaba 之 Nacos Config
第十二章 Spring Cloud Alibaba 之 Sentinel

在这里插入图片描述


文章目录

  • 系列文章目录
    • @[TOC](文章目录)
  • 前言
  • 1、简介
    • 1.1、基本概念
  • 2、Sentinel控制台
  • 3、Sentinel开发流程
    • 3.1、 drp-app-api消费端工程引进依赖
      • 3.1.1、yml新加配置(跟nacos同级)
    • 3.2、定义资源
    • 3.3、定义规则
      • 3.3.1、流量控制
      • 3.3.2、流控模式
      • 3.3.3、流控效果
      • 3.3.4、熔断降级
      • 3.3.5、通过Nacos配置规则
  • 4、Sentinel与Gateway的整合
  • 4.1、添加依赖
  • 4.2、详细配置

前言

Sentinel 是由阿里巴巴中间件团队开发的开源项目,是一种面向分布式微服务架构的轻量级高可用流量控制组件。
Sentinel 主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度帮助用户保护服务的稳定性。

1、简介

Sentinel 主要由以下两个部分组成:

  • Sentinel 核心库:Sentinel 的核心库不依赖任何框架或库,能够运行于 Java 8 及以上的版本的运行时环境中,同时对 Spring Cloud、Dubbo 等微服务框架提供了很好的支持。
  • Sentinel 控制台(Dashboard):Sentinel 提供的一个轻量级的开源控制台,它为用户提供了机器自发现、簇点链路自发现、监控、规则配置等功能。

在这里插入图片描述

1.1、基本概念

Sentinel 的基本概念有两个,它们分别是:资源和规则。

基本概念描述
资源资源是 Sentinel 的关键概念。它可以是 Java 应用程序中的任何内容,例如由应用程序提供的服务或者是服务里的方法,甚至可以是一段代码。

我们可以通过 Sentinel 提供的 API 来定义一个资源,使其能够被 Sentinel 保护起来。通常情况下,我们可以使用方法名、URL 甚至是服务名来作为资源名来描述某个资源。
规则围绕资源而设定的规则。Sentinel 支持流量控制、熔断降级、系统保护、来源访问控制和热点参数等多种规则,所有这些规则都可以动态实时调整。

2、Sentinel控制台

下载:https://github.com/alibaba/Sentinel/releases
在这里插入图片描述
放到D:盘的sentinel目录里面,并将其启动

java -jar sentinel-dashboard-1.8.5.jar

启动后,访问地址:http://localhost:8080/
用户名和密码:sentinel/sentinel

3、Sentinel开发流程

引进sentinel依赖 -> 定义资源 -> 定义规则 -> 校验规则

3.1、 drp-app-api消费端工程引进依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    <version>2021.0.4.0</version>
</dependency>
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
    <version>1.8.5</version>
</dependency>

3.1.1、yml新加配置(跟nacos同级)

sentinel:
  transport:
    #配置 Sentinel dashboard 地址
    dashboard: localhost:8080
    #默认8719端口,假如被占用会自动从8719开始依次+1扫描,直至找到未被占用的端口
    port: 8719

3.2、定义资源

  • 适配主流框架自动定义资源
  • 注解方式定义资源 (推荐)

@SentinelResource(value=“user-userInfoList”)

@SentinelResource(value = "tiger-test",blockHandler = "userInfoListBlockHandler")
public List<UserInfo> userInfoList(){
    return this.userService.userInfoList();
}

public List<UserInfo>   userInfoListBlockHandler(BlockException blockException){
    log.info("#########################################userInfoListBlockHandler");
    return null;
}

3.3、定义规则

3.3.1、流量控制

在这里插入图片描述

属性说明默认值
资源名流控规则的作用对象。-
阈值流控的阈值。-
阈值类型流控阈值的类型,包括 QPS 或并发线程数。QPS
针对来源流控针对的调用来源。default,表示不区分调用来源
流控模式调用关系限流策略,包括直接、链路和关联。直接
流控效果流控效果(直接拒绝、Warm Up、匀速排队),不支持按调用关系限流。直接拒绝

3.3.2、流控模式

  • 直接:统计当前资源的请求,触发阈值时对当前资源直接限流,也是默认的模式
  • 关联:统计与当前资源相关的另一个资源,触发阈值时,对当前资源限流

使用场景:
a、两个有竞争关系的资源
b、一个优先级较高,一个优先级较低
在这里插入图片描述

  • 链路:统计从指定链路访问到本资源的请求,触发阈值时,对指定链路限流
    例如有两条请求链路:
  • /test1 --> /common
  • /test2 --> /common
    在这里插入图片描述
    说明:Sentinel默认会将Controller方法做context整合,导致链路模式的流控失效,需要修改application.yml,添加配置:
spring:
  cloud:
    sentinel:
      web-context-unify: false # 关闭context整合

3.3.3、流控效果

快速失败:达到阈值后,新的请求会被立即拒绝并抛出FlowException异常。是默认的处理方式。
warm up:预热模式,对超出阈值的请求同样是拒绝并抛出异常。但这种模式阈值会动态变化,从一个较小值逐渐增加到最大阈值。
排队等待:让所有的请求按照先后次序排队执行,两个请求的间隔不能小于指定时长

当请求超过QPS阈值时,快速失败和warm up
会拒绝新的请求并抛出异常。而排队等待则是让所有请求进入一个队列中,然后按照阈值允许的时间间隔依次执行。后来的请求必须等待前面执行完成,如果请求预期的等待时间超出最大时长,则会被拒绝。
例如:QPS = 5,意味着每200ms处理一个队列中的请求;timeout =
2000,意味着预期等待超过2000ms的请求会被拒绝并抛出异常

打开命令行窗口,执行以下命令查看资源的实时统计信息。
curl http://localhost:8719/cnode?id=userInfolist

idx id                thread    pass      blocked   success    total    aRt   1m-pass   1m-block   1m-all   exceptio
2   userInfoList      0        0.0       0.0       0.0        0.0      0.0   10        16         26       0.0

实时统计信息各列名说明如下:

  • thread: 代表当前处理该资源的并发数;
  • pass: 代表一秒内到来到的请求;
  • blocked: 代表一秒内被流量控制的请求数量;
  • success: 代表一秒内成功处理完的请求;
  • total: 代表到一秒内到来的请求以及被阻止的请求总和;
  • RT: 代表一秒内该资源的平均响应时间;
  • 1m-pass: 则是一分钟内到来的请求;
  • 1m-block: 则是一分钟内被阻止的请求;
  • 1m-all: 则是一分钟内到来的请求和被阻止的请求的总和;
  • exception: 则是一秒内业务本身异常的总和

3.3.4、熔断降级

Sentinel 的熔断将机制会在调用链路中某个资源出现不稳定状态时(例如调用超时或异常比例升高),暂时切断对这个资源的调用,以避免局部不稳定因素导致整个系统的雪崩。
Sentinel 提供了 3 种熔断策略

熔断策略说明
慢调用比例(SLOW_REQUEST_RATIO)
异常比例 (ERROR_RATIO)当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数目且异常的比例大于阈值,则在接下来的熔断时长内请求会自动被熔断。

经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。异常比率的阈值范围是 [0.0, 1.0],代表 0% - 100%。
异常数 (ERROR_COUNT)当单位统计时长内的异常数目超过阈值之后会自动进行熔断。

经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。
在这里插入图片描述
状态说明触发条件
熔断关闭状态(CLOSED)处于关闭状态时,请求可以正常调用资源。满足以下任意条件,Sentinel 熔断器进入熔断关闭状态:
  • 全部请求访问成功。
  • 单位统计时长(statIntervalMs)内请求数目小于设置的最小请求数目。
  • 未达到熔断标准,例如服务超时比例、异常数、异常比例未达到阈值。
  • 处于探测恢复状态时,下一个请求访问成功。
熔断开启状态 (OPEN)处于熔断开启状态时,熔断器会一定的时间(规定的熔断时长)内,暂时切断所有请求对该资源的调用,并调用相应的降级逻辑使请求快速失败避免系统崩溃。满足以下任意条件,Sentinel 熔断器进入熔断开启状态:
  • 单位统计时长内请求数目大于设置的最小请求数目,且已达到熔断标准,例如请求超时比例、异常数、异常比例达到阈值。
  • 处于探测恢复状态时,下一个请求访问失败。
探测恢复状态(HALF-OPEN)处于探测恢复状态时,Sentinel 熔断器会允许一个请求调用资源。则若接下来的一个请求成功完成(没有错误)则结束熔断,熔断器进入熔断关闭(CLOSED)状态;否则会再次被熔断,熔断器进入熔断开启(OPEN)状态。在熔断开启一段时间(降级窗口时间或熔断时长,单位为 s)后,Sentinel 熔断器自动会进入探测恢复状态。

Sentinel 熔断规则属性

属性说明默认值使用范围
资源名规则的作用对象。-所有熔断策略
熔断策略Sentinel 支持3 中熔断策略:慢调用比例、异常比例、异常数策略。慢调用比例所有熔断策略
最大 RT请求的最大相应时间,请求的响应时间大于该值则统计为慢调用。-慢调用比例
熔断时长熔断开启状态持续的时间,超过该时间熔断器会切换为探测恢复状态(HALF-OPEN),单位为 s。-所有熔断策略
最小请求数熔断触发的最小请求数,请求数小于该值时即使异常比率超出阈值也不会熔断(1.7.0 引入)。5所有熔断策略
统计时长熔断触发需要统计的时长(单位为 ms),如 60*1000 代表分钟级(1.8.0 引入)。1000 ms所有熔断策略
比例阈值分为慢调用比例阈值和异常比例阈值,即慢调用或异常调用占所有请求的百分比,取值范围 [0.0,1.0]。-慢调用比例 、异常比例
异常数请求或调用发生的异常的数量。-异常数

3.3.5、通过Nacos配置规则

在这里插入图片描述

[
    {
        "resource": "tiger-test",
        "limitApp": "default",
        "grade": 1,
        "count": 5,
        "strategy": 0,
        "controlBehavior": 0,
        "clusterMode": false
    }
]

limitApp:来源应用;

  • 流控规则
    在这里插入图片描述
  • 熔断规则
    在这里插入图片描述
    (注:没有RT这个参数哈)
[
    {
        "resource": "user-userInfoList",
        "grade": 0,
        "limitApp": "default",
        "count":2000,
        "slowRatioThreshold": 0.6,
        "timeWindow": 60,
        "minRequestAmount": 5,
        "statIntervalMs":8000,
        "clusterMode": false
    }
]

工程配置读取nacos的限流规则(跟sentinel同级)

datasource:
  ds:
    nacos:
      server-addr: localhost:8848
      data-id: user-sentinel
      group-id: DEFAULT_GROUP
      rule-type: flow
/**
     * flow.
     */
    FLOW("flow", FlowRule.class),
    /**
     * degrade.
     */
    DEGRADE("degrade", DegradeRule.class),
    /**
     * param flow.
     */
    PARAM_FLOW("param-flow", ParamFlowRule.class),
    /**
     * system.
     */
    SYSTEM("system", SystemRule.class),
    /**
     * authority.
     */
    AUTHORITY("authority", AuthorityRule.class),

在这里插入图片描述
配置多个nacos配置文件

datasource:
  ds1:
    nacos:
      server-addr: localhost:8848
      data-id: user-sentinel-flow
      group-id: DEFAULT_GROUP
      rule-type: flow
  ds2:
    nacos:
      server-addr: localhost:8848
      data-id: user-sentinel-degrade
      group-id: DEFAULT_GROUP
      rule-type: degrade

4、Sentinel与Gateway的整合

4.1、添加依赖

<!--gateway整合sentinel-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
    <version>2021.0.4.0</version>
</dependency>
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
    <version>1.8.5</version>
</dependency>
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-spring-cloud-gateway-adapter</artifactId>
    <version>1.8.6</version>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    <version>2021.0.4.0</version>
</dependency>
sentinel:
  transport:
    # 配置Sentinel dashboard地址
    dashboard: localhost:8080
    # 默认8719端口,键入被占用会自动从8719+1,直到找到未被占用的端口
    port: 8719

4.2、详细配置

接下来对sentinel控制台中对gateway网关链路的流控配置项做详细的介绍,下图所示都是针对网关api附加的。
在这里插入图片描述
API类型
我们可以根据某个路由进行流控,也可以根据API分组进行流控,也就是请求访问地址来进行流控
首先创建API分组
在这里插入图片描述
选择API分组
在这里插入图片描述
然后在进行相应的流控规则。
针对请求属性
参数属性有五种:客户端ip、远程请求地址、请求头、请求url参数、Cookie
这里其实也就是对应的gateway中路由的匹配规则
在这里插入图片描述
匹配模式提供了三种:精确、子串、正则
子串匹配模式就是:我们指定127,它会自动再结尾加上%进行模糊匹配——127%
Client IP
在这里插入图片描述
测试
Remote Host
因为我们没有远程域名,所以这里就不进行测试了
在这里插入图片描述
Header
在这里插入图片描述
使用postman请求进行测试,如果请求头不为这个值就不会被限流
在这里插入图片描述
URL参数
在这里插入图片描述
测试
间隔
在这里插入图片描述
这个间隔的意思就是,以前1秒钟请求三次就会抛异常,而现在是两秒内请求三次才会抛异常,也就是说间隔从以前的一秒改变了。
Burst size
Burst size相当于是一个宽容次数,以前是1秒钟请求三次就会报异常,现在会宽容1次,也就是一秒钟请求大于三次才会抛异常
在这里插入图片描述
网关流控规则 GatewayFlowRule 的核心属性如下:
① resourceMode:规则是针对 API Gateway 的 route(RESOURCE_MODE_ROUTE_ID)还是用户在 Sentinel 中定义的 API 分组(RESOURCE_MODE_CUSTOM_API_NAME),默认是 route。
② resource:资源名称,可以是网关中的 route 名称或者用户自定义的 API 分组名称。
③ grade:限流指标维度,同限流规则的 grade 字段
④ count:限流阈值
⑤ intervalSec:统计时间窗口,单位是秒,默认是 1 秒
⑥ controlBehavior:流量整形的控制效果,目前支持快速失败和匀速排队两种模式,默认是快速失败。
⑦ burst:应对突发请求时额外允许的请求数目。
⑧ maxQueueingTimeoutMs:匀速排队模式下的最长排队时间,单位是毫秒,仅在匀速排队模式下生效。
⑨ paramItem:参数限流配置。若不提供,则代表不针对参数进行限流,该网关规则将会被转换成普通流控规则;否则会转换成热点规则。其中的字段:
parseStrategy:从请求中提取参数的策略,目前支持提取来源 IP(PARAM_PARSE_STRATEGY_CLIENT_IP)、Host(PARAM_PARSE_STRATEGY_HOST)、任意 Header(PARAM_PARSE_STRATEGY_HEADER)和任意 URL 参数(PARAM_PARSE_STRATEGY_URL_PARAM)四种模式。
fieldName:若提取策略选择 Header 模式或 URL 参数模式,则需要指定对应的 header 名称或 URL 参数名称。
pattern:参数值的匹配模式,只有匹配该模式的请求属性值会纳入统计和流控;若为空则统计该请求属性的所有值。
matchStrategy:参数值的匹配策略,目前支持精确匹配(PARAM_MATCH_STRATEGY_EXACT)、子串匹配(PARAM_MATCH_STRATEGY_CONTAINS)和正则匹配(PARAM_MATCH_STRATEGY_REGEX)。

降级规则
在这里插入图片描述
在这里插入图片描述
(resource、grade、count、slowRatioThreshold、timeWindow、minRequestAmount、statIntervalMs)
自定义异常返回结果:

sentinel:  
  scg:
    fallback:
      mode: response
      response-status: 200
      response-body: '{"code":"500","message": "系统忙,请稍候再试"}'

代码实现:

/**
 * 熔断、降级回调
 */
@Configuration
public class SentinelGatewayConfig {
    /**
     * 这里可以写降级逻辑
     */
    public SentinelGatewayConfig() {
        GatewayCallbackManager.setBlockHandler(new BlockRequestHandler() {
            // 网关限制了请求,就会调用此回调 Mono Flux
            @Override
            public Mono<ServerResponse> handleRequest(ServerWebExchange serverWebExchange, Throwable throwable) {
                ResponseDTO<Object> objectResponseDTO = new ResponseDTO<>();
                objectResponseDTO.setCode(500);
                objectResponseDTO.setMessage("系统异常,请稍候重试");
                String errJson = JSON.toJSONString(objectResponseDTO);
                Mono<ServerResponse> body = ServerResponse.ok().body(Mono.just(errJson), String.class);
                return body;
            }
        });
    }
}

将路由、限流、降级规则持久化到nacos配置中心

spring:
  application:
    name: drp-gateway-service
  profiles:
    #开发环境dev,测试环境test,生产环境prod
    active: dev
  jackson:
    time-zone: GMT+8
  cloud:
    loadbalancer:
      ribbon:
        enabled: false
    nacos:
      discovery:
        server-addr: localhost:8848  #Nacos server 的地址
      #路由配置
      config:
        server-addr: localhost:8848
        name: gateway-router
        namespace: public
        group: DEFAULT_GROUP
        #file-extension: json #指定yaml格式的配置
        refresh-enabled: true #支持刷新
    #限流熔断配置
    sentinel:
      transport:
        # 配置Sentinel dashboard地址
        dashboard: localhost:8080
        # 默认8719端口,键入被占用会自动从8719+1,直到找到未被占用的端口
        port: 8719
      datasource:
        ds:
          nacos:
            server-addr: localhost:8848
            data-id: user-sentinel
            group-id: DEFAULT_GROUP
            rule-type: flow

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++学习笔记之四(标准库、标准模板库、vector类)

C 1、C标准库2、C标准模板库2.1、vector2.1.1、vector与array2.1.2、vector与函数对象2.1.3、vector与迭代器2.1.4、vector与算法 1、C标准库 C C C标准库指的是标准程序库( S t a n d a r d Standard Standard L i b a r a y Libaray Libaray)&#xff0c;它定义了十个大类…

x3daudio1 7.dll丢失怎么修复?多种x3daudio1 7.dll修复方法对比

x3daudio1_7.dll是Windows操作系统中的一个动态链接库文件&#xff0c;它主要负责处理音频相关的功能。当这个文件缺失或损坏时&#xff0c;可能会导致一些音频播放问题&#xff0c;如无声、杂音等。那么&#xff0c;x3daudio1_7.dll缺失的原因是什么呢&#xff1f;又该如何修复…

Unity 粒子特效-第五集-烟雾缭绕合并特效

一、特效预览 二、制作原理 1.素材介绍 我们之前几章做了有光球&#xff0c;星星&#xff0c;烟雾 我们把他们结合起来&#xff0c;做一些调整 2.合并方法 我们还是建一个粒子游戏物体 我们把所有的效果取消 再重置一下transform 现在这个物体就是一个可以控制粒子特效的空…

钢琴培训答题服务预约小程序的效果怎样

很多家长都会从小培养孩子的兴趣&#xff0c;钢琴便是其中热度较高的一种&#xff0c;而各城市也不乏线下教育培训机构&#xff0c;除了青少年也有成年人参加培训&#xff0c;市场教育高需求下&#xff0c;需要商家不断拓展客户和转化。 那么通过【雨科】平台制作钢琴培训服务…

【LeetCode力扣】42. 接雨水

目录 1、题目介绍 2、解题思路 2.1、暴力破解法 2.2、双指针法 1、题目介绍 原题链接&#xff1a; 42. 接雨水 - 力扣&#xff08;LeetCode&#xff09; 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1]输出&#xff1a;6解释&#xff1a;上面是由…

七、W5100S/W5500+RP2040树莓派Pico<UDP 组播>

文章目录 1. 前言2. 相关简介2.1 简述2.2 优点2.3 应用 3. WIZnet以太网芯片4. UDP 组播回环测试4.1 程序流程图4.2 测试准备4.3 连接方式4.4 相关代码4.5 测试现象 5. 注意事项6. 相关链接 1. 前言 UDP组播是一种基于UDP协议的通信方式&#xff0c;它允许一台计算机通过发送单…

HEC-RAS 1D/2D水动力与水环境模拟技术

水动力与水环境模型的数值模拟是实现水资源规划、环境影响分析、防洪规划以及未来气候变化下预测和分析的主要手段。然而&#xff0c;一方面水动力和水环境模型的使用非常复杂&#xff0c;理论繁复&#xff1b;另一方面&#xff0c;免费的水动力和水环境软件往往缺少重要功能&a…

rcore 笔记 第一个裸机程序

文章目录 环境应用程序与基本执行环境应用程序执行环境与基本操作平台执行应用程序应用程序执行环境目标平台与目标三元组 移除标准库依赖移除 println! 宏提供 panic_handler 功能应对致命错误移除 main 函数 编译运行内核指令程序内存布局与编译流程 内核第一条指令编写内核第…

计算机毕业设计选题推荐-短文写作竞赛微信小程序/安卓APP-项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

操作系统的内存管理之虚拟空间

操作系统的内存管理&#xff0c;主要分为三个方面。 第一&#xff0c;物理内存的管理&#xff0c;相当于会议室管理员管理会议室。 第二&#xff0c;虚拟地址的管理&#xff0c;也即在项目组的视角&#xff0c;会议室的虚拟地址应该如何组织。 第三&#xff0c;虚拟地址和物…

瑞萨e2studio(28)----SPI 驱动WS2812灯珠

瑞萨e2studio.28--SPI 驱动WS2812灯珠 概述视频教学样品申请芯片级联方法数据传输时序新建工程软件准备保存工程路径芯片配置开始SPI配置SPI属性配置时钟配置SPI配置CPHA配置代码hal_entry.cws2812.cws2812.h 概述 本文介绍了如何使用瑞萨RA微控制器&#xff0c;结合E2STUDIO…

【深度学习实验】网络优化与正则化(二):基于自适应学习率的优化算法详解:Adagrad、Adadelta、RMSprop

文章目录 一、实验介绍二、实验环境1. 配置虚拟环境2. 库版本介绍 三、实验内容0. 导入必要的库1. 随机梯度下降SGD算法a. PyTorch中的SGD优化器b. 使用SGD优化器的前馈神经网络 2.随机梯度下降的改进方法a. 学习率调整b. 梯度估计修正 3. 梯度估计修正&#xff1a;动量法Momen…

Web - Servlet详解

目录 前言 一 . Servlet简介 1.1 动态资源和静态资源 1.2 Servlet简介 二 . Servlet开发流程 2.1 目标 2.2 开发过程 三 . Servlet注解方式配置 ​编辑 四 . servlet生命周期 4.1 生命周期简介 4.2 生命周期测试 4.3 生命周期总结 五 . servlet继承结构 5.1 ser…

Docker 运行swagger-editor实现在线接口文档维护与调试

文章目录 一、序二&#xff0c; Docker部署准备1. 编辑docker-compose.yml2. 新增启动、停止脚本3. 样例 swagger.yaml 三&#xff0c; 启动swagger-editor1. 使用说明2. 完整代码备份 一、序 因工作需要&#xff0c;需要搭建python运行环境&#xff0c;项目中python基于flask…

处理SAP资产折旧AFAB 过账报错:“科目 8019010100 要求一个成本会计分配”

会计在进行资产折旧AFAB时 报错如下所示&#xff1a; 原因分析&#xff1a; 折旧时没有把资产设置得成本中心带到过账凭证的成本中心字段中去。而资产中已经维护了成本中心了。 所以要在资产过账的科目分配中设置一下路径如下&#xff1a; 或者TCODE&#xff1a;ACSET科目设置这…

一文带你了解自动化测试是什么?

本章主要讲解自动化测试的含义、分类、项目使用&#xff0c;以及自动化测试工具的优势。 一、自动化测试概述 1、什么是自动化测试&#xff1f; 自动化测试是软件测试活动中的一个重要分支和组成部分。随着软件产业的不断发展&#xff0c;市场对软件周期的要求越来越高&…

R -- 体验 stringdist

文章目录 安装使用stringdist :返回列表example stringdistmatrix &#xff1a;返回矩阵example amatch & ain延伸&#xff1a;距离计算公式Hamming distanceLongest Common Substring distanceLevenshtein distance (weighted)The optimal string alignment distance dosa…

阿里云2核2G3M带宽轻量服务器87元一年,经济型e实例99元一年

2023阿里云双十一优惠活动2核2G3M轻量应用服务器一年优惠价87元&#xff0c;云服务器ECS经济型e实例优惠价格99元一年&#xff0c;也是2核2G配置&#xff0c;自带3M带宽&#xff0c;并且续费不涨价&#xff0c;阿里云百科aliyunbaike.com还是很建议大家选择e实例的&#xff0c;…

什么测试自动化测试?

什么测试自动化测试&#xff1f; 做测试好几年了&#xff0c;真正学习和实践自动化测试一年&#xff0c;自我感觉这一个年中收获许多。一直想动笔写一篇文章分享自动化测试实践中的一些经验。终于决定花点时间来做这件事儿。 首先理清自动化测试的概念&#xff0c;广义上来讲&a…

小说网站源码带管理后台手机端和采集

搭建教程&#xff0c;安装宝塔 php7.2&#xff0c;绑定域名&#xff0c;上传源码到根目录解压 源码获取请自行百度&#xff1a;一生相随博客 一生相随博客致力于分享全网优质资源&#xff0c;包括网站源码、游戏源码、主题模板、插件、电脑软件、手机软件、技术教程等等&#…