1.4,SpringCloud之Hystrix(容错延时框架)
1,实现容错的手段:
1,如果服务消费者对服务提供者请求就会被强制等待,直到响应或超时,在高负载场景下,如果不做处理,会导致服务消费者资源耗尽,甚至导致整个系统崩溃。
2,雪崩效应:
1,提供者不可用导致消费者不可用,并将不可用逐渐放大的过程
2,服务与服务之间难免存在依赖关系,远程调用时,难免会发生网络故障,最终导致级联故障,导致整个系统出现问题。
3,如何容错:
1,为网络请求设置超时:
1,远程调用一般在几十毫秒就能得到响应,以来的服务不可用或者网络有问题,响应时间就会变长;
2,一次远程调用对应这一个线程,如果响应时间太慢或者得不到释放,就会占用系统资源,资源就会最终被耗尽,最终导致服务的不可用
总结:设置网络超时,让资源尽快释放。
2,使用断路器模式:
1,开关阈值:5秒内20次失败
2,
2,使用Hystrix实现容错:
1,Hystrix简介:
是一个延迟和容错库,用于隔离访问远程系统,服务或者第三方库,防止级联失败,从而提升系统的可用性和容错性,主要有一下几点:
1,包裹请求:使用HystrixCommand(或HystrixObservableCommand)包裹对以来的调用逻辑,每个命令在独立线程中执行,使用的是命令模式。
2,跳闸机制:某个服务的错误率超过一定阈值,Hystrix可以自动或者手动跳闸,停止请求服务一段时间。
3,资源隔离:Hystrix每个依赖都维护一个小型的线程池(或者信号量)。如果该线程池已满,发往该以来的请求的被立即拒绝,而不会排队等候,从而加速失败判定。
4,监控:Hystrix可以近乎实时地监控运行指标和配置的变化,例如成功,失败,超时,以及被拒绝的请求等。
5,回退机制:当请求失败,超时,被拒绝,或当断路器打开时,执行回退逻辑。
6,自我修复:断路器打开一段时间后,会自动进入“半开”状态。断路器打开,关闭,半开的逻辑转换。
2,Hystrix的状态监控深入了解
3,Hystrix线程隔离策略与传播上下文
1,线程隔离策略有两种:
1,线程隔离:将会在单独的线程上执行,并发送请求受线程池中的线程数量的限制。
2,信号量隔离:在调用线程上执行,开销比较小,并发请求收到信号量个数的限制。
3,默认是线程隔离,这种方式是除了网络超时以外的额外保护层。如果:发生找不到上下文的运行时异常,可考虑信号量隔离。
2,两种隔离策略的应用场景:
1,线程:适用对依赖服务的网络请求的调用和访问,超时这种问题
2,适合访问不是对外部的依赖,对内部复杂业务逻辑的访问,不涉及网络请求,就可以适用信号量普通限流,主要是避免低效率的代码导致大量的线程被hang住。
4,Feign适用Hystrix:
1,SpringCloud默认Feign整合了Hystrix,
2,Feign添加回退
3,通过Fallback Factory检查回退原因
4,Feign禁用Hystrix
3,Hystrix监控:
1,简介:
Hystrix提供了近乎实时的监控。HystrixCommand和HystrixObservableCommand在执行时,会生成执行结果和运行指标,比如每秒执行的请求数,成功数等,这些 监控数据对分析应用系统的状态很有用。
2,Feign项目的Hystrix监控:
4,使用Hystrix DashBoard可视化监控数据:
1, 让监控数据图形化,可视化。
5,使用Turbine聚合监控数据:
1,一个聚合Hystrix监控数据的工具,让集群的监控更加方便。
2,使用Turbine监控多个微服务
3,使用消息中间件收集数据
1,一些场景,微服务与Trubine网络不通,可借助消息中间件实现数据收集。各个微服务将Hystrix Command的监控数据发送至消息中间件,Turbine消费中间件的数据。
扫描二维码