博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Dubbo之旅--集群容错和负载均衡
阅读量:5777 次
发布时间:2019-06-18

本文共 1836 字,大约阅读时间需要 6 分钟。

 

       当我们的系统中用到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本身的高级特性.正如我们在说自己定义扩展的时候一样,这两个特征相同也能够进行自己定义扩展,用户能够依据自己实际的需求来扩展他们从而满足项目的实际需求.

转载于:https://www.cnblogs.com/clnchanpin/p/6764417.html

你可能感兴趣的文章
[BZOJ] 1012 [JSOI2008]最大数maxnumber
查看>>
使用VMware安装CentOS
查看>>
gauss消元
查看>>
多线程-ReentrantLock
查看>>
数据结构之链表与哈希表
查看>>
IIS7/8下提示 HTTP 错误 404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求...
查看>>
http返回状态码含义
查看>>
响应式网站对百度友好关键
查看>>
洛谷P2179 骑行川藏
查看>>
(十八)js控制台方法
查看>>
VB关键字总结
查看>>
虚拟机类加载机制
查看>>
android代码生成jar包并混淆
查看>>
Java基础2-基本语法
查看>>
一个不错的vue项目
查看>>
屏蔽指定IP访问网站
查看>>
python学习 第一天
查看>>
根据毫秒数计算出当前的“年/月/日/时/分/秒/星期”并不是件容易的事
查看>>
python的图形模块PIL小记
查看>>
shell变量子串
查看>>