详解Zookeeper原理与应用场景
Zookeeper 分布式协调服务
应用之处:发布、订阅,命名服务,分布式协调和分布式锁
对比 Chubby:
Chubby 被定义为 分布式的锁服务
为分布式系统提供 松耦合、粗粒度 的分布式锁功能
其由两部分组成
提供数据的读写接口并管理相关配置数据的服务端
另一部分是客户端使用的 SDK
为对外提供稳定服务,每一个 Chubby 单元都由一组服务器组成,使用共识算法从集群中选举出主节点
实现原理:
文件系统:
Zookeeper 也使用文件系统组织系统中存储的资源
/parent
/parent/node1
/parent/node2
/parent/node3
其并没有文件和文件夹的概念,只有 Znode 概念,它既可以作为容器存储数据,也可以持有其他 Znode 形成父子关系
Znode 有四种类型:
PERSISTENT:持久
persistent_sequential:持久且有序
ephemeral:临时
ephemeral_sequential:临时且有序
临时节点:
客户端连接 Z 时才会保持存在的节点,当客户端和服务端连接中断,则当前连接持有的所有节点都会被删除
持久节点:
与临时节点相反,不会随会话连接的中断而删除,需要客户端主动删除
顺序性:
如果使用 Z 的顺序节点,那么所有节点就会在名字的末尾附加一个序列号,序列号是由父节点维护的单调递增计数器生成
临时/持续节点:
通知实现原理:
实现分布式排他锁:
第一种,通过创建临时 Znode 简单实现:
第二种,通过创建临时顺序 Znode 实现:
第三种,解决第二种的羊群效应:
客户端连接 Zookeeper,并在 /lock 下创建临时且有序(即EPHEMERAL_SEQUENTIAL)的子节点,如,第一个子节点为 /lock/lock-000,第二个为 /lock/lock-001,以此类推;
创建成功后,获取 /lock 下的子节点列表,判断刚创建的子节点在列表中是否是序号最小的子节点,如果是,则认为是获得锁,否则,监听刚创建的子节点的前一位子节点的删除消息,等获得该子节点的变更通知后,重复此步骤,直至获得锁为止;
执行业务代码;
完成业务代码后,删除对应子节点释放锁;
与 Redis 实现分布式锁比较:
Redis 需要自己实现重试逻辑,比较消耗性能;
zk 重试获取锁,对节点注册监听器即可,不需要主动尝试,性能开销小;
如果 Redis 获取锁的客户端挂了,就不能主动删除 key,只能等待 key 的超时到期,而 zk 会主动发现客户端断连,并将临时 znode 删除,触发后面的监听器逻辑
实现分布式共享锁:
扩展:
DNS:
DNS(Domain Name System,域名系统),万维网上作为域名和 IP 地址相互映射的一个分布式数据库,方便用户访问互联网,无需记住能够被机器直接读取的 IP 数串。
通过域名,最终得到该域名对应的 IP 地址的过程叫做域名解析。
DNS 协议运行在 UDP 协议智商,使用端口号 53。
共识算法:
参考
https://draveness.me/zookeeper-chubby
详解Zookeeper原理与应用场景的更多相关文章
- AspectJWeaver文件写入gadget详解和两种应用场景举例
目录 0 前言 1 环境 2 gadget解析 2.1 高版本Commons-Collections的防御措施 2.2 获取AspectJWeaver的调用链 2.3 gadget详解 3 两种应用场 ...
- 分布式大牛详解Zookeeper底层原理
很多学员都在反馈,说zk很难学,学的不是很明白,在这里,我继续带着大家详解一遍Zookeeper 首先zk是什么呢首先肯定是一个个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用 ...
- 丰富图文详解B-树原理,从此面试再也不慌
本文始发于个人公众号:TechFlow,原创不易,求个关注 本篇原计划在上周五发布,由于太过硬核所以才拖到了这周五.我相信大家应该能从标题当中体会到这个硬核. 周五的专题是大数据和分布式,我最初的打算 ...
- [转]Zookeeper原理及应用场景
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等.Zookeeper是hadoop的一个子项目,其 ...
- 线段树详解 (原理,实现与应用)(转载自:http://blog.csdn.net/zearot/article/details/48299459)
原文地址:http://blog.csdn.net/zearot/article/details/48299459(如有侵权,请联系博主,立即删除.) 线段树详解 By 岩之痕 目录: 一:综述 ...
- nmap详解之原理与用法
前言 nmap是一款开源免费的网络发现(Network Discovery)和安全审计(Security Auditing)工具.软件名字Nmap是Network Mapper的简称.Nmap最初是由 ...
- P2P技术详解(一):NAT详解——详细原理、P2P简介
1. IPv4协议和NAT的由来 今天,无数快乐的互联网用户在尽情享受Internet带来的乐趣.他们浏览新闻,搜索资料,下载软件,广交新朋,分享信息,甚至于足不出户获取一切日用所需.企业利用互联网发 ...
- ThreadLocal类详解:原理、源码、用法
以下是本文目录: 1.从数据库连接探究 ThreadLocal 2.剖析 ThreadLocal 源码 3. ThreadLocal 应用场景 4. 通过面试题理解 ThreadLocal 1.从数据 ...
- Percona-xtrabackup 使用详解与原理
现在有个需求需要对使用 innodb 的数据库进行热备.网上查了很多工具皆推荐 Percona-xtrabackup 于是就仔细了解调研一番. 我们可以前往 https://www.percona.c ...
随机推荐
- BZOJ1500: [NOI2005]维修数列 [splay序列操作]【学习笔记】
以前写过这道题了,但我把以前的内容删掉了,因为现在感觉没法看 重写! 题意: 维护一个数列,支持插入一段数,删除一段数,修改一段数,翻转一段数,查询区间和,区间最大子序列 splay序列操作裸题 需要 ...
- 图的封装(C++)
一. 问题说明 1.问题的简单描述 将图和网的的创建和基本操作分封装到class 用来熟悉此种数据结构和基于这种数据结构上的基本算法 采用VS2010编译环境 2.工作安排 二. 源代码 1.文件st ...
- Django复习1
django常用命令:http://www.cnblogs.com/ldq1996/p/7731930.html Django查询SQL语句: http://www.cnblogs.com/ldq19 ...
- C++学习笔记51:排序
//直接插入排序函数模板 template <class T> void insertionSort(T a[], int n) { int i, ; T temp; ; i < n ...
- 编程菜鸟的日记-初学尝试编程-易传媒笔试题(C++实现)
题目:已知存在两个非递减的有序链表List1和List2,现在需要你将两个链表合并成一个有序的非递增序列链表List3,请用C++编码实现.(所有链表均为单链表结构) 思路:此处链表是否都有表头并没有 ...
- UE4入门(三)
- Alpha冲刺——序言篇(任务与计划)
所属课程 软件工程1916|W(福州大学) 作业要求 Alpha冲刺--序言篇 团队名称 待就业六人组 一.代码规范 详见项目在线文档:项目代码规范 二.本次冲刺任务与计划 任务 内容 时间 第一天 ...
- 小甲鱼python第二讲课后习题
0.什么是BIF BIF为内置函数,英语全称为Build-in-Function Python3用input()取代了Python2的raw_input(),接收用户输入 1.用课堂上小甲鱼教的方法数 ...
- Some interesting facts about static member functions in C++
Ref http://www.geeksforgeeks.org/some-interesting-facts-about-static-member-functions-in-c/ 1) stati ...
- OKDownload 下载框架 断点续传 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...