在分布式应用中(微服务),通常会对服务进行集群部署来保障服务高可用。dubbo用于服务远程调用,远程服务是有可能出现异常情况的,如网络抖动,服务短暂不可用等情况,需要自动容错,服务降级或者mock测试,需要集群容错机制。

集群(Cluster)容错层:该层包含Cluster、Directory、Router、LoadBalance极大核心接口。注意区分Cluster层与Cluster接口,Cluster层是抽象概念,表示的是对外的整个集群容错层;Cluster接口是一个容错接口,提供Failover、Failfast等容错策略。

集群容错层的实现有很多,主要介绍一下AbstractClusterInvoke的全量流程。

1.Cluster的总体工作流程:

1)生成Invoker对象。不同的Cluster实现会生成不同类型的ClusterInvoker对象并返回,然后调用ClusterInvoker的Invoker方法,正式开始调用流程。

2)获得可调用的服务列表。首先会做前置校验,检查远程服务是否已被销毁。然后通过Directory#list方法获取所有可用的服务列表。接着使用Router接口处理该服务列表,根据路由规则过滤一部分服务,最终返回剩余的服务列表。

3)做负载均衡。在第2步中得到的服务列表还需要通过不同的负载均衡策略选出一个服务,用作最后的调用。首先框架会根据用户的配置,调用ExtensionLoader获取不同负载均衡策略的扩展点实现。然后做一些后置操作,如果是异步调用则设置调用编号。接着调用之类实现的doInvoke方法(父类专门留了这个抽象方法让之类实现),子类会根据具体的负载均衡策略选出一个可以调用的服务。

4)做RPC调用。首先保存每次调用Invoker到RPC上下文,并做RPC调用,然后处理调用结果,对于调用出现异常、成功、失败等情况,每种容错策略会有不同的处理方式。

2.容错机制的特性的介绍

Failsafe:调用失败也是安全的,在请求失败后,直接忽略异常。对请求做负载均衡,这种机制,不关心是否调用成功,并且不抛异常影响外层调用,可以用于一些不重要的日志同步场景,及时出现异常影响也不大。

Failfast:顾名思义,根据单词词义可知快速失败,当请求的服务失败后,会快速返回异常结果,不做重试,failfast容错机制会对请求做负载均衡,通常使用在非幂等性接口的调用上。这种机制受网络抖动的影响较大。

Failover:当请求调用失败后,会进行重试其他服务器,可以设置重试的次数,设置retries这个参数即可。failover是dubbo默认的容错机制,也会对请求做负载均衡。通常使用在读操作或幂等的写操作上,但重试会导致接口的延迟增大,在下游机器负载已经达到极限是,重试会加重下游服务的负载。

Failback:请求失败后,会自动记录在失败队列中,并由一个定时线程池定时重试,适用于异步或最终一致性的请求,请求会做负载均衡。

Forking:同时调用多个相同的服务,只要其中一个返回,则立即返回结果,用户可以设置forks参数设置来确定最大并行调用的服务数量。通常使用在对接口实时性要求极高的调用上,但也会浪费更多的资源。

Broadcast:广播模式,广播调用所有可用的服务,任意一个节点报错则报错。由于是广播,因此请求不需要做负载均衡。通常用于服务状态更新后的广播。

Mock:提供调用失败是,返回伪造的响应结果。或直接强制返回伪造的结果,不会发起远程调用

Available:最简单的方式,请求不会做负载均衡,遍历所有服务列表,找到第一个可用节点,直接请求并返回结果。如果没有可用的节点,直接抛出异常。

Mergeable:可以自动吧多个节点请求得到的结果进行合并。

官网有个表格,总结的很详细:http://dubbo.apache.org/zh-cn/docs/user/maturity.html

3,负载均衡算法

dubbo内置了4中负载均衡算法,当然也可以自己自定义实现其他轮询算法。

本文中的理论部分参考了图书《深入理解Apache Dubbo与实战》 图书作者:诣极  林琳

Apache Dubbo集群容错相关推荐

  1. Dubbo面试杀招--Dubbo集群容错负载均衡

    点赞再看,养成习惯,微信搜一搜[三太子敖丙]关注这个喜欢写情怀的程序员. 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的系 ...

  2. Dubbo集群容错模式之Failover实现

    2019独角兽企业重金招聘Python工程师标准>>> 注: Dubbo版本是2.6.2 图1 Dubbo的FailoverClusterInvoker类继承图 1.Failover ...

  3. Dubbo集群容错模式之Failsafe实现

    2019独角兽企业重金招聘Python工程师标准>>> 注: Dubbo版本是2.6.2 图1 Dubbo的FailsafeClusterInvoker类继承图 1.Failsafe ...

  4. Dubbo 源码分析 - 集群容错之Directory

    1. 简介 前面文章分析了服务的导出与引用过程,从本篇文章开始,我将开始分析 Dubbo 集群容错方面的源码.这部分源码包含四个部分,分别是服务目录 Directory.服务路由 Router.集群 ...

  5. dubbo调用失败策略_面试官:dubbo负载均衡策略,集群容错策略,动态代理策略有哪些...

    面试官心理分析 继续深问吧,这些都是用 dubbo 必须知道的一些东西,你得知道基本原理,知道序列化是什么协议,还得知道具体用 dubbo 的时候,如何负载均衡,如何高可用,如何动态代理. 说白了,就 ...

  6. 【Java从0到架构师】Dubbo 基础 - 设置启动时检查、直接提供者、线程模型、负载均衡、集群容错、服务降级

    Dubbo 分布式 RPC 分布式核心基础 分布式概述 RPC Dubbo Dubbo 入门程序 - XML.注解 部署管理控制台 Dubbo Admin 修改绑定的注册 IP 地址 设置启动时检查 ...

  7. Dubbo 源码分析 - 集群容错之 Cluster

    1.简介 为了避免单点故障,现在的应用至少会部署在两台服务器上.对于一些负载比较高的服务,会部署更多台服务器.这样,同一环境下的服务提供者数量会大于1.对于服务消费者来说,同一环境下出现了多个服务提供 ...

  8. dubbo负载均衡策略和集群容错策略

    dubbo负载均衡策略 random loadbalance 默认情况下,dubbo是random load balance随机调用实现负载均衡,可以对provider不同实例设置不同的权重,会按照权 ...

  9. Dubbo面试 - dubbo 负载均衡策略和集群容错策略都有哪些?

    Dubbo面试 - dubbo 负载均衡策略和集群容错策略都有哪些? 面试题 dubbo 负载均衡策略和集群容错策略都有哪些?动态代理策略呢? 面试官心理分析 继续深问吧,这些都是用 dubbo 必须 ...

最新文章

  1. 中文版-He Knows My Name(他知道我的名字)-祂认得我-陈熙(音乐河4)
  2. 趋势科技全球首席安全官ED:人类迈向智能社会进程中不能失去掌控力
  3. SAP 电商云 Spartacus UI 的 style library 介绍
  4. C++第10周项目2扩展之2参考——迭代求和
  5. 校园计算机网络系统,校园计算机网络系统
  6. Web前端笔记-使用@media(媒体查询)展示及隐藏div
  7. 利用lz78编码实现对某字符序列的二元压缩_多媒体笔记(1):文件压缩的原理...
  8. hnu 暑期实训之选美比赛
  9. #PYTHON#数据模型
  10. bilibili直播: Vue.js Podcast(小记录)~~~
  11. java 日期 yyyy_Java时间格式化时YYYY(大写)和yyyy(小写)的区别
  12. php获取手机本地,PHP通过API获取手机号码归属地
  13. matlab添加文件夹语音_基于MATLAB的语音处理
  14. 乐普生物下周三上市:最高募资近10亿港元 年亏将超10亿
  15. vagrant启动虚拟机Stderr: VBoxManage.exe: error: Call to WHvSetupPartition failed: ERROR_SUCCESS (Last=0xc
  16. Gson项目使用全解析
  17. 软件工程——编码、测试、维护
  18. windows c api手册
  19. 手机APP调用支付宝支付(java服务端)
  20. Android 用axis2 webService产生java.lang.ClassCastException: org.ksoap2.serialization.SoapPrimitive错误的解决

热门文章

  1. Win11掉帧严重是怎么回事?Win11玩游戏掉帧的解决方法
  2. RabbitMQ的工作模式Routing 路由,test测试代
  3. 全向移动机器人参数校准方法思路
  4. 问答| 在四轮驱动机器人(SSMR)运动学模型中,左右虚拟轮的线速度vl和vr如何得到?
  5. ❤️14万字的《微服务开发SpringBoot—从基础高级》(建议收藏)❤️
  6. 3D移动translate3d(CSS3)
  7. 用户界面样式-鼠标样式(HTML、CSS)
  8. TypeScript学习(二):任意类型及推论
  9. mysql表无法获取_CentOS下无法正常获取MySQL数据库表数据的问题
  10. 现代控制理论输出y_现代控制理论线性系统入门(三)输入输出变量的稳定性