当我们的系统中用到Dubbo的集群环境,由于各种原因在集群调用失败时,Dubbo提供了多种容错方案,缺省为failover重试。

Dubbo的集群容错在这里想说说他是由于我们实际的项目中出现了此类的问题,由于依赖的第三方项目出现异常,导致dubbo调用超时,此时使用的是默认的集群容错方式,而配置的reties='3',这样前段系统连续掉用了三次服务,结果可想而知.

先说一下各节点关系:

这里的Invoker是Provider的一个可调用Service的抽象,Invoker封装了Provider地址及Service接口信息。

Directory代表多个Invoker,能够把它看成List<Invoker>,但与List不同的是,它的值可能是动态变化的。比方注冊中心推送变更。

Cluster将Directory中的多个Invoker伪装成一个Invoker,对上层透明,伪装过程包括了容错逻辑,调用失败后。重试还有一个。

Router负责从多个Invoker中按路由规则选出子集,比方读写分离,应用隔离等。

LoadBalance负责从多个Invoker中选出详细的一个用于本次调用。选的过程包括了负载均衡算法,调用失败后,须要重选。

集群容错模式:

Failover Cluster

失败自己主动切换,当出现失败。重试其他server。(缺省)

通经常使用于读操作,但重试会带来更长延迟。

可通过retries="2"来设置重试次数(不含第一次)。正是文章刚開始说的那种情况.

Failfast Cluster

高速失败,仅仅发起一次调用。失败马上报错。

通经常使用于非幂等性的写操作,比方新增记录。

Failsafe Cluster

失败安全,出现异常时,直接忽略。

通经常使用于写入审计日志等操作。

Failback Cluster

失败自己主动恢复,后台记录失败请求,定时重发。

通经常使用于消息通知操作。

Forking Cluster

并行调用多个server,仅仅要一个成功即返回。

通经常使用于实时性要求较高的读操作。但须要浪费很多其它服务资源。

可通过forks="2"来设置最大并行数。

Broadcast Cluster

广播调用全部提供者,逐个调用,随意一台报错则报错。(2.1.0開始支持)

通经常使用于通知全部提供者更新缓存或日志等本地资源信息。

重试次数配置如:(failover集群模式生效)

<dubbo:serviceretries="2"/>

或:

<dubbo:referenceretries="2"/>

或:

<dubbo:reference>

<dubbo:methodname="findFoo"retries="2"/>

</dubbo:reference>

集群模式配置如:

<dubbo:servicecluster="failsafe"/>

或:

<dubbo:referencecluster="failsafe"/>

以上是Dubbo集群的容错方式,接下来是在集群负载均衡时,Dubbo提供了多种均衡策略。缺省为random随机调用。

Random LoadBalance

随机,按权重设置随机概率。

在一个截面上碰撞的概率高。但调用量越大分布越均匀,并且按概率使用权重后也比較均匀。有利于动态调整提供者权重。

RoundRobin LoadBalance

轮循。按公约后的权重设置轮循比率。

存在慢的提供者累积请求问题,比方:第二台机器非常慢,但没挂,当请求调到第二台时就卡在那。久而久之。全部请求都卡在调到第二台上。

LeastActive LoadBalance

最少活跃调用数。同样活跃数的随机。活跃数指调用前后计数差。

使慢的提供者收到更少请求,由于越慢的提供者的调用前后计数差会越大。

ConsistentHash LoadBalance

一致性Hash,同样參数的请求总是发到同一提供者。

当某一台提供者挂时。原本发往该提供者的请求,基于虚拟节点,平摊到其他提供者,不会引起剧烈变动。

Dubbo的集群容错和负载均衡相同也是Dubbo本身的高级特性.正如我们在说自己定义扩展的时候一样,这两个特征相同也能够进行自己定义扩展,用户能够依据自己实际的需求来扩展他们从而满足项目的实际需求.

Dubbo之旅--集群容错和负载均衡的更多相关文章

  1. Dubbo工作原理,集群容错,负载均衡

    Remoting:网络通信框架,实现了sync-over-async和request-response消息机制. RPC:一个远程过程调用的抽象,支持负载均衡.容灾和集群功能. Registry:服务 ...

  2. 4.Dubbo2.5.3集群容错和负载均衡

    转载请出自出处:http://www.cnblogs.com/hd3013779515/ 1.集群容错和负载均衡原理 各节点关系: 这里的Invoker是Provider的一个可调用Service的抽 ...

  3. Dubbo学习笔记7:Dubbo的集群容错与负载均衡策略

    Dubbo的集群容错策略 正常情况下,当我们进行系统设计时候,不仅要考虑正常逻辑下代码该如何走,还要考虑异常情况下代码逻辑应该怎么走.当服务消费方调用服务提供方的服务出现错误时候,Dubbo提供了多种 ...

  4. Dubbo学习(二) Dubbo 集群容错模式-负载均衡模式

    Dubbo是Alibaba开源的分布式服务框架,我们可以非常容易地通过Dubbo来构建分布式服务,并根据自己实际业务应用场景来选择合适的集群容错模式,这个对于很多应用都是迫切希望的,只需要通过简单的配 ...

  5. Dubbo的集群容错与负载均衡策略及自定义(一致性哈希路由的缺点及自定义)

    Dubbo的集群容错策略 正常情况下,当我们进行系统设计时候,不仅要考虑正常逻辑下代码该如何走,还要考虑异常情况下代码逻辑应该怎么走.当服务消费方调用服务提供方的服务出现错误时候,Dubbo提供了多种 ...

  6. Dubbo的集群容错与负载均衡策略

    Dubbo的集群容错策略 正常情况下,当我们进行系统设计时候,不仅要考虑正常逻辑下代码该如何走,还要考虑异常情况下代码逻辑应该怎么走.当服务消费方调用服务提供方的服务出现错误时候,Dubbo提供了多种 ...

  7. Openfire 集群部署和负载均衡方案

    Openfire 集群部署和负载均衡方案 一.   概述 Openfire是在即时通讯中广泛使用的XMPP协议通讯服务器,本方案采用Openfire的Hazelcast插件进行集群部署,采用Hapro ...

  8. Tomcat6+nginx集群,达到负载均衡和session复制

    nginx+tomcat做web项目集群,达到负载均衡.故障转移.session复制功能. 1.nginx配置文件见上一篇“nginx配置文件(反向代理+集群+动静分离)” 2.tomcat集群,修改 ...

  9. Apache反向代理结合Tomcat集群来实现负载均衡(一)、概念理解

    好的博文一般都能做到"望题知文",看下标题就知道下边要讲的内容,写这个标题时犹豫了一下,本来要将标题定位apache+tomcat实现负载均衡,但是又认为这样显得比較模糊.后来想了 ...

随机推荐

  1. PlayMaker的特殊事件FINISHED

    PlayMaker的特殊事件FINISHED   在PlayMaker中,每个状态机都有一个特殊事件START.当启用状态机,触发START事件.其中,每个状态都可以有一个特殊事件FINISHED.当 ...

  2. Redis学习篇(三)之Key相关操作

    KEYS 作用:返回所有的给定模式的key 语法:KEYS pattern 通配符: *: 任意个字符 ?: 任意一个字符 []: 匹配[]之间的字符 [a-z] [A-Z] \x: 匹配特殊字符 ? ...

  3. hibernate-release-4.3.11.Final资源包介绍

    资源下载 hibernate-release-4.3.11.Final documentation 包  相关文档 lib  相关jar包 required --开发中必须要加入的包 optional ...

  4. [SimpleOJ233]a xor b

    题目大意: 给你一个数列,求所有区间最大值和次大只异或的最大值. 思路: 很容易想到一个O(n^2)的暴力. O(n)的单调栈做法似乎也很好想,不过考场上没想出来. 对于数列上的某一个数,我们维护在它 ...

  5. Mac 显示隐藏的文件

    要显示隐藏文件: 在终端中输入代码:defaults write com.apple.finder AppleShowAllFiles -bool true 隐藏文件: 在终端输入代码:default ...

  6. 二、python的逻辑运算与数据类型

    .python的逻辑运算符 数学运算符 加:+   减:-  乘:*  除:/  取余:% 关系运算符 等于: ==  不等于: != 小于:< 大于:>     大于等于: >=  ...

  7. python - 在Windows系统中安装Pygame及导入Eclipse

    环境:python3.6(只有一个版本)+ windows10(64 bit)  + Eclipse+pydev python3.6安装完成后,会自带 easy_install 和 pip3,在Win ...

  8. MySQL之分页问题解决

    最近遇到很多大分页的问题,服务器负载很高,SQL的执行时间也较长,非常的头痛.下面我们就说说分页问题的解决. 大家都知道对于mysql来说,select * from table where x=‘? ...

  9. .NET 中字符文本中的字符太多 错误处理

    错误截图   问题描述    在ASP.NET中使用多层引号,要引起注意,引号使用不当会引起“字符文本中字段太多”编译错误!今天我就遇到了这个错误,整理于此!     “字符文本中字段太多”错误提示过 ...

  10. 反激 (Flyback) 控制器 -- LTC3803

    LTC3803 - 采用 ThinSOT 封装的恒定频率.电流模式.反激式 DC/DC 控制器 特点 VIN 和 VOUT 仅受限于外部元件 可调斜率补偿 内部软起动 200kHz 恒定频率操作 ±1 ...