SpringCloud - Hystrix(三)

简介: SpringCloud - Hystrix(三)

Hystrix 服务熔断

image.pngimage.png


容错机制: 微服务和分布式里面,容错是必须要考虑的!通常的做法有两种

一种是重试机制,对于预期的短暂故障问题,可以重试解决;

二是使用断路器模式,即将受保护的服务封装到一个可以监控故障的断路器里面,当故障达到一定的值,断路器将会跳闸,断路器对象返回错误!

断路器状态机: 1.closed,熔断器关闭状态,调用失败次数累计到一定阈值/比例,启动熔断机制,进入打开状态 2.open,熔断器打开状态,对服务直接返回错误,直接服务降级 3.half open,熔断器打开状态达到了一定的时间,会进入半熔断状态,允许定量的服务请求主逻辑。如果都调用成功,或者一定比例成功,则认为恢复,关闭熔断器;否则,熔断器回到打开状态



断路器模式设计状态机(三种状态)

Closed(熔断器的关闭状态):熔断器关闭状态,调用失败次数累计到一定阈值/比例,启动熔断机制,进入打开状态

Open(熔断器打开状态):熔断器打开状态,对服务直接返回错误,直接服务降级

Half Open(熔断器半熔断状态):熔断器打开状态达到了一定的时间,会进入半熔断状态,允许定量的服务请求主逻辑。如果都调用成功,或者一定比例成功,则认为恢复,关闭熔断器;否则,熔断器回到打开状态


原理:调用失败次数累计达到一定的阈值或比例,就会启动熔断机制,熔断器处于打开状态,此时对服务都直接返回错误;但设计了一个时钟选项,默认设置了一个时间段——休眠时间窗[可修改],过了这段时间,会进入半熔断状态,即允许定量的服务请求(尝试熔断请求命令)。如果调用都成功,或成功次数达到一定比例,则会认为恢复了,会关闭熔断器!否则认为还没好,又回到熔断器打开状态。


image.png


  • sleepWindowInMilliseconds:休眠时间窗口
  • requestVolumeThreshold:最小的请求数
  • errorThresholdPercentage:服务错误百分比(比如百分之70,就是10个请求,有7个错误)

Product 微服务项目


@PostMapping("/listForOrder")
public List<ProductInfoOutput> listForOrder(@RequestBody List<String> productIdList) {
    try {
        Thread.sleep(2000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    return productService.findList(productIdList);
}

Order 微服务项目

package com.imooc.order.controller;
import com.netflix.hystrix.contrib.javanica.annotation.DefaultProperties;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import java.util.Arrays;
@RestController
@DefaultProperties(defaultFallback = "defaultFallback")
public class HystrixController {
  @HystrixCommand(commandProperties = {
      @HystrixProperty(name = "circuitBreaker.enabled", value = "true"),          //设置熔断
      @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "10"), // 请求数达到后才计算
      @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", value = "10000"), // 熔断时间
      @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value = "60"), // 错误率
  })
  @GetMapping("/getProductInfoList")
  public String getProductInfoList(@RequestParam("number") Integer number) {
    if (number % 2 == 0) {
      return "success";
    }
    RestTemplate restTemplate = new RestTemplate();
    return restTemplate.postForObject("http://127.0.0.1:8005/product/listForOrder",
        Arrays.asList("157875196366160022"),
        String.class);
  }
  private String defaultFallback() {
    return "默认提示:太拥挤了, 请稍后再试~~";
  }
}
  • 此时默认 1s(为了达到降级效果),这里模拟了一个奇数偶数判断是为了模拟熔断的场景。
目录
相关文章
|
3月前
|
监控 负载均衡 Java
深入理解Spring Cloud中的服务网关
深入理解Spring Cloud中的服务网关
|
3月前
|
Java 开发工具 git
实现基于Spring Cloud的配置中心
实现基于Spring Cloud的配置中心
|
3月前
|
设计模式 监控 Java
解析Spring Cloud中的断路器模式原理
解析Spring Cloud中的断路器模式原理
|
23天前
|
XML 监控 Java
Spring Cloud全解析:熔断之Hystrix简介
Hystrix 是由 Netflix 开源的延迟和容错库,用于提高分布式系统的弹性。它通过断路器模式、资源隔离、服务降级及限流等机制防止服务雪崩。Hystrix 基于命令模式,通过 `HystrixCommand` 封装对外部依赖的调用逻辑。断路器能在依赖服务故障时快速返回备选响应,避免长时间等待。此外,Hystrix 还提供了监控功能,能够实时监控运行指标和配置变化。依赖管理方面,可通过 `@EnableHystrix` 启用 Hystrix 支持,并配置全局或局部的降级策略。结合 Feign 可实现客户端的服务降级。
101 23
|
8天前
|
Java 对象存储 开发者
故障隔离与容错处理:Hystrix在Spring Cloud和Netflix OSS中的应用
故障隔离与容错处理:Hystrix在Spring Cloud和Netflix OSS中的应用
25 3
|
3月前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
Spring Cloud Alibaba 发布了 Scheduling 任务调度模块 [#3732]提供了一套开源、轻量级、高可用的定时任务解决方案,帮助您快速开发微服务体系下的分布式定时任务。
14657 24
|
3月前
|
负载均衡 Java Spring
Spring cloud gateway 如何在路由时进行负载均衡
Spring cloud gateway 如何在路由时进行负载均衡
321 15
|
3月前
|
Java Spring
spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
68 3
|
3月前
|
消息中间件 Java 开发者
Spring Cloud微服务框架:构建高可用、分布式系统的现代架构
Spring Cloud是一个开源的微服务框架,旨在帮助开发者快速构建在分布式系统环境中运行的服务。它提供了一系列工具,用于在分布式系统中配置、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态等领域的支持。
152 5
下一篇
无影云桌面