Dubbo 框架学习笔记十四
Dubbo 框架学习之集群容错:
Cluster 接口提供了我们常说的集群容错功能。
集群中的单个节点有一定概率出现一些问题,例如,磁盘损坏、系统崩溃等,导致节点无法对外提供服务,因此在分布式 RPC 框架中,必须要重视这种情况。为了避免单点故障,我们的 Provider 通常至少会部署在两台服务器上,以集群的形式对外提供服务,对于一些负载比较高的服务,则需要部署更多 Provider 来抗住流量。
在 Dubbo 中,通过 Cluster 这个接口把一组可供调用的 Provider 信息组合成为一个统一的 Invoker 供调用方进行调用。经过 Router 过滤、LoadBalance 选址之后,选中一个具体 Provider 进行调用,如果调用失败,则会按照集群的容错策略进行容错处理。
Dubbo 默认内置了若干容错策略,并且每种容错策略都有自己独特的应用场景,我们可以通过配置选择不同的容错策略。如果这些内置容错策略不能满足需求,我们还可以通过自定义容错策略进行配置。
Dubbo 中常见的容错方式有:
Failover Cluster:失败自动切换。它是 Dubbo 的默认容错机制,在请求一个 Provider 节点失败的时候,自动切换其他 Provider 节点,默认执行 3 次,适合幂等操作。当然,重试次数越多,在故障容错的时候带给 Provider 的压力就越大,在极端情况下甚至可能造成雪崩式的问题。
Failback Cluster:失败自动恢复。失败后记录到队列中,通过定时器重试。
Failfast Cluster:快速失败。请求失败后返回异常,不进行任何重试。
Failsafe Cluster:失败安全。请求失败后忽略异常,不进行任何重试。
Forking Cluster:并行调用多个 Provider 节点,只要有一个成功就返回。
Broadcast Cluster:广播多个 Provider 节点,只要有一个节点失败就失败。
Available Cluster:遍历所有的 Provider 节点,找到每一个可用的节点,就直接调用。如果没有可用的 Provider 节点,则直接抛出异常。
Mergeable Cluster:请求多个 Provider 节点并将得到的结果进行合并。
版权声明: 本文为 InfoQ 作者【风翱】的原创文章。
原文链接:【http://xie.infoq.cn/article/fb3af62e608a4718245f1d00a】。文章转载请联系作者。
评论