Apache Dubbo & 服务注册中心Zookeeper
1.Dubbo简介
Apache Dubbo是一款高性能的Java RPC框架。其前身是阿里巴巴开源的一个高性能、轻量级的开源Java RPC框架,可以和Spring框架无缝集成
什么是RPC?
通信的两种方式:http,rpc
RPC全称为remote procedure call,即远程过程调用。比如两台服务器A和B,A服务器上部署一个应用,B服务器上部署一个应用,A服务器上的应用想调用B服务器上的应用提供的方法,由于两个应用不在一个内存空间,不能直接调用,所以需要通过网络来表达调用的语义和传达调用的数据。
对应的是本地过程调用:在一台电脑上,A方法调用B方法
需要注意的是RPC并不是一个具体的技术,而是指整个网络远程调用的过程
RPC是一个泛化的概念,严格来说一切远程调用手段都属于RPC范畴。各种开发语言都有自己的RPC框架。Java中RPC框架比较多,广泛使用的有RMI,Hessian,Dubbo等
Dubbo提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现
RPC两个核心模块:通讯和序列化(方便数据传输)
序列化:数据传输需要转换,网络传输中,发送方先序列化,接收方在反序列化得出结果。 序列化的作用就是把对象转换成字节数组可以传输和持久化
关于RPC形象的解释:https://zhuanlan.zhihu.com/p/36427583
2.Dubbo架构
Dubbo就是RPC框架
Dubbo架构图如下:
节点角色说明
节点 | 角色名称 |
Provider | 暴露服务的服务提供方 |
Consumer | 调用远程服务的服务消费方 |
Registry | 服务注册与发现的注册中心 |
Monitor | 统计服务的调用次数和调用时间的监控中心 |
Container | 服务运行容器 |
虚线是异步访问,实线都是同步访问
蓝色虚线:在启动时完成的功能
红色虚线(实线)都是程序运行过程中执行的功能
调用关系说明:
- 服务器负责启动,加载,运行服务提供者
- 服务提供者在启动时,向注册中心注册自己提供的服务
- 服务消费者在启动时,向注册中心订阅自己所需的服务
- 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者
- 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用
- 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
3.服务注册中心(Registry)
Dubbo官方推荐使用Zookeeper作为服务注册中心
3.1 Zookeeper介绍
Zookeeper是Apache Hadoop的子项目,是一个树形的目录服务,支持变更推送,适合作为Dubbo服务注册中心,工业强度较高,可用于生产环境,并推荐使用
为了便于理解Zookeeper的树形目录服务,我们先来看一下我们的电脑文件系统(也是一个树形目录结构):
我的电脑可以分为多个盘符(如C、D、E),每个盘符下可以创建多个目录,每个目录下面可以创建文件,也可以创建子目录,最终构成一个树形结构。通过这种树形结构的目录,我们可以将文件分门别类的进行存放,方便我们后期查找。而且磁盘上的每个文件都有一个唯一的访问路径,例如:C:\Windows\company\hello.txt
流程说明:
服务提供者(Provider)启动时:向/dubbo/com.foo.BarService/providers目录下写入自己的URL地址
服务消费者(Consumer)启动时:订阅/dubbo/com.foo.BarService/providers目录下写入自己的URL地址。并向/dubbo/com.foo.BarService/consumers目录下写入自己的URL地址
监控中心(Monitor)启动时:订阅/dubbo/com.foo.BarService目录下的所有提供者和消费者的URL地址
3.2 Windows下安装zookeeper
(1)下载zookeeper:https://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/,我们下载3.4.14,解压zookeeper
(2)运行/bin/zkServer.cmd,初次运行会报错,没有zoo.cfg配置文件
可能会遇到的问题:闪退!
解决方案:编辑zkServer.cmd文件末尾添加pause。这样运行出错就不会退出,会提示错误信息,方便找到原因
提示没有zoo.cfg文件
可以看到当前文件夹中确实没有zoo.cfg文件
复制zoo_sample.cfg文件,改名成zoo.cfg
之后,再点击zkServer.cmd就可以正常运行了
再点击客户端的zkCli.cmd,客户端就出现
3.3 Windows下安装dubbo-admin
dubbo本身并不是一个服务软件,它其实是一个jar包,能够帮你的java程序连接到zookeeper,并利用zookeeper消费,提供服务
但是为了让用户更好的管理监控众多的dubbo服务,官方提供了一个可视化的监控程序dubbo-admin,不过这个监控即使不安装也不影响
【查看我们注册了哪些服务,哪些服务被消费了】
3.3.1 安装步骤
1.下载dubbo-admin
地址:https://github.com/apache/dubbo-admin/tree/master
2. 解压进入目录
指定注册中心地址
如果之前zookeeper的地址、端口号2181被改了,就在这里把地址、端口号改一下,即修改dubbo-admin-master\dubbo-admin\src\main\resources\application.properties
server.port=7001 spring.velocity.cache=false spring.velocity.charset=UTF-8 spring.velocity.layout-url=/templates/default.vm spring.messages.fallback-to-system-locale=false spring.messages.basename=i18n/message spring.root.password=root spring.guest.password=guest dubbo.registry.address=zookeeper://127.0.0.1:2181
3.在项目目录下打包dubbo-admin
构建:
mvn clean package -Dmaven.test.skip=true
生成jar包
4.启动
执行dubbo-admin/target下的dubbo-admin-0.0.1-SNAPSHOT.jar
java -jar dubbo-admin-0.0.1-SNAPSHOT.jar
【注意:zookeeper的服务一定要打开】
先运行zookeeper,注册中心是dubbo必须的一部分,必须配置zookeeper的admin.serverPort不为8080,否则会导致dubbo-admin启动不了
5.成功之后
访问http://localhost:7001/,用户名root 密码 root
https://github.com/apache/dubbo-admin/blob/develop/README_ZH.md