上一节中,我们讲到hystrix是解决系统高可用的核心技术。因此,本节我们将展开详细讲解如何通过hystrix来解决分布式系统的高可用性问题以及设计原则.
我们要明白hystrix如何提高分布式系统的高可用性与稳定性,我们就要知道分布式系统会出现什么问题?在分布式系统中,每个服务都会调用很多其他的服务,这些被调用的服务叫做依赖服务,某些依赖服务在有些时候不可用,出现故障时正常现象,
上一节中,我们讲到hystrix的主要技术包括:资源隔离,限流,熔断,降级,运维监控等,hystrix可以让我们对分布式系统中对服务间的调用进行控制,加入一些调用延迟或者依赖故障的容错机制。hystrix通过将服务进行资源隔离,进而保证某个依赖服务出现故障 的时候,这种故障在整个系统所有的依赖服务调用中进行蔓延,同时hystrix还提供故障时的failback降级机制。
总而言之,hystrix通过这些方法帮助我们提升分布式系统的可用性和稳定性。
Hystrix为了实现高可用性的架构,设计hystrix的时候,一般遵循以下设计原则:
1,对依赖服务调用时出现的调用延迟和调用失败进行控制和容错保护;
2,在复杂的分布式系统中,阻止某一个依赖服务的故障在整个系统中蔓延;
3,提供fail-fast(快速失败)和快速恢复的支持;
4,提供failback优雅降级的支持;
5,支持实时的监控、报警以及运维操作;
使用Hystrix要解决的问题:
1,阻止依赖服务耗尽所有资源; --- 资源隔离
比如使用bulkhead(舱壁隔离技术),swimlane(涌道技术),circuit breaker(短路技术) ,来限制任何一个依赖服务的故障的影响。
2,提供fallback降级机制来应对故障;
3,避免请求排队和积压,采用限流和fail fast来控制故障;
4,通过近实时的统计、监控、报警功能,来提高故障处理和恢复速度。
5,通过近实时的属性和配置热修改功能,来提高故障处理和服务的速度。
6,保护依赖服务调用的所有故障情况,而不仅仅只是网络情况。
Hystrix是如何解决这些问题的?
1,通过HystrixCommand或者HystrixObservableCommand来封装对外部依赖的访问请求,这个访问请求一般会运行在独立的线程中
2,为每一个依赖服务维护一个独立的线程池,或者是semaphore,当线程池已满时,直接拒绝对这个服务的调用
3,对依赖服务的调用成功次数,失败次数,拒绝次数,超时次数,进行统计
4,如果对一个依赖服务的调用失败次数超过一定的阈值,自动进行熔断,在一定时间内对该服务的调用直接降级,一段时间后再自动尝试恢复
5,对属性和配置的修改提供近实时的支持。