zookeeper与dubbo之间的连接

问题1:3个提供同样service的provider之间如何保证负载均衡?
问题2:其中一个provider挂了以后,zk如何感知,并通知到consumer?
问题3:dubbo协议?

答案1:dubbo提供了负载均衡策略,默认为 random 随机调用(按权重设置随机概率),另外还有 roundrobin(按公约后的权重设置轮询比率),
leastactive(最少活跃调用数,使慢的提供者收到更少请求),ConsistentHash(一致性 Hash,相同参数的请求总是发到同一提供者),示例如下:
@Service(version = “1.0.0”,protocol = {“dubbo”},registry = {“zk”,“redis”},retries = 3,owner = “jaysong”,loadbalance = “roundrobin”)

答案2:zk中的数据以Znode的形式存在,3个provider启动注册到zk时会创建临时节点 例如:Znode/com.provide.services/providers/provider1,
…/providers/provider2,…/providers/provider3,写入 IP & port。consumer启动时会创建临时节点
Znode/com.consumer.services/consumers/consumer1,获取providers 的全部子级 ZNode,获取服务提供者的 IP & port并且设置watcher到3个provider节点上。
服务提供者 & 消费者创建的 ZNode,全部为临时 ZNode:当服务提供者异常(机器故障、网络中断)时,其临时 ZNode 自动移除,watch机制会通知到consumer

答案3:
dubbo:// Dubbo 缺省协议采用单一长连接和 NIO 异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况
rmi:// RMI 协议采用 JDK 标准的 java.rmi.* 实现,采用阻塞式短连接和 JDK 标准序列化方式
hessian:// Hessian 协议用于集成 Hessian 的服务,Hessian 底层采用 Http 通讯,采用 Servlet 暴露服务,Dubbo 缺省内嵌 Jetty 作为服务器实现。
其他可用的协议包括 http:// 、webservice://、thrift://、memcached://、redis://、rest://。

上一篇:解决getLastKnownLocation返回null


下一篇:第四章笔记