Dubbo 源码解析 —— Zookeeper 创建节点
前言
在之前dubbo源码解析-本地暴露中的前言部分提到了两道高频的面试题,其中一道 dubbo中zookeeper做注册中心,如果注册中心集群都挂掉,那发布者和订阅者还能通信吗?
在上周的dubbo源码解析-zookeeper连接中已经讲到,这周解析的是另一道,即 服务提供者能实现失效踢出是根据什么原理?
上周就有朋友问到我,为什么我的源码解析总是偏偏要和面试题挂上钩呢?原因很简单
1.dubbo源码这么多,试问你从哪里做为切入点?也就是说该从哪里看起?所以以面试题为切入点,你可以理解为我是在回答"怎么看源码"这个问题.
2.我们研发飞机大炮并不是为了侵略,有时候可能只是单纯的想保护自己.
3.我的源码解析虽然以面试题为基础,但却不以面试为目的.因为面试如果问到 dubbo
的问题,绝大多数都是官方文档的内容,根本就没到需要看源码的程度.看源码的最终目的是为了解决实际问题,后面我会以实际的问题为例子,实战讲一讲看源码我究竟解决了什么网上搜不到,必须要看源码才能弄清楚的问题.所以现在就可以大胆在简书关注肥朝,已免后面错过精彩内容.
插播面试题
- 服务提供者能实现失效踢出是什么原理(高频题)
- zookeeper的有哪些节点,他们有什么区别?讲一下应用场景
直入主题
同上周的 zookeeper连接
一样,这周我们讲的还是一行代码,如下图
那么我们打上断点开始
下面就要开始创建节点了
现在我们虽然看完源码了,但是还是没法回答面试题?那么下面就要敲黑板划重点了
敲黑板画重点
zookeeper中节点是有生命周期的.具体的生命周期取决于节点的类型.节点主要分为 持久节点(Persistent)
和 临时节点(Ephemeral)
,但是更详细的话还可以加上 时序节点(Sequential)
,创建节点中往往组合使用,因此也就是4种.
- 持久节点
- 持久顺序节点
- 临时节点
- 临时顺序节点
其实不要纠结于分为几种,这就和语文的断句一样,你断句的方法不同,断出来的结果也不同.那么我们主要讲讲 持久节点
和 临时节点
的区别
持久节点
所谓持久节点,是指在节点创建后,就一直存在,直到有删除操作来主动清除这个节点,也就是说不会因为创建该节点的客户端会话失效而消失
临时节点
临时节点的生命周期和客户端会话绑定,也就是说,如果客户端会话失效,那么这个节点就会自动被清除掉
应用场景
zookeeper常用的应用场景我在上周已经画了思维导图,这里就不重复展示了.就拿 分布式协调/通知
来举例(这个例子既是在回答第一个面试题,也是在回答第二个面试题).
在分布式系统中,我们常常需要知道某个机器是否可用,传统的开发中,可以通过Ping某个主机来实现,Ping得通说明对方是可用的,相反是不可用的,ZK 中我们让所有的机其都注册一个临时节点,我们判断一个机器是否可用,我们只需要判断这个节点在ZK中是否存在就可以了,不需要直接去连接需要检查的机器,降低系统的复杂度
写在最后
继 集群容错
后, 服务发布
的内容讲得也差不多了.下周来和大家一起对 服务发布
做一个总结.期待下周继续与你相遇.鉴于本人才疏学浅,不对的地方还望斧正,也欢迎关注我的简书,名称为 肥朝
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 有些包卸载了就回不去了
- 使用 Vue-CLI 3.x 快速搭建「Vue + TS + Kbone + Kbone-UI + 云开发」 项目
- 「R」R Docker 教程(续)
- 为什么R4.0版本内置的R包那么多
- 为何cytoscape总是说我没有java呢
- C#委托和事件
- JSONP原理及使用
- js查询数组或者List类型是否包含某个元素
- jqgrid 获取当前页数据
- C#字符串截取
- 使用Topshelf部署Windows服务
- IIS进程回收后第一次访问慢的问题
- k8s中服务添加hosts及一键转换脚本
- 【一起学系列】之状态模式:你听过“流程”模式吗?
- 【一起学系列】之代理模式:是为了控制访问啊!