标题:
基于Dubbo框架构建分布式服务(2)
[打印本页]
作者:
look_w
时间:
2018-12-16 15:26
标题:
基于Dubbo框架构建分布式服务(2)
关于如何实现一个自定义的集群容错模式,可以参考Dubbo源码中内置支持的汲取你容错模式的实现,6种模式对应的实现类如下所示:
[url=]
[/url]
com.alibaba.dubbo.rpc.cluster.support.FailoverClustercom.alibaba.dubbo.rpc.cluster.support.FailfastClustercom.alibaba.dubbo.rpc.cluster.support.FailsafeClustercom.alibaba.dubbo.rpc.cluster.support.FailbackClustercom.alibaba.dubbo.rpc.cluster.support.ForkingClustercom.alibaba.dubbo.rpc.cluster.support.AvailableCluster
[url=]
[/url]
可能我们初次接触Dubbo时,不知道如何在实际开发过程中使用Dubbo的集群模式,后面我们会以Failover Cluster模式为例开发我们的分布式应用,再进行详细的介绍。
Dubbo服务负载均衡
Dubbo框架内置提供负载均衡的功能以及扩展接口,我们可以透明地扩展一个服务或服务集群,根据需要非常容易地增加/移除节点,提高服务的可伸缩性。Dubbo框架内置提供了4种负载均衡策略,如下所示:
●Random LoadBalance:随机策略,配置值为random。可以设置权重,有利于充分利用服务器的资源,高配的可以设置权重大一些,低配的可以稍微小一些
●RoundRobin LoadBalance:轮询策略,配置值为roundrobin。
●LeastActive LoadBalance:配置值为leastactive。根据请求调用的次数计数,处理请求更慢的节点会受到更少的请求
●ConsistentHash LoadBalance:一致性Hash策略,具体配置方法可以参考Dubbo文档。相同调用参数的请求会发送到同一个服务提供方节点上,如果某个节点发生故障无法提供服务,则会基于一致性Hash算法映射到虚拟节点上(其他服务提供方)
在实际使用中,只需要选择合适的负载均衡策略值,配置即可,下面是上述四种负载均衡策略配置的示例:
[url=]
[/url]
<
dubbo:service
interface
="org.shirdrn.dubbo.api.ChatRoomOnlineUserCounterService"
version
="1.0.0"
cluster
="failover"
retries
="2"
timeout
="1000"
loadbalance
="random"
ref
="chatRoomOnlineUserCounterService"
protocol
="dubbo"
>
<
dubbo:method
name
="queryRoomUserCount"
timeout
="500"
retries
="2"
loadbalance
="leastactive"
/>
</
dubbo:service
>
[url=]
[/url]
上述配置,也体现了Dubbo配置的继承性特点,也就是dubbo:service元素配置了loadbalance=”random”,则该元素的子元素dubbo:method如果没有指定负载均衡策略,则默认为loadbalance=”random”,否则如果dubbo:method指定了loadbalance=”leastactive”,则使用子元素配置的负载均衡策略覆盖了父元素指定的策略(这里调用queryRoomUserCount方法使用leastactive负载均衡策略)。当然,Dubbo框架也提供了实现自定义负载均衡策略的接口,可以实现com.alibaba.dubbo.rpc.cluster.LoadBalance接口,接口定义如下所示:
[url=]
[/url]
/**
* LoadBalance. (SPI, Singleton, ThreadSafe)** <a href="
http://en.wikipedia.org/wiki/Load_balancing_
(computing)">Load-Balancing</a>**
@see
com.alibaba.dubbo.rpc.cluster.Cluster#join(Directory)*
@author
qian.lei*
@author
william.liangf
*/
@SPI(RandomLoadBalance.NAME)
public
interface
LoadBalance {
/**
* select one invoker in list. *
@param
invokers invokers. *
@param
url refer url *
@param
invocation invocation. *
@return
selected invoker.
*/
@Adaptive(
"loadbalance") <T> Invoker<T> select(List<Invoker<T>> invokers, URL url, Invocation invocation)
throws
RpcException;}
[url=]
[/url]
如何实现一个自定义负载均衡策略,可以参考Dubbo框架内置的实现,如下所示的3个实现类:
com.alibaba.dubbo.rpc.cluster.loadbalance.RandomLoadBalancecom.alibaba.dubbo.rpc.cluster.loadbalance.RoundRobinLoadBalancecom.alibaba.dubbo.rpc.cluster.loadbalance.LeastActiveLoadBalance
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0