Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。缓存
其核心部分包含:安全
Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置便可,Dubbo基于Spring的Schema扩展进行加载。服务器
主要核心部件网络
Remoting: 网络通讯框架,实现了sync-over-async 和 request-response 消息机制.负载均衡
RPC: 一个远程过程调用的抽象,支持负载均衡、容灾和集群功能框架
Registry: 服务目录框架用于服务的注册和服务事件发布和订阅。dom
Failover Clusterasync
释义:失败自动切换,当出现失败,重试其它服务器。(缺省)分布式
应用场景:一般用于读操做,但重试会带来更长延迟。性能
设置方法:可经过retries="2"来设置重试次数(不含第一次)。
Failfast Cluster
释义:快速失败,只发起一次调用,失败当即报错。
应用场景:一般用于非幂等性的写操做,好比新增记录。
Failsafe Cluster
释义:失败安全,出现异常时,直接忽略。
应用场景:一般用于写入审计日志等操做。
Failback Cluster
释义:失败自动恢复,后台记录失败请求,定时重发。
应用场景:一般用于消息通知操做。
Forking Cluster
释义:并行调用多个服务器,只要一个成功即返回。
应用场景:一般用于实时性要求较高的读操做,但须要浪费更多服务资源。
设置方法:可经过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自己的高级特性.正如咱们在说自定义扩展的时候同样,这两个特征一样也能够进行自定义扩展,用户能够根据本身实际的需求来扩展他们从而知足项目的实际需求.