原创

解析Dubbo与Zookeeper

温馨提示:
本文最后更新于 2018年03月09日,已超过 2,450 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

Dubbo高可用

1.zookeeper宕机

我举个例子吧:

如果我一开始Zookeeper、消费者、提供者都运行起来了,But,Zookeeper突然就挂了,这个时候,我消费者还能不能正常使用了?

答:

Of course!因为有本地缓存!

原因:

1.监控中心宕掉不影响使用,只是丢失部分采样数据。

2.数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务。

3.注册中心对等集群,任意一台宕掉后,将自动切换到另一台。

4.注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯。

5.服务提供者无状态,任意一台宕掉后,不影响使用。

6.服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复。

这就是Dubbo的高可用:通过设计,减少系统不能提供服务的时间。

2.Dubbo直连

问:

如果没有注册中心,能不能调用服务呢?

答:

Of course!

可以直接通过@Reference指定UserService所在的机器地址:

@Reference(url="127.0.0.1:20882")
UserService userService;

机器地址在dubbo-admin的控制台点进去可以找到。

Dubbo与Zookeeper

其实,注册中心有四种常见的:

  1. Multicast 注册中心:Multicast 注册中心不需要启动任何中心节点,只要广播地址一样,就可以互相发现。
  2. Redis注册中心:基于 Redis实现的注册中心。
  3. Simple 注册中心:Simple 注册中心本身就是一个普通的 Dubbo 服务,可以减少第三方依赖,使整体通讯方式一致。
  4. Zookeeper注册中心:Zookeeper是 Apacahe Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,并推荐使用 。

Zookeeper的作用

zookeeper用来注册服务和进行负载均衡,哪一个服务由哪一个机器来提供必需让调用者知道,简单来说就是ip地址和服务名称的对应关系。当然也可以 通过硬编码的方式把这种对应关系在调用方业务代码中实现,但是如果提供服务的机器挂掉调用者无法知晓,如果不更改代码会继续请求挂掉的机器提供服务。 zookeeper通过心跳机制可以检测挂掉的机器并将挂掉机器的ip和服务对应关系从列表中删除。至于支持高并发,简单来说就是横向扩展,在不更改代码 的情况通过添加机器来提高运算能力。通过添加新的机器向zookeeper注册服务,服务的提供者多了能服务的客户就多了。

简单来说,在Dubbo中,Zookeeper就是一个教务系统,Dubbo就是学生,我们可以通过教务网管理系统,查找到对应的学生。我们首先通过注册入学,将学生和学号对应绑定。

当然,你也可以不注册直接直连!这就是我们所说的Dubbo直连!

Dubbo与Zookeeper交互的流程

流程说明:

  • 服务提供者启动时: 向 /dubbo/com.foo.BarService/providers 目录下写入自己的 URL 地址
  • 服务消费者启动时: 订阅 /dubbo/com.foo.BarService/providers 目录下的提供者 URL 地址。并向 /dubbo/com.foo.BarService/consumers 目录下写入自己的 URL 地址
  • 监控中心启动时: 订阅 /dubbo/com.foo.BarService 目录下的所有提供者和消费者 URL 地址。

支持以下功能:

  • 当提供者出现断电等异常停机时,注册中心能自动删除提供者信息
  • 当注册中心重启时,能自动恢复注册数据,以及订阅请求
  • 当会话过期时,能自动恢复注册数据,以及订阅请求
  • 当设置 <dubbo:registry check="false" /> 时,记录失败注册和订阅请求,后台定时重试
  • 可通过 <dubbo:registry username="admin" password="1234" /> 设置 zookeeper 登录信息
  • 可通过 <dubbo:registry group="dubbo" /> 设置 zookeeper 的根节点,不设置将使用无根树
  • 支持 * 号通配符 <dubbo:reference group="*" version="*" />,可订阅服务的所有分组和所有版本的提供者
本文目录