文章目录
- 前言
- 一、PRC框架
- 二、什么是dubbo
- 三、dubbo与zookeeper
- 四、zookeeper 下载安装
- 1. 下载
- 2. 启动报错
- 3.启动测试
前言
- 下载 zookeeper 3.6.2 bin 版本
-
zookeeper 之于 dubbo 相当于 eureka 之于 springcloud。
- springcloud 和 dubbo 都是 RPC 框架。
一、PRC框架
RPC(Remote Procedure Call)是指远程过程调用,是一种进程间的通信方式,他是一种技术的思想,而不是规范。
它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。
即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。
两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。
为什么要用RPC?
无法在一个进程内,甚至一个计算机内无法通过本地调用的方式完成的需求,
不同的系统间的通讯,甚至不同的组织间的通讯,由于计算能力需要横向扩展,需要在多台机器组成的集群上部署应用。
RPC就是要像调用本地的函数一样调用运程函数。
步骤分解
RPC两个核心模块:通讯,序列化
二、什么是dubbo
Apache Dubbo是一款高性能、轻量级的开源java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现
dubbo官网:http://dubbo.apache.org/
dubbo 4 组件
-
服务提供者(Provider)
:暴露服务的服务提供方,服务提供者在启动时,向注册中心注册自己提供的服务 -
服务消费者(Consumer)
:调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自己所需的服务,服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,在选另一台调用。 -
注册中心(Registry)
:注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。 -
监控中心(Monitor)
:服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
调用关系说明
- 服务容器负责启动,加载,运行服务提供者
- 服务提供者在启动时,向注册中心注册自己提供的服务
- 服务消费者在启动时,向注册中心订阅自己所需的服务
- 注册中心返回服务提供者地址列表给消费者,如果有变,注册中心将基于长连接推送变更数据给消费者。
服务消费者,从服务者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,在选另一台调用
服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
三、dubbo与zookeeper
Dubbo建议使用Zookeeper作为服务的注册中心。
-
Zookeeper的作用
:
zookeeper用来注册服务和进行负载均衡
,哪一个服务由哪一个机器来提供必需让调用者知道,简单来说就是ip地址和服务名称的对应关系。当然也可以 通过硬编码的方式把这种对应关系在调用方业务代码中实现,但是如果提供服务的机器挂掉调用者无法知晓,如果不更改代码会继续请求挂掉的机器提供服务。 zookeeper通过心跳机制可以检测挂掉的机器并将挂掉机器的ip和服务对应关系从列表中删除。至于支持高并发,简单来说就是横向扩展,在不更改代码 的情况通过添加机器来提高运算能力。通过添加新的机器向zookeeper注册服务,服务的提供者多了能服务的客户就多了。 -
dubbo
:
是管理中间层的工具,在业务层到数据仓库间有非常多服务的接入和服务提供者需要调度,dubbo提供一个框架解决这个问题。
注意这里的dubbo只是一个框架,至于你架子上放什么是完全取决于你的,就像一个汽车骨架,你需要配你的轮子引擎。这个框架中要完成调度必须要有一个分布式的注册中心,储存所有服务的元数据,你可以用zk,也可以用别的,只是大家都用zk。 -
zookeeper和dubbo的关系
:
Dubbo的将注册中心进行抽象,是得它可以外接不同的存储媒介给注册中心提供服务,有ZooKeeper,Memcached,Redis等。
引入了ZooKeeper作为存储媒介,也就把ZooKeeper的特性引进来。首先是负载均衡,单注册中心的承载能力是有限的,在流量达到一定程度的时 候就需要分流,负载均衡就是为了分流而存在的,一个ZooKeeper群配合相应的Web应用就可以很容易达到负载均衡;资源同步,单单有负载均衡还不 够,节点之间的数据和资源需要同步,ZooKeeper集群就天然具备有这样的功能;命名服务,将树状结构用于维护全局的服务地址列表,服务提供者在启动 的时候,向ZK上的指定节点/dubbo/${serviceName}/providers目录下写入自己的URL地址,这个操作就完成了服务的发布。 其他特性还有Mast选举,分布式锁等。
zookeeper 之于 dubbo 相当于 eureka 之于 springcloud。
四、zookeeper 下载安装
1. 下载
- zookeeper 官网:https://zookeeper.apache.org/
- 点击想下的版本,点击即可。我这里下载 3.6.2 bin版本。
- 解压如下
2. 启动报错
-
问题一:启动闪退
在 bin/zkServer.cmd 启动文件中添加如下单词即可 -
问题二:找不到或无法加载主类 org.apache.zookeeper.server.quorum.QuorumPeerMain
- 从目前本3.5.5开始,带有bin名称的包才是我们想要的下载可以直接使用的里面有编译后的二进制的包,而之前的普通的tar.gz的包里面是只是源码的包无法直接使用。
- 在解压根目录下新建data和log文件夹,进入 conf 目录复制 zoo_sample.cfg 并重命名为 zoo.cfg,编辑 zoo.cfg 的 dataDir 和dataLogDir(自己建),对应data和log文件夹。
-
问题三:ZooKeeper audit is disabled
zookeeper使用的过程中发现控制台输出 ZooKeeper audit is disabled,搜索一番发现不少文章都是说版本问题。
在 bin/zkServer.cmd 启动文件中设置如下值即可 - 最后双击 bin/zkServer.cmd 文件启动即可。
出现如下,启动成功
3.启动测试
使用zkCli.cmd测试
命令解释:
ls /
:列出zookeeper根下保存的所有节点
create -e /dz 007
:创建一个dz节点,值为007
get /dz
:获取/dz节点的值