初步理解 Dubbo 与 Zookeeper

个人博客网:https://wushaopei.github.io/    (你想要这里多有)

一、dubbo 与 zookeeper 的本质及其关系?

Dubbo是管理中间层的工具,在业务层到数据仓库间有非常多服务的接入和服务提供者需要调度,dubbo提供一个框架解决这个问题。

Zookeeper用来注册服务和进行负载均衡,哪一个服务有哪一个机器来提供必需让调用者知道,简单来说就是ip地址和服务名称的对应关系。

Dubbo和zookeeper的关系: dubbo会将注册中心进行抽象,使得它可以连接不同的存储媒介给注册中心提供服务,有zk、memcached、redis等。

二、关于Dubbo的服务调用原理:

  1. Dubbo在调用服务不成功时,默认会重试2次。可根据需求进行配置重试次数。

  2. 由于Dubbo的路由机制,会把超时的请求路由到其他机器上,而不是本机尝试,所以dubbo的重试机器也能一定程度的保证服务的质量。

  3. 注意:不合理的配置重试次数,当失败时会进行重试多次,可能在某个时间点出现性能问题,调用方再连续重复调用。此时系统请求变为正常值的retries倍,系统压力会大增,容易引起服务雪崩,需要根据业务情况规划好如何进行异常处理,合适进行重试。

三、Dubbo注册中心的介绍:

  • Dubbo的注册中心有好多种,包括Multicast、Zookeeper、Redis、Simple等。Dubbo官方推荐使用Zookeeper注册中心,我所使用过的也只是Zookeeper注册中心。
  • 如果说,为什么要使用 Zookeeper,那么我认为官方推荐是主要的原因,其次,是 Zookeeper 的技术栈的优越性。

简单介绍下 Zookeeper :

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

Zookeeper 的内部结构:

  • 是层次化的目录结构;每个节点叫znode,并且有一个唯一的路径标识;节点znode可以包含数据和子节点;客户端应用可以在节点上设置监视器。

初步理解 Dubbo 与 Zookeeper_第1张图片

由上图,可看出dubbo服务在zookeeper注册中心的物理序列。

详细的会有另一篇文章介绍。。。。。

四、Dubbo 的默认协议与配置

默认配置:

一般项目中,默认推荐使用 dubbo 协议;

自定义配置:

dubbo中可进行多协议配置:

配置方式如下:

     

      

五、 Dubbo 的服务调用与升级

【1】生产者服务变化是消费者怎么去调用?

使用长连接;所谓长连接就是指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接,一般需要自己做在线维持。

使用watch机制监听服务端的变化。

【2】关于服务涉及到的升级是怎么进行处理的?

启动一个小应用,来执行Shell,那么这个应用一直以RMI方式监听来自Java应用的命令,根据相应的命令执行脚本。这样的话,用这个java进程去调用Shell命令杀死tomcat,并重启,以此达到系统升级的目的就不会有问题了。

六、dubbo服务开发流程,运行流程?zookeeper注册中心的作用?

使用流程:

第一步:要在系统中使用dubbo应该先搭建一个注册中心,一般推荐使用zookeeper。

第二步:有了注册中心然后是发布服务,发布服务需要使用spring容器和dubbo标签来发布服务。并且发布服务时需要指定注册中心的位置。

第三步:服务发布之后就是调用服务。一般调用服务也是使用spring容器和dubbo标签来引用服务,这样就可以在客户端的容器中生成一个服务的代理对象,在action或者Controller中直接调用service的方法即可。

  • Zookeeper注册中心的作用主要就是注册和发现服务的作用。类似于房产中介的作用,在系统中并不参与服务的调用及数据的传输。

七、 如何实现远程通信?

  1. Webservice:效率不高基于soap协议。项目中不推荐使用。
  2. 使用restful形式的服务:http+json。很多项目中应用。如果服务太多,服务之间调用关系混乱,需要治疗服务。
  3. 使用dubbo。使用rpc协议进行远程调用,直接使用socket通信。传输效率高,并且可以统计出系统之间的调用关系、调用次数。

你可能感兴趣的:(dubbo+zookeeper)