spring boot +spring cloud + spring cloud alibaba入门搭建(四)整合服务熔断sentinel

本文介绍了在Spring Boot、Spring Cloud和Spring Cloud Alibaba环境下,如何通过Sentinel实现服务熔断和限流。通过调整服务线程池大小并使用JMeter进行压力测试,展示了在未使用Sentinel时服务可能出现的雪崩问题。Sentinel的引入显著提高了服务在高并发情况下的响应速度,实现了快速失败和防止阻塞,保证了其他接口的正常使用。

1.上一编我们学习的了fegin 的fallback ,兜底类,可以在服务超时或者不可用时,返回我们的兜底方法,但是如果有大量的持续的请求的时候,请求也不是超时的,能正常返回的,但是系统一下子处理不过来的时候,就会阻塞当前的服务了,这个场景如何测试呢?

2.修改could-user 的tomcat线程处理数量为10,默认为200

server:
  port: 8990
  tomcat:
    max-threads: 10

启动我们的服务

下载压测工具,jmeter,启动jmeter配置一个测试计划

用CMD执行我们的执行计划

jmeter -n -t testplan/cloudtest.jmx -l testplan/result/result.txt -e -o testplan/webreport

以上内容自行百度学习

启动后,我们打开浏览器或者postman 测试我们的其他接口,发现访问

http://localhost:8990/user/getUserInfo我们服务的其他接口时,起码要3S或者5S才返回结果,如果我们的服务不止两个服务呢,N个服务调用时,都这么久才返回就会导致服务雪崩。

这个时候就论到我们的sentinel 上场了,它可以做的事情有很多,我这里只简单介绍一下熔断和限流,其他更高阶的用法大家凭实力学习。

下载sentinel.jar 服务jar包,类似nacos ,有服务端的,下载地址https://github.com/alibaba/Sentinel/releases

启动sentinel.jar,

java -jar sentinel.jar,

在我们的cloud-user的pom.xml引入sentinel

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

在配置文件假如sentinel 配置

spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config:
        server-addr: localhost:8848
        file-extension: yaml
    sentinel:
      transport:
        dashboard: localhost:8080
        port: 8719
  application:
    name: user

feign:
  hystrix:
    enabled: true

###设置feign客户端超时时间
###SpringCloud feign 默认开启支持ribbon
ribbon:
  ###指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间。
  ReadTimeout: 5000
  ###指的是建立连接后从服务器读取到可用资源所用的时间。
  ConnectTimeout: 5000
  ###当前实例的重试次数
  MaxAutoRetries: 2
  ###切换实例的最大次数
  MaxAutoRetriesNextServer: 1

hystrix:
  command:
    default:
      execution:
        timeout:
          enable: true
        isolation:
          strategy: SEMAPHORE
          thread:
            ###断路器的超时时间一定要配置,不然只要sleep 1秒就都超时了,
            ###而且要比ribbon 的重试次数*时间 大
            timeoutInMilliseconds: 20000




启动我们的服务,再打开sentinel 的控制台,配置限流

这个时候我们可以去浏览器快速请求几次看看,能看到会返回

Blocked by Sentinel (flow limiting)

这个就是限流的效果。

再次执行之前的jmeter测试计划,

之前没配sentinel 的时候我们看到我们的请求成功率是百分百的,但是需要很长的时间才执行完,

配置了sentinel 后,我们发现,成功率不高,但是当我们再去访问我们的服务其他的接口时, 发现我们的接口是秒级返回的,所以说,加了熔断器,请求不在阻塞在那里,直接快速失败,不影响其他接口使用,这个应该就是熔断了。

 

下一编,将讲gateway,网关

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值