超时:
如果等待太长时间决定调用失败,整个系统会被拖慢,如果超时太短,会将一个可能还在正常工作的调用认为是失败的,如果没有超时,一个宕掉的的下游服务可能会让整个系统挂起。所以给所有的跨进程调用设置超时,设置一个默认超时时间,当超时事件发生,查看日志,根据实际情况进行相应的调整。
断路器:
断路器是跨服务调用的一种保护手段,使用断路器时,当下游资源请求发生一定数量的失败达到一定的阈值时,断路器会打开,在断路器打开的状态下,会快速失败。一段时间后,客户端会发送一些请求查看下游服务是否已经恢复,如果得到正常的响应,恢复健康后,会重新发送请求。
舱壁:
是把自己从故障中隔离开的一种方式。在软件架构中,有很多不同的舱壁可供我们考虑。比如我们应该为每个下游服务的连接使用不同的连接池,这样的话如果一个连接池被用尽,其余连接并不受影响。这可以确保,下游服务将来运行缓慢、或者连接池被用尽,只有那一个连接池会受影响,其他服务依旧可以正常运行。鉴于级联故障的危险,建议对所有同步的下游调用都使用断路器。在很多方面,舱壁是三种模式里最重要的,超时和断路器能够在资源受限时释放它们,但舱壁可以在第一时间确保它们不成为限制。例如:Hystrix允许你在一定条件下实现拒绝请求的舱壁,以避免资源达到饱和,这被称之为减载。有时拒绝是避免重要系统变得不堪重负或成为多个上游服务瓶颈的最佳方法。