dubbo——集群容错

本文参考dubbo官方文档,加上自己的理解由来: dubbo官网


一、图解
1.左侧invoker为抽象的可调用Service,它内部封装了Provider地址和Service接口信息。
2.Directory:各种invoker,值在动态变化的。
3.Cluster:根据所选择的模式在2中将那么多invoker伪装成1,若失败,可重试另外一个invoker。
4.Router: 根据不同的路由规则(条件路由或脚本路由)筛选invoker,例如读写分离、应用隔离。——详细看  路由规则
5.LoadBalance:在4筛选后,根据负载均衡算法选出实际的一个具体invoker调用,若失败,则重新选择。——详细看 负载均衡

综合上述:
1.调用方:
Cluster(根据调用模式)->Invoker(内部筛选,到具体一个Invoker)->调通服务
2.内部筛选逻辑:
Directory(原本总的invoker)->Router(路由一次筛选)->LoadBalance(负载均衡选)->Invoker(实际上被调用的Invoker)

二、容错模式:
1.Faukiver Cluster(默认缺省):
  • 失败就自动切换,重试其他服务器.
  • 用于读操作,可重试会带来延迟
  • 通过retries=“2”来设置重试次数(不含第一次)
2.Failfast Cluster
  • 快速失败,只发起一次调用,失败立刻报错。——报错最好捕获,方便自身后续分析
  • 用于非幂等性的写操作,比如新增记录
3.Failsafe Cluster
  • 失败自动回复,后台记录失败请求,定时重发。——避免陷入服务器宕机,不断失败,不断定时重发
  • 通常用作消息通知操作
4.Forking Cluster
  • 并行调用多个服务器,成功一个即返回
  • 用于实时性高的读操作,但需要浪费更多服务资源。—— 典型的 性能和硬件 之争,协调好二者,本人还是比较推荐这个模式的。
  • 可通过forks=“2”设置最大的并行数
5.Broadcast Cluster
  • 广播所有提供者,逐一调用,任意一台报错则报错
  • 用于通知各个提供者更新缓存或日志等本地资源

附:
集群模式配置:


<dubbo:service cluster="failsafe" /> 或<dubbo:reference cluster="failsafe" />


重试次数配置:
<dubbo:serviceretries="2"/>
< dubbo:reference >
     < dubbo:method name = "findFoo" retries = "2" />
dubbo:reference >

你可能感兴趣的:(dubbo)