初步理解 Dubbo 与 Zookeeper
Posted 鮀城小帅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初步理解 Dubbo 与 Zookeeper相关的知识,希望对你有一定的参考价值。
个人博客网:https://wushaopei.github.io/ (你想要这里多有)
一、dubbo 与 zookeeper 的本质及其关系?
Dubbo是管理中间层的工具,在业务层到数据仓库间有非常多服务的接入和服务提供者需要调度,dubbo提供一个框架解决这个问题。
Zookeeper用来注册服务和进行负载均衡,哪一个服务有哪一个机器来提供必需让调用者知道,简单来说就是ip地址和服务名称的对应关系。
Dubbo和zookeeper的关系: dubbo会将注册中心进行抽象,使得它可以连接不同的存储媒介给注册中心提供服务,有zk、memcached、redis等。
二、关于Dubbo的服务调用原理:
-
Dubbo在调用服务不成功时,默认会重试2次。可根据需求进行配置重试次数。
-
由于Dubbo的路由机制,会把超时的请求路由到其他机器上,而不是本机尝试,所以dubbo的重试机器也能一定程度的保证服务的质量。
-
注意:不合理的配置重试次数,当失败时会进行重试多次,可能在某个时间点出现性能问题,调用方再连续重复调用。此时系统请求变为正常值的retries倍,系统压力会大增,容易引起服务雪崩,需要根据业务情况规划好如何进行异常处理,合适进行重试。
三、Dubbo注册中心的介绍:
- Dubbo的注册中心有好多种,包括Multicast、Zookeeper、Redis、Simple等。Dubbo官方推荐使用Zookeeper注册中心,我所使用过的也只是Zookeeper注册中心。
- 如果说,为什么要使用 Zookeeper,那么我认为官方推荐是主要的原因,其次,是 Zookeeper 的技术栈的优越性。
简单介绍下 Zookeeper :
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
Zookeeper 的内部结构:
- 是层次化的目录结构;每个节点叫znode,并且有一个唯一的路径标识;节点znode可以包含数据和子节点;客户端应用可以在节点上设置监视器。
由上图,可看出dubbo服务在zookeeper注册中心的物理序列。
详细的会有另一篇文章介绍。。。。。
四、Dubbo 的默认协议与配置
默认配置:
一般项目中,默认推荐使用 dubbo 协议;
自定义配置:
dubbo中可进行多协议配置:
配置方式如下:
<!-- 多协议配置 -->
<dubbo:protocol name="dubbo" port="20880" />
<dubbo:protocol name="rmi" port="20980" />
五、 Dubbo 的服务调用与升级
【1】生产者服务变化是消费者怎么去调用?
使用长连接;所谓长连接就是指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接,一般需要自己做在线维持。
使用watch机制监听服务端的变化。
【2】关于服务涉及到的升级是怎么进行处理的?
启动一个小应用,来执行Shell,那么这个应用一直以RMI方式监听来自Java应用的命令,根据相应的命令执行脚本。这样的话,用这个java进程去调用Shell命令杀死tomcat,并重启,以此达到系统升级的目的就不会有问题了。
六、dubbo服务开发流程,运行流程?zookeeper注册中心的作用?
使用流程:
第一步:要在系统中使用dubbo应该先搭建一个注册中心,一般推荐使用zookeeper。
第二步:有了注册中心然后是发布服务,发布服务需要使用spring容器和dubbo标签来发布服务。并且发布服务时需要指定注册中心的位置。
第三步:服务发布之后就是调用服务。一般调用服务也是使用spring容器和dubbo标签来引用服务,这样就可以在客户端的容器中生成一个服务的代理对象,在action或者Controller中直接调用service的方法即可。
- Zookeeper注册中心的作用主要就是注册和发现服务的作用。类似于房产中介的作用,在系统中并不参与服务的调用及数据的传输。
七、 如何实现远程通信?
- Webservice:效率不高基于soap协议。项目中不推荐使用。
- 使用restful形式的服务:http+json。很多项目中应用。如果服务太多,服务之间调用关系混乱,需要治疗服务。
- 使用dubbo。使用rpc协议进行远程调用,直接使用socket通信。传输效率高,并且可以统计出系统之间的调用关系、调用次数。
以上是关于初步理解 Dubbo 与 Zookeeper的主要内容,如果未能解决你的问题,请参考以下文章