SpringCloud Hystrix 基本使用
什么是雪崩?
在学习 Hystrix 之前先来看下什么是雪崩
在分布式架构中,很常见的一个情形就是某一个请求需要调用多个服务。
如客户端访问 user 服务,而 user 服务需要调用 order 服务,order 服务需要调用 goods 服务,由于网络原因或者自身的原因,如果 order 服务或者 goods 服务不能及时响应,user 服务将处于阻塞状态,直到 order 服务 goods 服务响应。
此时若有大量的请求涌入,容器的线程资源会被消耗完毕,导致服务瘫痪。
注:如果使用 Tomcat 的线程池去接收用户的请求(Tomcat 是一个线程一个请求,即大力出奇迹),如果某一个服务出现了故障,这个时候后续有大量的请求过来,那么容器中的线程数量则会持续增加直致 CPU 资源耗尽到 100% (雪崩),导致 Tomcat 无法处理其他业务功能

1 如图所示,此时的系统正在愉快的运行中。
2 突然这个时候,goods 服务节点的网络发生了故障。goods 服务节点瘫痪,goods 服务不可用。
3 由于 good 服务瘫痪导致 order 服务向 goods 服务发送的请求得不到返回,一直处于阻塞,此时 user 服务仍然一直 向 order 服务发送请求,最终导致 order 服务节点的资源耗尽,order 服务节点瘫痪,order 服务不可用。
4 由于 good 服务瘫痪导致 order 服务向 goods 服务发送的请求得不到返回,一直处于阻塞,此时 user 服务仍然一直向 order 服务发送请求,最终导致 order 服务节点的资源耗尽,也瘫痪掉。此时 user 服务向 order 服务发送的请求同样也得不到返回,而客户端依然源源不断的向 user 服务节点发送请求,最终 user 服务节点和 order 服务节点一样,由于资源耗尽导致服务器瘫痪,user服务也不可用。
服务与服务之间的依赖性,故障会传播,造成连锁反应,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的 “雪崩” 效应。