复杂的分布式架构中,应用程序的集群节点及其依赖项服务节点非常多,节点出现问题之后如何进行及时容错处理是微服务架构稳定性以及可靠性的重要体现,那么 Hystrix 到底可以为我们解决哪些问题呢?
1、 阻止某个有问题调用耗尽系统的所有线程,限制线程资源消耗;
2、阻止异常在分布式系统之间的传播;
3、快速失败代替请求排队;
4、错误回退、优雅的服务降级;
Hystrix原理分析
===========
1、问题分析
======
如下图所示,应用请求会进入所有后端服务集群。如果各个服务节点都是正常的,那么服务节点便会正常响应, 对应的依赖的服务也会正常运行,一切看起来都很美好。
但是现实总是很残酷的,如果依赖的某个服务节点出现异常,比如此时服务正在进行 full GC ,无法响应外部请求。因此此时的用户请求会被阻塞住。如下图所示,用户请求分别调用服务A、H、I以及P服务来完成某项业务流程,但是此时服务I出现异常或者服务I集群的某个节点出现了异常,虽然两者的连接还保持着,但是所有发送过去的业务请求都出现 timeout 。那么此时调用方的工作线程就会被阻塞住,导致调用方出现线程不断被被占用的情况。
在流量较大的场景下,由于后端某些节点的异常,服务提供者不可用,如下图的依赖I服务不可用,请求无法正常返回,那么调用方会不断进行重试进一步加大流量,最终导致调用方线程资源耗尽,导致服务调用者不可用。服务调用者也可能是上游服务的服务提供方,由于请求资源不断被占用,同时导致上游依赖应用同步被影响,最后故障点会蔓延到整个平台中。