Board logo

标题: 基于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种负载均衡策略,如下所示:

在实际使用中,只需要选择合适的负载均衡策略值,配置即可,下面是上述四种负载均衡策略配置的示例:
[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