A distributed system is one in which the failure of a computer you didn’t even know existed can render your own computer unusable.

                                                                                                                                                              ---------Leslie Lamport, 1987

PS:大意就是计算机的任何故障,都可能会使得你的分布式系统崩溃

RxJava有许多支持编写可伸缩、响应性和弹性的应用程序的操作符:

  • 通过Schedulers 声明并发(参考140页的“Multithreading in RxJava”)
  • 超时(参考251页的“Timing Out When Events Do Not Occur”)和各种错误处理机制(参考243的“Error Handling”和254页的“Retrying After Failures”)
  • 通过flatMap并行工作(参考131页的“flatMap() as Asynchronous Chaining Operqtor”),同时限制并发(“在第76页上“Controlling the concurrency of flatMap()”)。

然而,要编写健壮且有弹性的应用程序,特别是在云环境中或使用微服务体系结构时,需要更多不属于核心RxJava的的特性。在本节中,我们将快速浏览一下Hystrix,一个用于管理、隔离和处理分布式环境中的故障的库。Hystrix允许您包装可能失败的操作,并在这类代码周围应用巧妙的逻辑。这包括:

  • 隔板模式:在一定的时间内完全切断不良行为

  • 通过应用超时、限制并发性和实现一个被称为“断路器”的方法来快速失败

  • 通过将小订单折叠成一个大订单来批量处理请求

  • 收集、发布和可视化性能统计数据

Hystrix的最大优点之一是断路器/熔断器,它是一种关闭临时依赖的机制,这样它们的失败就不会级联。如果在分布式系统中失败没有正确处理,它们往往会传播到下游依赖项,就像在整个堆栈中传播的异常一样。在分布式系统中,一个终端用户请求可以很容易地要求对多个上游依赖项进行数以百计的请求。一个损坏的服务,即使是不重要的,也会破坏整个系统,使每一个请求都失败。

有趣的是,缓慢的服务甚至比失败的服务更糟糕。如果每个用户请求都以一个友好的错误消息立即失败,那么情况就很糟糕。但如果你的用户根本没有得到任何回应,而且只是无限的等待,情况就更糟了。典型的反应(你必须得承认!)就是尝试刷新网页。这很少有帮助,但更多时候它只是启动另一个请求,进一步溢出系统。一个缓慢的服务会导致延迟进一步级联,使整个系统陷入停滞。突然间,所有使用慢速服务的服务都会变得缓慢,而这种情况会递归地出现。Hystrix试图保护这种已经崩溃的依赖关系并阻止失败的连锁反应。

results matching ""

    No results matching ""