当我们的服务状态不佳(高延迟等)的时候,想要绕过该服务那将是非常困难的,原因如下:

一、因为服务的降级而导致的最终消耗完线程池资源并彻底崩溃。

(服务降级就是丢车保帅,保证核心业务不断)

二、对远程的调用服务通常是同步的,并且无法暂停长时间运行的调用。(服务的调用者没有超时的概念来停止调用服务,他们只会发出请求然后傻等着服务返回结果)

三、通常应用程序在调用一个服务的时候,除非他彻底故障否则程序还是会去调用,当一个服务表现的不佳的时候这可能会导致服务优雅的降级,但更有可能是消耗完系统资源后崩溃。

总体来说就是,性能不佳的服务不仅难以检测,而且还会触发连锁效应,从而影响整个系统。这就要求我们要监听服务的状态,从而快速解决那些不佳的请求。(请求快速失败)

什么是客户端弹性模式

这里指的客户端针对的是调用服务的一方(客户端和服务端双向性)

客户端弹性模式指的是客户端在调用一个服务的时候能够快速对请求状态做出判定(快速失败)。

有四种弹性模式:

一、客户端负载均衡

二、断路器模式

三、后备模式

四、舱壁模式

第一种客户端负载均衡

我们再上一章讲了,使用Eureka+Ribbon来实现客户端负载均衡,负载均衡器会检测服务实力是否抛出错误或者表现不佳。如果负载均衡器检测到有问题会及时把服务实例剔除可用服务位置,来防止其他服务调用该服务。本章就不在累赘了。

第二种断路器模式

电气领域的断路器检测经过电线的电流是否越限,如果越限,断路器将切断连接保护下游部分不被烧毁,软件领域的断路器,当远程服务被调用的时候,断路器会监控这个调用,如果该调用长时间没有回应,断路器会主动介入并中断调用。

本章先讲断路器模式

引入pom依赖

SpringCloud使用Hystrix实现断路器

引导类使用@EnableCircuitBreaker 启用断路器

SpringCloud使用Hystrix实现断路器

在你要监视的方法上使用@HystrixCommand注解 相当于监控当前方法内的内容

SpringCloud使用Hystrix实现断路器

默认断路器认定超时时间是1000毫秒,如果超过1000毫秒断路器自动接入并终止请求,我定义一个休眠方法,休眠时间为1100毫秒。

SpringCloud使用Hystrix实现断路器

我们启动server1实例并注册到Eureka

server1 8081/8082两个端口 分别暴露/hello接口

我们启动server3,访问localhost:8083/hello 来调用SERVER1的hello接口

如果没有超时正常调用

SpringCloud使用Hystrix实现断路器
SpringCloud使用Hystrix实现断路器

一但休眠条件满足

SpringCloud使用Hystrix实现断路器
SpringCloud使用Hystrix实现断路器

我们看到断路器立即介入并中断请求

Hystrix默认请求超时时间为1000毫秒,我们也可以通过配置来设置超时时间

SpringCloud使用Hystrix实现断路器

都是开箱即用的组件,非常方便。

相关文章:

  • 2021-09-01
  • 2021-08-27
  • 2021-10-22
  • 2021-12-26
  • 2021-07-02
  • 2021-04-26
  • 2021-07-03
猜你喜欢
  • 2021-07-30
  • 2021-04-04
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案