springcloud组件之二:hystrix(容错&Hystrix处理容错&Feign项目的监控&Hystrix Dashboard可视化监控&Turbine聚合监控)

二、Hystrix实现微服务的容错处理

1.容错简介

为何需要容错?

  • 网络请求超时
  • 微服务不可用
  • 微服务高负载

如何容错?

  • 超时重试
  • 熔断器
  • 限流

而通常我们说的限流指代的是限制到达系统的并发请求数,使得系统能够正常的处理部分用户的请求,来保证系统的稳定性。
限流不可避免的会造成用户的请求变慢或者被拒的情况,从而会影响用户体验。因此限流是需要在用户体验和系统稳定性之间做平衡的,即我们常说的 trade off。
对了,限流也称流控(流量控制)。


说明:熔断器打开 服务降级 不请求provider了,就限流了。
服务降级就是降到了fallback。

简单理解:

如上图,当Service A调用Service B,失败多次达到一定阀值,Service A不会再去调Service B,而会去执行本地的降级方法!
对于这么一套机制:在Spring cloud中结合Hystrix,将其称为熔断降级

更多详细讲解请参考: https://blog.csdn.net/JinXYan/article/details/90598216

2.容错模拟演示

启动server,启动consumer,不启动provider。访问consumer链接,请求出现报错。

3.Hystrix简介

容错管理工具
熔断器机制
Feign已经整合了Hystrix

4.使用Hystrix处理容错

4.1 consumer创建fallback类

熔断器打开 服务降级 不请求provider了,就限流了。
服务降级就是降到了fallback

4.2 配置熔断器hystrix,开启容错

feign:
  hystrix:
    enabled: true

注意:如上所说,feign组件的依赖已经包含了hystrix容错,所以不需要再次导包。

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
            <version>1.3.5.RELEASE</version>
</dependency>

4.3 编写fallback类,注入到spring容器,实现client接口。如下:

@Component
public class UserFallBack implements UserClient {
    @Override
    public String login() {
        return "超时请重试";
    }
}

4.4 在Client接口通过@FeignClient注解的fallback属性反射FallBack类:fallback = UserFallBack.class)

@FeignClient(name = "eureka-provider-demo",fallback = UserFallBack.class)
public interface UserClient {
    @RequestMapping(value = "/login")
    public String login();
}

4.5 启动类添加注解@EnableDiscoveryClient、@EnableFeignClients

4.6 测试
启动server,启动consumer,不启动provider。访问consumer链接。出现fallback类要return的内容,成功。

5.Feign项目的监控

5.1 consumer项目,添加容错可视化依赖 actuator执行器 和 hystrix熔断器

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix</artifactId>
            <version>1.3.5.RELEASE</version>
</dependency>

5.2 启动类添加容错监控注解:@EnableCircuitBreaker

5.3 重启consumer,访问IP+端口+hystrix.stream ,出现ping

访问IP+端口+接口URL:http://localhost:8082/login后,再次查看http://localhost:8082/hystrix.stream,出现数据:

6.Hystrix Dashboard可视化监控

(容错监控可视化界面)

问题描述:Hystrix的监控是以文字形式展现的,一堆json字符串,乱七八糟,不方便分析

解决方案:Hystrix Dashboard可视化监控

6.1 新建项目hystrix-dashboard,pom降版本为1.5.9,导依赖:springcloud、actuator执行器、hystrix熔断器、dashboard仪表盘

 <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Dalston.SR4</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix</artifactId>
            <version>1.3.5.RELEASE</version>
</dependency>

 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
            <version>1.3.5.RELEASE</version>
</dependency>

6.2 不需要编写配置文件,启动类不需要再添加其他注解。直接启动项目,访问访问Hystrix Dashboard主页地址 localhost:8080/hystrix (端口默认为8080,若冲突,可在配置文件自行添加端口配置)

6.3 在Hystrix Dashboard主页输入监控服务地址,点击Monitor Stream查看,再次请求consumer项目的URL http://localhost:8082/login,然后再次点击Monitor Stream查看可视化仪表盘界面。

7.Turbine聚合监控

问题描述:Hystrix的监控每次只能查看单个微服务的监控数据

解决方案:Turbine聚合监控

7.1 创建多套Consumer-Provider项目

复制写好的一套Consumer-Provider项目到不同的路径,然后打开。
更换Consumer-Provider项目的端口和spring-application-name,更换provider项目中Controller类的接口请求链接,和consumer项目中client类的接口请求链接。(这俩链接保持一致)
2套Consumer-Provider项目都启动起来。

7.2 创建hystrix-turbinet项目,pom降版本为1.5.9,导依赖:springcloud、actuator执行器、Eureka client、turbine

 <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Dalston.SR4</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
</dependencyManagement>

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.3.5.RELEASE</version>
</dependency>

 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-turbine</artifactId>
            <version>1.3.5.RELEASE</version>
</dependency>

7.3 启动类添加注解:@EnableDiscoveryClient、@EnableTurbine

7.4 编写配置文件

#从provider拿过来的配置
server:
  port: 8085
eureka:
  client:
    service-url:
      defaultZone: http://root:root@localhost:7776/eureka
  instance:
    lease-expiration-duration-in-seconds: 2
    lease-renewal-interval-in-seconds: 2
    instance-id: ${spring.cloud.client.ipAddress}:${server.port}
spring:
  application:
    name: hystrix-turbine
#服务都注册在了eureka中,通过turbine配置app-config都拿过来,整合到一个可视化界面中,进行了聚合监控。
turbine:
  cluster-name-expression: " 'default' "
  combine-host-port: true
  app-config: eureka-consumer-demo,eureka-consumertest-demo

7.5 启动hystrix-turbine项目

访问hystrix-turbine项目的IP+端口,2个consumer的数据都有

直接将hystrix-turbine的链接作为监控服务地址 放入刚才的Hystrix Dashboard主页,单击monitor,可见2个consumer都被成功监控到:

注意:如只显示了一个,检查client的的URL不能一致,检查fallback类中@FeignClient注解的name属性是否匹配。然后检查2个consumer是否可以成功访问到,若可以,再次查看hystrix-turbine可视化界面就不会有问题了。

8.关于容错的其他配置(properties文件)

#时间窗口内达到20个就进行服务降级 :设置了这个之后,是consumer要请求失败20次以上才能进入降级页面。
#(当在配置时间窗口内达到此数量的失败后,进行短路,默认20个)
hystrix.command.default.circuitBreaker.rquestVolumeThreshold=20
#时间窗口 服务降级后5s开始重试 (短路多久以后开始尝试是否恢复,默认5秒)
hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds=5
#出错百分比阈值: 错误率达到百分之50 就服务降级(开始短路)
hystrix.command.default.circuitBreaker.errorThresholdPercentage=50%

内容太多了 我做了模块内容分离,springcloud的5个组件:feign、hystrix、ribbon、zuul、config都有博文分别介绍,如有需要请查看:
springcloud组件之一:feign(client)

springcloud组件之二:hystrix(容错&Hystrix处理容错&Feign项目的监控&Hystrix Dashboard可视化监控&Turbine聚合监控)

springcloud组件之三:Ribbon(轮询和随机负载)

springcloud组件之四:Zuul(zuul网关&网关过滤器)

springcloud组件之五:Config实现分布式配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值