Dubbo 源码解析 —— Zookeeper 创建节点

Dubbo 源码解析 —— Zookeeper 创建节点

作者:肥朝 原文地址:https://www.jianshu.com/p/f42c69e4bd3e

友情提示:欢迎关注公众号【芋道源码】。😈关注后,拉你进【源码圈】微信群和【肥朝】搞基嗨皮。

友情提示:欢迎关注公众号【芋道源码】。😈关注后,拉你进【源码圈】微信群和【肥朝】搞基嗨皮。

友情提示:欢迎关注公众号【芋道源码】。😈关注后,拉你进【源码圈】微信群和【肥朝】搞基嗨皮。

前言

在之前dubbo源码解析-本地暴露中的前言部分提到了两道高频的面试题,其中一道 dubbozookeeper做注册中心,如果注册中心集群都挂掉,那发布者和订阅者还能通信吗?在上周的dubbo源码解析-zookeeper连接中已经讲到,这周解析的是另一道,即 服务提供者能实现失效踢出是根据什么原理?

上周就有朋友问到我,为什么我的源码解析总是偏偏要和面试题挂上钩呢?原因很简单

1.dubbo源码这么多,试问你从哪里做为切入点?也就是说该从哪里看起?所以以面试题为切入点,你可以理解为我是在回答"怎么看源码"这个问题.

2.我们研发飞机大炮并不是为了侵略,有时候可能只是单纯的想保护自己.

3.我的源码解析虽然以面试题为基础,但却不以面试为目的.因为面试如果问到 dubbo的问题,绝大多数都是官方文档的内容,根本就没到需要看源码的程度.看源码的最终目的是为了解决实际问题,后面我会以实际的问题为例子,实战讲一讲看源码我究竟解决了什么网上搜不到,必须要看源码才能弄清楚的问题.所以现在就可以大胆在简书关注肥朝,已免后面错过精彩内容.

插播面试题

  • 服务提供者能实现失效踢出是什么原理(高频题)

  • zookeeper的有哪些节点,他们有什么区别?讲一下应用场景

直入主题

同上周的 zookeeper连接一样,这周我们讲的还是一行代码,如下图

Dubbo 源码解析 —— Zookeeper 创建节点

那么我们打上断点开始

Dubbo 源码解析 —— Zookeeper 创建节点

Dubbo 源码解析 —— Zookeeper 创建节点

下面就要开始创建节点了

Dubbo 源码解析 —— Zookeeper 创建节点

Dubbo 源码解析 —— Zookeeper 创建节点

Dubbo 源码解析 —— Zookeeper 创建节点

Dubbo 源码解析 —— Zookeeper 创建节点

现在我们虽然看完源码了,但是还是没法回答面试题?那么下面就要敲黑板划重点了

Dubbo 源码解析 —— Zookeeper 创建节点

敲黑板画重点

zookeeper中节点是有生命周期的.具体的生命周期取决于节点的类型.节点主要分为 持久节点(Persistent)临时节点(Ephemeral),但是更详细的话还可以加上 时序节点(Sequential),创建节点中往往组合使用,因此也就是4种.

  • 持久节点

  • 持久顺序节点

  • 临时节点

  • 临时顺序节点

其实不要纠结于分为几种,这就和语文的断句一样,你断句的方法不同,断出来的结果也不同.那么我们主要讲讲 持久节点临时节点的区别

持久节点

所谓持久节点,是指在节点创建后,就一直存在,直到有删除操作来主动清除这个节点,也就是说不会因为创建该节点的客户端会话失效而消失

临时节点

临时节点的生命周期和客户端会话绑定,也就是说,如果客户端会话失效,那么这个节点就会自动被清除掉

应用场景

zookeeper常用的应用场景我在上周已经画了思维导图,这里就不重复展示了.就拿 分布式协调/通知来举例(这个例子既是在回答第一个面试题,也是在回答第二个面试题).

在分布式系统中,我们常常需要知道某个机器是否可用,传统的开发中,可以通过Ping某个主机来实现,Ping得通说明对方是可用的,相反是不可用的,ZK 中我们让所有的机其都注册一个临时节点,我们判断一个机器是否可用,我们只需要判断这个节点在ZK中是否存在就可以了,不需要直接去连接需要检查的机器,降低系统的复杂度

写在最后

集群容错后, 服务发布的内容讲得也差不多了.下周来和大家一起对 服务发布做一个总结.期待下周继续与你相遇.鉴于本人才疏学浅,不对的地方还望斧正,也欢迎关注我的简书,名称为 肥朝


发表评论