当前位置: 首页 > 网络应用技术

Hystrix详细说明

时间:2023-03-08 00:07:40 网络应用技术

  在微服务中,服务和服务之间经常发生两个不确定的因素:

  延迟微服务是一个非常重要的性能指标。随着服务的增加,呼叫链变得越来越复杂。目前,低延迟通常是微服务系统体系结构中的主要目标;这不允许出现。此外,服务内部服务中可能发生未知的异常。目前,如果未正确处理异常,它将沿着呼叫链抛弃。在时间时,上层召唤者不知道如何处理未知的异常。

  对于服务异常,我们应该在系统体系结构期间符合维加斯规则:微服务中发生的事情,留在微服务中。在外行的条款中,微服务的异常必须由自己处理,并且不应将其他微服务返回给任何其他信息。比非相互作用的交互数据包。

  关于网络延迟,这是不可避免的。在CAP理论中,网络分区在过度的分布式体系结构中是不可避免的,并且用于可能。因此,我们只能在网络延迟可能发生的地方解决,超时设置,超时,超时,超时,超时,超时,暂停之后,我们可以做到。复制处理和其他操作。

  Hystrix用于解决上述两个问题。(请注意,它不允许错误或延迟网络。它只是提供备份行为和自由主义者,可用于优雅的处理错误和网络延迟。)工作原理非常简单和受保护。方法可以在给定的失败阈值方法中设置失败阈值和失败(异常/延迟)。通过调用预先准备的备份方法返回预先准备的数据消息(基本上是通过切割表面实现的)。HyStrix具有三个封闭,开放和半开放的状态。

  HyStrix主要用于网络延迟的方案,因此其使用方案也是那些容易发生网络延迟的方法,例如:

  HyStrix用于微服务,因此在使用HyStrix之前,您需要准备一个简单的微服务环境来指定Spring Cloud版本和Spring Boot版本。此外,Web依赖性用于模拟Micro -Service调用。

  HyStrix依赖性导入

  配置服务启动端口

  启动课程添加@enableHystrix注释

  方法一:

  编写使用Hystrix保护的方法。这是一种使用@HyStrixCommand注释要受HyStrix保护的方法,并指定后备属性的值为后备。后备是一种早期预设方法。此方法与受保护方法的返回值一致。打开断路器时在断路器上向上返回。在演示方法中,我直接抛出了一个RuntimeException,这使模拟服务调用失败。

  为了启动对休息界面的请求,无论请求多少次都会收到Hello World!返回值。

  方法两个:

  除上述方法直接指定储备金方法外,还可以使用另一种方法来直接在控制器类上定义默认储备方法。通过这种方式,需要保护整个控制器。

  除了Hystrix的未知异常外,还可以优雅地处理未知异常,另一个能力是执行延迟处理。@HyStrixCommand注释设置了1次超时。如果未在1秒内返回该方法,则将执行预设方法。1秒的超时时间不一定符合所有业务方案,或者某些方法未在刚度中解决。关于这些需求,HyStrix提供相应的配置项目。

  @HyStrixCommand的注释提供了命令Properties属性。它是一个HyStrixProperty数组,因此@HyStrixProperty可以定义多个。名称指定相应配置项目的值。

  该界面没有返回Hello!,但返回了备份方法超时的返回值!这是因为我们值的超时为2秒,而TimeUnit.seconds.seeps.seeps.sleep(3)睡3秒钟,导致保险丝要打开保险丝打开以打开,请返回储备法。

  Hystrix方法的时间超时也可以关闭。

  此时/Closetimeout接口,无论它不会触发超时保护多长时间(理论上,您不会像这样玩!)

  上面有三个氏族断路器的状态。默认情况下,保护Hystrix保护的方法在10秒内已超过20次,超过50%的请求失败。在5秒钟后,断路器进入半开放状态,并尝试再次调用原始方法。如果呼叫失败,断路器将直接打开。

  Hystrix断路器阈值,默认配置:在给定的时间范围内,该方法应调用的次数

  断路器。requestvolumethrest = 20

  在给定的时间范围内,该方法称为故障百分比

  断路器。ErrorthresholdPercentage = 50%

  请求数量和错误百分比的滚动时间周期

  Metrics.RolllingStats.TimeInmilliseConds = 10000

  处于开放状态的断路器将不会进入半开放状态。输入半开放状态后,将再次尝试原始方法

  断路器。Sleepwindowinmilliseconds= 5000

  如下所示,修改了默认的道路断路阈值。修改后的60秒内,请求超过4次,超过50%的请求失败。断路器将输入开放状态。按原始方法。我将其设置在此处以促进测试。

  将超时时间设置为1秒钟,并在方法中执行timeunit.seconds.sleep(2);使线块持续2秒钟,显然每个呼叫都会失败,因此第四个(60s之内)的请求将直接执行储备金方法。

  很多时候,我们使用Open FEGIN请求服务器的数据。目前,我们可以使用Hystrix包括degin客户端,并且集成方法非常简单。

  Hystrix已集成到OpenFeign中,因此无需单独进口Hystrix的依赖

  将@enableFeignclients注释添加到开始类,默认为HyStrix

  Open假装对Hystix的支持。此外,由于伪装集成的功能区,功能区还具有默认的请求超时时间。因此,如果我们要正确使用HyStrix带来的保险丝保护,我们应该设置功能区超时的超时,而不是hystrix timeout.great.great.(两者之间的默认超时时间为1秒))

  定义一个假装客户端并指定后备类,该类要求假装客户端提供熔融服务。注意,假装客户端的实现类需要添加到容器中。

  定义测试控制器,我们不启动1888服务,并且仿真服务器不可用!

  目前,触发服务已降级并直接返回到客户端退缩!