JAVA熔断和降级真实关系的图文详解

目录
  • 降级
  • 熔断
    • 什么是服务熔断
  • 熔断和降级的关系
  • 降级方式
  • 总结

刚开始我以为熔断和降级是一体的,以为他们必须配合使用; 只不过名字不一样而已,但是当我经过思考过后,发现他们其实不是一个东西;

降级

什么是服务降级呢?降级主要有以下几种情况

  • 超时:当下游的服务因为某种原因响应过慢,下游服务主动停掉一些不太重要的业务,释放出服务器资源,增加响应速度!
  • 不可用:当下游的服务因为某种原因不可用,上游主动调用本地的一些降级逻辑,避免卡顿,迅速返回给用户!
  • 限流:防止上游服务请求太多导致服务崩溃,所以限制请求的数量,来达到保护下游服务的目的,当请求的流量到达一定阈值时,直接拒绝多余的请求,执行降级逻辑

看到这,相信你已经看到了一个相同点,就是以上三者(超时、不可用、限流)触发时,都会走同一个逻辑,那就是降级逻辑,在hystrix里面叫做fallback;

熔断

什么是服务熔断

熔断很好理解,就是一个断开的过程;

熔断就像是家里的保险丝一样,当电流达到一定条件时,比如保险丝能承受的电流是5A,如果你的电流达到了6A,因为保险丝承受不了这么高的电流,保险丝就会融化,这时候电路就会断开,起到了保护电器的作用;

在微服务里面也是一样,当下游的服务因为某种原因突然变得不可用或响应过慢,上游服务为了保证自己整体服务的可用性,不再继续调用目标服务,直接返回,快速释放资源。如果目标服务情况好转则恢复调用;

熔断和降级的关系

说了那么多,其实也能想到了,降级和熔断其实就是服务安全中的2个不同的流程,在服务发生故障时,肯定是先断开(熔断)与服务的连接,然后在执行降级逻辑;

那既然不管怎样都会执行降级逻辑,这时候就可以理解为 降级是一种设计思想,在java层面就是一个接口,而熔断是降级的不同实现方式,他们的关系如下图:

降级方式

那么我们现在知道降级是一个接口了,接下来在看看他们的实现方式是怎样的吧

1、熔断降级(不可用)

熔断逻辑是这样的,A服务调用B服务,失败次数达到一定阈值后 ,A服务的断路器打开,就不在请求B服务,而是直接执行本地的fallback方法;这种叫做熔断降级,看到这里,也许你已经明白了,熔断只是降级的其中一种实现方式;

2、超时降级

同样是A服务调用B服务,B服务响应超过了A服务设定的阈值后,就会执行降级逻辑;

3、限流降级

同样是A服务调用B服务,服务A的连接已超过自身能承载的最大连接数,比如说A能承载的连接数为5,但是目前的并发有6个请求同时进行,前5请求能正常请求,最后一个会直接拒绝,执行fallback降级逻辑;

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • SpringCloud-Alibaba-Sentinel服务降级,热点限流,服务熔断

    前言: 除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一.一个服务常常会调用别的模块,可能是另外的一个远程服务.数据库,或者第三方 API 等.例如,支付的时候,可能需要远程调用银联提供的 API:查询某个商品的价格,可能需要进行数据库查询.然而,这个被依赖服务的稳定性是不能保证的.如果依赖的服务出现了不稳定的情况,请求的响应时间变长,那么调用服务的方法的响应时间也会变长,线程会产生堆积,最终可能耗尽业务自身的线程池,服务本身也变得不可用 熔断策略 Sentin

  • Java RPC框架熔断降级机制原理解析

    熔断与降级 为什么在RPC环节中有熔断以及降级的需求,详细的原因这里不多解释,从网上搜索一张图做示意. 熔断 我理解熔段主要解决如下几个问题: 当所依赖的对象不稳定时,能够起到快速失败的目的快速失败后,能够根据一定的算法动态试探所依赖对象是否恢复 比如产品详细页获取产品的好评总数时,由于后端服务异常导致客户端每次都需要等到超时.如果短时间内服务不能恢复,那么这段时间内的所有请求时间都将是最大的超时时间,这类消费时间又得不到正确结果的现象是不能容忍的.所以遇到这类情况,就需要根据一定的算法判定服务

  • Java看完秒懂版熔断和降级的关系

    目录 降级 熔断 什么是服务熔断 熔断和降级的关系 降级方式 1.熔断降级(不可用) 2.超时降级 3.限流降级 完 刚开始我以为熔断和降级是一体的,以为他们必须配合使用: 只不过名字不一样而已,但是当我经过思考过后,发现他们其实不是一个东西; 降级 什么是服务降级呢?降级主要有以下几种情况 超时:当下游的服务因为某种原因响应过慢,下游服务主动停掉一些不太重要的业务,释放出服务器资源,增加响应速度! 不可用:当下游的服务因为某种原因不可用,上游主动调用本地的一些降级逻辑,避免卡顿,迅速返回给用户

  • 如何利用HttpClientFactory实现简单的熔断降级

    前言 在2.1之后,有不少新东西,其中HttpClientFactory算是一个.HttpClientFactory涉及的东西也不算少,三四种clients , 请求中间件,与Polly的结合,生命周期等. Steeltoe的组件升级到2.1后,不少示例代码已经使用HttpClientFactory了.当然这是个题外话. 这里主要讲的是与Polly的结合,来完成简单的熔断降级.在这之前,还是先看看关于HttpClientFactory最简单的用法. HttpClientFactory的简单使用

  • JAVA熔断和降级真实关系的图文详解

    目录 降级 熔断 什么是服务熔断 熔断和降级的关系 降级方式 总结 刚开始我以为熔断和降级是一体的,以为他们必须配合使用: 只不过名字不一样而已,但是当我经过思考过后,发现他们其实不是一个东西; 降级 什么是服务降级呢?降级主要有以下几种情况 超时:当下游的服务因为某种原因响应过慢,下游服务主动停掉一些不太重要的业务,释放出服务器资源,增加响应速度! 不可用:当下游的服务因为某种原因不可用,上游主动调用本地的一些降级逻辑,避免卡顿,迅速返回给用户! 限流:防止上游服务请求太多导致服务崩溃,所以限

  • java环境变量的配置方法图文详解【win10环境为例】

    本文实例讲述了java环境变量的配置方法.分享给大家供大家参考,具体如下: 为什么要配置环境变量: 1. PATH环境变量(Window不区分大小写,Linux系统下必须大写). 作用是指定命令搜索路径 在CMD中执行命令时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序.我们需要把 jdk安装目录下的bin目录增加到现有的PATH变量中,bin目录中包含经常要用到的可执行文件如javac java javadoc等待,设置好 PATH变量后,就可以在任何目录下执行javac j

  • Java中左移和右移问题图文详解

    目录  1 原码.反码.补码 2 位移操作 3 补充操作符 总结  1 原码.反码.补码 原码:将十进制转化为二进制即原码: 反码:正数的反码与原码相同,负数的反码(除却最高位的符号位不变)与原码相反: 补码:正数的补码与原码相同,负数的补码(除却最高位的符号位不变)与原码的取反加一. 举例:5 和 -5 5: 原码:0 0000000 00000000 00000000 00000101 反码:0 0000000 00000000 00000000 00000101 补码:0 0000000

  • Java数据结构之优先级队列(堆)图文详解

    目录 一.堆的概念 二.向下调整 1.建初堆 2.建堆 三.优先级队列 1.什么是优先队列? 2.入队列 3.出队列 4.返回队首元素 5.堆的其他TopK问题 总结: 总结 一.堆的概念 堆的定义:n个元素的序列{k1 , k2 , … , kn}称之为堆,当且仅当满足以下条件时: (1)ki >= k2i 且 ki >= k(2i+1) ——大根堆 (2) ki <= k2i 且 ki <= k(2i+1) ——小根堆 简单来说: 堆是具有以下性质的完全二叉树:(1)每个结点的

  • Java中常用的日期类图文详解

    目录 前言 Date 为什么Date的大部分方法被弃用 注释 翻译 目前可用方法的测试示例 可用方法 示例 Date小结 Calendar 简单介绍 常用的方法 获取实例 获取日期里的信息 日期的加减与滚动 日期的设置 测试实例代码 DateFormat与SimpleDateFormat DateFormat 常用方法 测试实例 SimpleDateFormat 主要方法 测试示例 编写一个简单的日期工具类 工具类 测试示例 总结 前言 本文将分析Java中的Date.Calendar.Date

  • 在idea中将创建的java web项目部署到Tomcat中的过程图文详解

    在idea中将创建的java web项目部署到Tomcat中 采用的工具idea 2018.3.6 Tomcat7 1.先创建第一个新项目secondweb(注意勾选JavaEE下的web Application(4.0),窗口下的version对应为4.0,并且保证create web.xml已经被勾选) 2.在创建好的web项目的web/WEB-INF目录下创建两个文件夹:classes和lib.classes用来存放编译后输出的class文件,lib用来存放第三方jar包(下图显示的是创建

  • 使用Spring Boot搭建Java web项目及开发过程图文详解

    一.Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者.SpringMVC是非常伟大的框架,开源,发展迅速.优秀的设计必然会划分.解耦.所以,spring有很多子项目,比如core.context.

  • 图文详解Java的反射机制

    目录 1.什么是反射 2.Hello,java反射 3.java程序运行的三个阶段 4.反射相关类 5.反射的优化 6.Class类分析 7.获取Class对象的六种方式 8.类加载机制 动态加载和静态加载 类加载流程概述 加载阶段 连接阶段 初始化 9.通过反射获取类的结构信息 1.什么是反射 反射就是Reflection,Java的反射是指程序在运行期可以拿到一个对象的所有信息. 加载类后,在堆中就产生了一个class类型的对象,这个对象包含了类的完整结构的信息,通过这个对象得到类的结构.这

  • 图文详解Java中的序列化机制

    目录 概述 对象序列化和反序列化机制 修改默认的序列化机制 使用transient关键字 自定义readObject.writeObject方法 实现Externalizable接口 serialVersionUID的作用 使用序列化clone 概述 java中的序列化可能大家像我一样都停留在实现Serializable接口上,对于它里面的一些核心机制没有深入了解过.直到最近在项目中踩了一个坑,就是序列化对象添加一个字段以后,使用方系统报了反序列化失败,原因是我们双方的序列化对象没有加上seri

  • Java @Accessors注解图文详解

    目录 前言 1. @Accessors 源码 2. @Accessors 属性说明 2.1 fluent 属性 2.2 chain 属性 2.3 prefix 属性 总结 前言 在你的工作中,有时候可能会看到 @Accessors(chain = true)  这样的注解,他是 lombok 插件包中的一个注解,那么它是什么意思呢? 1. @Accessors 源码 我们打开 @Accessors 的源码可以看到: (1)该注解主要作用是:当属性字段在生成 getter 和 setter 方法时

随机推荐