springCloudAlibaba

本文介绍了Spring Cloud Alibaba的两大核心组件——Nacos和Sentinel。Nacos作为服务注册与配置中心,详细讲解了依赖引入、配置文件修改及数据模型。而Sentinel作为流量防护工具,阐述了其流量规则和降级规则的设置,帮助提升服务的稳定性和流量控制。
摘要由CSDN通过智能技术生成

第二代 Spring Cloud 核心组件

  • Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
  • Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

一 Nacos服务注册、配置中心

1.1 引入依赖

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--SCA -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

1.2 服务方依赖变更

  • 如果存在eureka-client依赖,要剔除。增加nacos客户端依赖。
<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

1.3 服务方修改配置文件

Spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848 #nacos server 地址
  • 防控控制台:http://127.0.0.1:8848/nacos/index.html
  • 保护阈值:多数不可用,达到保护阈值、全部提供给消费者、防止服务整体雪崩。

1.4 Nacos 数据模型(领域模型)

  • Namespace + Group + Service :锁定服务
  • Namespace + Group + DataId :锁定配置文件

1.5 微服务中开启 Nacos 配置管理

  • 引入依赖
<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
  • 通过 Namespace + Group + dataId 来锁定配置文件,Namespace不指定就默认public,Group不 指定就默认 DEFAULT_GROUP

  • dataid完整格式:

${prefix}-${spring.profile.active}.${file-extension}
  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix 来配置。
  • spring.profile.active 即为当前环境对应的 profile
  • file-exetension 为配置内容的数据格式。
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848 #nacos server 地址
        file-extension: yaml
        # 加载多个dataId配置文件
        ext-config[0]: 
        data-id: page1.yaml
        refresh: true #开启扩展dataId的动态刷新

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

  • jar包运行

  • 引入依赖

<!--sentinel 核心环境 依赖-->
<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
  • 暴露端点、删除原有的hystrix配置,删除 原有OpenFeign的降级配置
Spring:
  #解决bean重复注册问题
  main:
    allow-bean-definition-overriding: true
  cloud:
    nacos:
    sentinel:
      transport:
        dashboard: 127.0.0.1:8080
        port: 8719
  • 上述配置之后,启动静态化微服务,使用 Sentinel 监控静态化微服务

2.1 Sentinel 流量规则模块

  • 资源名:默认请求路径

  • 针对来源:Sentinel可以针对调用者进行限流,填写微服务名称,默认default(不区分来源)

  • 阈值类型/单机阈值:

    • QPS:(每秒钟请求数量)当调用该资源的QPS达到阈值时进行限流
    • 线程数:当调用该资源的线程数达到阈值的时候进行限流。
  • 是否集群:是否集群限流

  • 流控模式:

    • 直接:资源调用达到限流条件时,直接限流

    • 关联:关联的资源调用达到阈值时候限流自己 (A调B,B快顶不住了,A限流)

    • 链路:只记录指定链路上的流量(调用链:A–>B–C,D–>E–>C;指定从B来的计算流量)

  • 流控效果:

    • 快速失败:直接失败,抛出异常

    • Warm Up预热:根据冷加载因子(默认3)的值,从阈值/冷加载因子,经过预热时长,才达到设置的 QPS阈值 排队等待:匀速排队,让请求匀速通过,阈值类型必须设置为QPS,否则无效。

      请求开启,10S内的阈值为3,10S后恢复到10(缓存)

    • 流控效果之排队等待:很多流量过来了,并不是直接拒绝请求,而是请求进行排队,一个一个匀速通过(处理),请求能 等就等着被处理,不能等(等待时间>超时时间)就会被拒绝。

      例如,QPS 配置为 5,则代表请求每 200 ms 才能通过一个,多出的请求将排队等待通过。超时时 间代表最大排队时间,超出最大排队时间的请求将会直接被拒绝。排队等待模式下,QPS 设置值不要超 过 1000(请求间隔 1 ms)。

2.2 Sentinel 降级规则模块

  • Sentinel不会像Hystrix那样放过一个请求尝试自我修复,就是明明确确按照时间窗口来,熔断触发 后,时间窗口内拒绝请求,时间窗口后就恢复。

RT(平均响应时间 )
  • 当 1s 内持续进入 >=5 个请求,平均响应时间超过阈值(以 ms 为单位),那么在接下的时间 窗口(以 s 为单位)之内,对这个方法的调用都会自动地熔断(抛出 DegradeException)。注意 Sentinel 默认统计的 RT 上限是 4900 ms,超出此阈值的都会算作 4900 ms,若需要变更此上限可 以通过启动配置项 -Dcsp.sentinel.statistic.max.rt=xxx 来配置。

异常比例:
  • 当资源的每秒请求量 >= 5,并且每秒异常总数占通过量的比值超过阈值之后,资源进入降级状态, 即在接下的时间窗口(以 s 为单位)之内,对这个方法的调用都会自动地返回。异常比率的阈值范围是 [0.0, 1.0] ,代表 0% - 100%。

异常数:
  • 当资源近 1 分钟的异常数目超过阈值之后会进行熔断。注意由于统计时间窗口是分钟级别的,若 timeWindow 小于 60s,则结束熔断状态后仍可能再进入熔断状态,时间窗口 >= 60s。

阈值范围是 [0.0, 1.0] ,代表 0% - 100%。

异常数:
  • 当资源近 1 分钟的异常数目超过阈值之后会进行熔断。注意由于统计时间窗口是分钟级别的,若 timeWindow 小于 60s,则结束熔断状态后仍可能再进入熔断状态,时间窗口 >= 60s。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值