解析Dubbo与Zookeeper
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
其实,注册中心有四种常见的:
- Multicast 注册中心:Multicast 注册中心不需要启动任何中心节点,只要广播地址一样,就可以互相发现。
- Redis注册中心:基于 Redis实现的注册中心。
- Simple 注册中心:Simple 注册中心本身就是一个普通的 Dubbo 服务,可以减少第三方依赖,使整体通讯方式一致。
- 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="*" />
,可订阅服务的所有分组和所有版本的提供者
- 本文标签: Dubbo Zookeeper
- 本文链接: http://www.lzhpo.com/article/62
- 版权声明: 本文由lzhpo原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权