如果服务提供者响应非常缓慢,那么消费者对提供者的请求就会被强制等待,直接提供者响应或超时。在高负载场景下,如果不做任何处理,此类问题可能会导致服务消费者的资源耗竭甚至整个系统的崩溃。这时,就需要进行容错处理
 
雪崩效应:
        ”基础服务故障“导致”级联故障“的现象称为雪崩效应。雪崩效应描述的是提供者不可用导致消费者不可能,并将不可用逐渐放大的过程。
        如图,A作为服务提供者,B为A的服务消费者,C和D是B的服务消费者。当A不可用引起了B的不可用,并将不可用像滚雪球一样放大到C和D时,雪崩效应就           形成了。
        
 
 
如何容错:
        为网络请求设置超时
                正常情况下,一个远程调用一般在几十毫秒内就能得到响应了。如果依赖的服务不可用或网络有问题,那么响应时间就会变得很长
                通常情况下,一次远程调用对应着一个线程/进程。如果相应太慢,这个线程/进程就得不到释放。而线程有对应着系统资源,如果得不到释放的线程越积越多,资源就会逐渐被耗尽,最终导致服务的不可用
        使用断路器模式
                如果对某个微服务的请求有大量超时,再去让新的请求访问该服务已经没有任何意义,只会消耗资源。
                断路器可理解为对容易导致错误的操作的代理。这种代理能统计一段时间内调用失败的次数,并决定是正常请求依赖的服务还是直接返回
 
断路器状态转换图:
        正常情况下,断路器关闭,可正常请求依赖的服务
        当一段时间内,请求失败率达到一定阀值,断路器就会打开,同时不会再去请求依赖的服务
        断路器打开一段时间后,会自动进入半开状态。此时断路器可允许一个请求访问依赖的服务。如果该请求能够调用成功,则关闭断路器;否则继续保持打开状态
 
HsysTrix实现容错:
        Hystrix时由Netflix开源的一个延迟和容错库,用于隔离访问远程系统、服务或第三方库,防止级联失败,从而提升系统的可用性与容错性。Hystrix主要通过以下几点实现延迟和容错
                包裹请求:使用HystrixCommand(或HystrixObservableCommand)包裹对依赖的调用逻辑,每个命令在单独线程中执行。(命令模式)
                跳闸机制:当某服务的错误率超过一定阀值时,Hystrix可以自动或手动跳闸,停止请求该服务一段时间
                资源隔离:Hystrix为每个依赖都维护了一个小型的线程池。如果该线程池已满,发往该依赖的请求就被立即拒绝,而不是排队等候,从而加速失败判定
                监控:Hystrix可以近乎实时地监控运行指标和配置的变化,例如成功、失败、超时以及被拒绝的请求等
                回退机制:当请求失败、超时、被拒绝或断路器打开时,执行回退逻辑。回退逻辑由开发人员自行提供
                自我修复:断路器打开一段事件后,会自动进入”半开“状态。
 
Hystrix断路器状态监控:
        访问http://localhost:8080/health 获得Hystrix状态
        如果执行了回退逻辑,但Hystrix的状态依然是UP,是因为失败率还没有达到阀值(默认5秒内20次失败)
 
execution.isolation.strategy指定隔离策略
Hystrix隔离策略:
        THREAD(线程隔离):HystrixCommand将会在单独的线程上执行,并发请求受线程池中的线程数量的限制
        SEMAPHORE(信号量隔离):HystrixCommand将会在调用线程上执行,开销相对较小,并发请求接受到信号量个数的限制
Hystrix默认并推荐使用线程隔离,因为这种方式有一个除网络超时以外的额外保护层。
一般来说,只有当调用负载非常高时才会需要使用信号量隔离,因为这种场景下使用THREAD开销会比较高。信号量隔离一半仅适用于非网络调用的隔离
如果发生找不到上下文的运行时异常,可以将隔离策略设置为SEMAPHORE,如使用注解@HystrixCommand(fallbackMethod = "testService", commandPropperties = {@HystrixProperty(name = "execution.isolation.strategy", value = "SEMAPHORE")})

Hystrix容错处理的更多相关文章

  1. (四)Hystrix容错保护

    Feign默认是整合了Ribbon和Hystrix这两个框架,所以代码我们在上一篇的基础上进行修改,启动Eureka,service-hello,Feign 所谓的熔断机制和日常生活中见到电路保险丝是 ...

  2. SpringCloud之Hystrix容错保护原理及配置

    1 什么是灾难性雪崩效应? 如下图的过程所示,灾难性雪崩形成原因就大致如此: 造成灾难性雪崩效应的原因,可以简单归结为下述三种: 服务提供者不可用.如:硬件故障.程序BUG.缓存击穿.并发请求量过大等 ...

  3. Hystrix (容错,回退,降级,缓存)

    Hystrix熔断机制就像家里的保险丝一样,若同时使用高功率的电器,就会烧坏电路,这时候保险丝自动断开就有效的保护了电路.而我们程序中也同样是这样.例如若此时数据库压力太大速度很慢,此时还有不断的请求 ...

  4. Hystrix 容错处理

    目录 雪崩效应 容错的基本思想 什么是Hystrix 简单使用 消费端使用Hystrix 注解开启 改造消费方法 @HystrixCommand 详细配置 Hystrix线程隔离策略与传播上下文 Hy ...

  5. SpringCloud学习笔记(4):Hystrix容错机制

    简介 在微服务架构中,微服务之间的依赖关系错综复杂,难免的某些服务会出现故障,导致服务调用方出现远程调度的线程阻塞.在高负载的场景下,如果不做任何处理,可能会引起级联故障,导致服务调用方的资源耗尽甚至 ...

  6. Spring Cloud08: Hystrix 容错机制与数据监控

    一.概述 容错机制是指的是在一个分布式系统中,每个微服务之间是相互调用的,并且他们之间相互依赖,而实际的运行情况中,可能会因为各种原因导致某个微服务不可用,那么依赖于这个微服务的其他微服务就可能出现响 ...

  7. SpringCloud Alibaba实战(9:Hystrix容错保护)

    源码地址:https://gitee.com/fighter3/eshop-project.git 持续更新中-- 在上一节我们已经使用OpenFeign完成了服务间的调用.想一下,假如我们一个服务链 ...

  8. Spring Cloud入门教程-Hystrix断路器实现容错和降级

    简介 Spring cloud提供了Hystrix容错库用以在服务不可用时,对配置了断路器的方法实行降级策略,临时调用备用方法.这篇文章将创建一个产品微服务,注册到eureka服务注册中心,然后我们使 ...

  9. 【Dalston】【第四章】容错保护(Hystrix)

    我们在实践微服务架构时,通常会将业务拆分成一个个微服务,微服务之间通过网络进行通信,进行互相调用,造成了微服务之间存在依赖关系.我们知道由于网络原因或者自身的原因,服务并不能保证服务的100%可用,如 ...

随机推荐

  1. Elasticsearch(Transport Client)常用操作

    这里描述操作elasticsearch采用TransportClient这种方式,官方明确表示在ES 7.0版本中将弃用TransportClient客户端,且在8.0版本中完全移除它. 记录一些常用 ...

  2. Southeastern European Regional Programming Contest 2019

    easy: I medium-easy: BDEGJ medium: F medium-hard: A A. B. 按 x 排序,\(dp[i][j][k]\) 表示考虑前 \(i\) 个物品,lev ...

  3. HDU 2874 /// tarjan离线求森林里两点的距离

    题目大意: 在一个森林里 询问 u v 两点 若不能到达输出 "Not connected" 否则输出两点距离 https://blog.csdn.net/keyboarderqq ...

  4. FlyMcu下载时的问题

    引用:http://www.openedv.com/forum.php?mod=viewthread&tid=69398&page=1#pid396135 和楼下李智鹏用普中科技的ST ...

  5. springcloud(十六):服务网关 zuul 快速入门

    服务网关是微服务架构中一个不可或缺的部分.通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由.均衡负载功能之外,它还具备了权限控制等功能.Spring Cloud Netflix中 ...

  6. 手动从零使用ELK构建一套搜索服务

    前言 这两天需要对接一个新的搜索业务,由于测试机器还没到位,所以就自己创造条件,通过在Windows上安装VM虚拟机,模拟整套环境,从而能快速进入核心业务的开发测试状态中. 系统环境安装配置 虚拟机V ...

  7. Django 前后端数据传输、ajax、分页器

    返回ORM目录 Django ORM 内容目录: 一.MTV与MVC模式 二.多对多表三种创建方式 三.前后端传输数据 四.Ajax ​ 五.批量插入数据 六.自定义分页器 一.MTV与MVC模式 M ...

  8. JS函数 函数调用 函数定义好后,是不能自动执行的,需要调用它,直接在需要的位置写函数名。

    函数调用 函数定义好后,是不能自动执行的,需要调用它,直接在需要的位置写函数名. 第一种情况:在<script>标签内调用. <script type="text/java ...

  9. linux 服务器安装php5.6

    查看原有的php版本:php -v 如果已经装了低版本的php,为了避免冲突,查看: yum list installed | grep php 删除:自行百度吧.可能不能一次性全部删除,只能一个一个 ...

  10. Android开发 navigation入门详解

    前言 Google 在2018年推出了 Android Jetpack,在Jetpack里有一种管理fragment的新架构模式,那就是navigation. 字面意思是导航,但是除了做APP引导页面 ...