2021-12(java-springcloud学习笔记四Hystrix:服务熔断、服务降级)

目录

一、服务熔断概述

1.雪崩效应

2.Hystrix

3.服务熔断

4.使用

二、服务降级


一、服务熔断概述

1.雪崩效应

分布式系统环境下,服务间类似依赖非常常见,一个业务调用通常依赖多个基础服务。如下图,对于同步调用,当库存服务不可用时,商品服务请求线程被阻塞,当有大批量请求调用库存服务时,最终可能导致整个商品服务资源耗尽,无法继续对外提供服务。并且这种不可用可能沿请求调用链向上传递,这种现象被称为雪崩效应。

2.Hystrix

通过断路监控,处理一些无法处理的异常

  • 提供保护并控制通过第三方客户端库(通常是通过网络)访问的依赖项的延迟和失败。

  • 停止复杂的分布式系统中的级联故障。

  • 快速失败,迅速恢复。

  • 回退并在可能的情况下正常降级。

  • 启用近乎实时的监视,警报和操作控制。

3.服务熔断

熔断机制是应对雪崩效应的一种微服务保护机制

4.使用

1.导入依赖

<!-- hystrix -->
	<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-hystrix -->
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-hystrix</artifactId>
		<version>1.4.7.RELEASE</version>
	</dependency>

2.修改yaml文件

eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka/
  instance:
    instance-id: spring-provider

3.编写controller层

@RestController
public class DeptController {
    @Autowired
    private DeptService deptService;
    @GetMapping("/queryDeptById/{id}")
    // 这个注解就是开始熔断机制,fallbackMethod 后的值就是下面备选方法的方法名
    @HystrixCommand(fallbackMethod = "hystrixQueryDeptById")
    public Dept queryDeptById(@PathVariable("id") Long id){
        Dept dept = deptService.queryDeptById(id);

        //处理异常
        if (dept == null) {
            throw new RuntimeException("id =>【" + id + "】 无法获取改用户,或不存在!");
        }
        return dept;
    }
    public Dept hystrixQueryDeptById(@PathVariable("id") Long id){
        return new Dept(id,"【Hystrix】id =>【" + id + "】 无法获取改用户,或不存在!");
    }
}

4.主类上添加注解

//对熔断的支持

@EnableCircuitBreaker


二、服务降级

  • 根据实际业务情况以及流量,对一些服务喝页面有策略的不处理或换简单的方式处理,从而释放服务器资源以保证核心服务正常运作或高效运作
  • 使用场景:
    • 当负载超过了预设的阀值或流量超出预计,保证重要的服务能正常运行,将不紧急,不重要的服务延迟使用或暂停使用
  • 核心设计
    • 服务降级-分布式开关
    • 超时降级:设定超时重试次数和机制,使用异步机制探测恢复情况
    • 失败次数降级:一些不稳定的API,当失败次数达到一定阀值,自动降级,使用异步机制探测回复情况
    • 故障降级:调用的远程服务挂掉(网络故障,DNS故障,Http服务返回错误的状态码和RPC服务抛出异常)可以直接降级
    • 限流降级:触发了限流超额,可以使用暂时屏蔽的方式来进行短暂的屏蔽
       

操作:实现FallbackFactory接口

修改FeignClient增加服务降级功能fallbackFactory

开启服务降级

@Component
public class DeptConsumerFallbackFactory implements FallbackFactory {
    @Override
    public FeignService create(Throwable throwable) {
        return new FeignService() {
            @Override
            public String test() {
                return "FallbackFactory ==================test";
            }

            @Override
            public String Test(int id) {
                return "FallbackFactory ==================Test "+id;
            }
        };
    }
}
@Component
@FeignClient(value = "PROVIDER-8001" ,fallbackFactory = DeptConsumerFallbackFactory.class)
public interface FeignService {

    @RequestMapping(method = RequestMethod.GET ,value = "/test")
    String test();

    @RequestMapping(method = RequestMethod.GET ,value = "/hystrix/{id}")
    String Test(@PathVariable(value = "id")int  id);
}

FeignClient加入实现服务降级注入的bean

feign.hystrix.enabled=true
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud Hystrix是一个开源的熔断器框架,它能够帮助开发者有效地处理服务依赖中的延迟和故障。熔断器的主要目的是在出现故障时提供一种优雅的降级机制,以避免整个系统的崩溃。 熔断降级Hystrix中两个重要的概念。 熔断(Circuit Breaker)指的是在服务出现故障或错误率过高时,自动地切换到指定的备用服务或返回事先定义好的错误结果,起到保护系统免受故障传播的影响的作用。当服务不可用或响应时间过长时,熔断器会打开,拒绝后续请求的访问,并尝试通过执行降级逻辑来快速响应客户端。一旦后续请求不再出现故障,熔断器将会进入半开状态,允许少量的请求通过以检测服务是否恢复正常。 降级(Degradation)指的是在系统资源不足或者高访问量时,服务降级会关闭一些不重要的功能,以保证系统核心功能的可用性和稳定性。降级可以通过阻止非必要的调用、减少资源的消耗以及返回默认值或缓存结果来实现。降级需要提前定义好一些备用的逻辑,一旦系统资源紧张,就可以立即启用降级逻辑来保障系统的可用性。 总而言之,熔断降级都是为了保护系统免受故障的影响。熔断主要是针对服务故障和错误率过高的情况,通过切换到备用服务或返回错误结果来保护系统。降级主要是在系统资源紧张或高访问量的情况下,关闭一些不重要的功能来保证核心功能的可用性和稳定性。两者都是通过提前定义备用逻辑来保障系统的正常运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值