Hystrix学习总结

待更新
所有系统,特别是分布式系统,都会遇到故障。
当服务崩溃时,很容易检测到该服务已不存在,因此应用程序可以绕过它。
然而,当服务运行缓慢时,检测到服务性能不佳并绕过它是非常困难的。

客户端弹性模式:在远程服务发生错误或表现不佳时保护远程资源(另一个微服务调用或数据库查询)的客户端免于崩溃。这些模式的目标是让客户端“快速失败”,而不消耗诸如数据库连接和线程池之类的宝贵资源,并且可以防止远程服务的问题向客户端的消费者进行“上游”传播。

4种客户端弹性模式:
(1)客户端负载均衡模式:服务客户端存在服务发现期间检索到微服务断点
(2)断路器模式:确保服务客户端不会重复调用失败的服务
(3)后备模式:调用失败时,后备模式询问是否有可执行的替代方案
(4)舱壁模式:隔离服务客户端上不同的服务调用,以确保表现不佳的服务不会耗尽客户端的所有资源(线程池充当舱壁)

注解:
@EnableCircuitBreaker 告诉spring cloud 将要为服务使用hystrix,加在启动引导类上
注意:如果忘记将该注解添加到引导类中,那么hystrix断路器不会处于活动状态。在服务启动时,不会收到任何警告或错误消息

断路器
@HystrixCommand 将java类方法标记为由Hystrix断路器进行管理,当spring框架看到该注解,它将动态生成一个代理,该代理将包装该方法,并通过专门用于处理远程调用的线程池来管理对该方法的所有调用。
@HystrixCommand(commandProperties={@HystrixProperty(name=“execution.isolation.thread.timeoutInMilliseconds”,value=12000)})
commandProperties参数允许开发人员提供附加的属性来定制Hystrix

后备
@HystrixCommand(fallbackMethod=“buildFallbackLicenseList”)
fallbackMethod 属性定义了类中的一个方法,如果来自Hystrix的调用失败,那么就会调用该方法
注意此后备方法必须由HystrixCommand保护的原始方法位于同一个类中,并且必须具有与原始方法相同的方法签名。传递给原始方法的所有参数都将传递给后备方法。

传递旧数据给客户,比让客户看到错误或者整个应用崩溃更为可取。

后备是一种在资源超时或者失败时,提供行动方案的机制

如果在后备服务中调用另一个分布式服务,就可能需要使用@HystrixCommand注解来包装后备方法。

舱壁模式,将远程调用隔离在他们自己的线程池中,以便可以控制单个表现不佳的服务,而不会使容器崩溃
@HystrixCommand(fallbackMethod=“buildFallbackLicenseList”,
threadPoolKey=“licenseByOrgThreadPool”,
threadPoolProperties={
@HystrixProperty(name=“coreSize”,value=“30”),
@HystrixProperty(name=“maxQueueSize”,value=“10”)})
threadPoolKey属性定义线程池的唯一名称
coreSize属性用于定义线程池的最大线程数
maxQueueSize用于定义一个位于线程池前的队列,它可以对传入的请求进行排列。该队列将控制在线程池中线程繁忙时允许堵塞的请求数,一旦请求数超过队列的大小,对线程池的任何其他请求都将失败,知道队列中有空间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值