首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于Dubbo框架构建分布式服务(2)

基于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
返回列表