1. ZooKeeper是一个高性能的分布式应用程序协调服务。它暴露了一些常用服务, 例如命名注册, 配置管理, 同步控制和群组服务。我们可以使用ZooKeeper来实现达成共识, 集群管理, 领导者选举和制定协议。您可以根据自己的特定需求在此基础上进行构建。

2. ZooKeeper的目标就是封装好复杂易出错的关键服务, 将简单易用的接口和性能高效、功能稳定的系统提供给用户。

3. ZooKeeper是以Fast Paxos算法为基础的, Paxos算法存在活锁的问题, 即当有多个proposer交错提交时, 有可能互相排斥导致没有一个proposer能提交成功, 而Fast Paxos做了一些优化, 通过选举产生一个leader(领导者), 只有leader才能提交proposer, 具体算法可见Fast Paxos。因此, 要想弄懂ZooKeeper首先得对Fast Paxos有所了解。

4. ZooKeeper数据结构

4.1. 在ZooKeeper中, znode是一个跟Unix文件系统路径相似的节点, 可以以key-value的形式往这个节点存储或获取数据。名称key是由斜线/分割的一系列路径元素, ZooKeeper 名称空间中的每个节点都是由一个路径标识的。

4.2. 如果在创建znode时Flag设置为EPHEMERAL, 那么当创建这个znode的节点的客户端和ZooKeeper失去连接后, 这个znode也将自动删除。ZooKeeper客户端和服务器采用长连接方式, 每个客户端和服务器通过心跳来保持连接, 这个连接状态称之为会话(Session), 如果znode是临时节点, 当Session结束的时候, znode也不存在了, 即临时节点是会话级别的。

4.3. znode可以有子节点目录, 被标记为EPHEMERAL的节点不能有子节点目录。

4.4. znode是有版本的, 每个znode中存储的数据可以有多个版本, 也就是一个访问路径可以存储多份数据。

4.5. ZooKeeper使用Watcher察觉事件信息。当客户端接收到事件信息, 比如连接超时、节点数据改变、子节点改变, 可以调用相应的行为来处理数据。

5. ZooKeeper组成

5.1. ZooKeeper Server根据其身份特性分成三种: Leader, Follower和Observer。

5.2. Leader: 负责客户端的Writer类型请求。

5.3. Follower: 负责客户端Reader类型请求, 参与Leader选举等。

5.4. Observer: 特殊的Follower, 其可以接受客户端Reader请求, 但不参与选举。

6. ZooKeeper应用场景

6.1. ZooKeeper从设计模式角度来看, 是一个基于观察者模式设计的分布式服务管理框架, 它负责存储和管理大家都关心的数据, 然后接受观察者的注册, 一旦这些数据的状态发生变化, ZooKeeper就将负责通知已经在ZooKeeper上注册的那些观察者做出相应的反应。

6.2. ZooKeeper是一个典型的分布式数据一致性的解决方案, 分布式应用程序可以基于它实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。

6.3. 配置管理: 在分布式应用环境中很常见, 比如我们平常的应用系统中, 经常会碰到这样的需求: 如机器的配置列表、运行时的开关配置、数据库配置信息等。这些全局配置信息通常具备以下三个特征:

  • 数据量比较小。
  • 数据内容在运行时动态发生变化。
  • 集群中各个集群共享信息, 配置一致。

6.4. 集群管理: ZooKeeper不仅能够帮你维护当前的集群中机器的服务状态, 而且能够帮助你选出一个总管, 让这个总管来管理集群, 这就是ZooKeeper的另外一个功能Leader, 并实现集群容错功能。

  • 希望知道当前集群中究竟有多少机器工作。
  • 对集群中每天集群的运行时状态进行数据收集。
  • 对集群中每台集群进行上下线操作。

7. CAP原则

7.1. 一致性(C): 在分布式系统中的所有数据备份, 在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)

7.2. 可用性(A): 保证每个请求不管成功或者失败都有响应。

7.3. 分区容错性(P): 系统中任意信息的丢失或失败不会影响系统的继续运作。

7.4. 一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。

7.5. 在这三个基本需求中, 最多只能同时满足其中的两项, P是必须的, 因此只能在CP和AP中选择。zookeeper保证的是CP, 对比spring cloud系统中的注册中心eruka实现的是AP。

8. BASE理论

8.1. BASE是Basically Available(基本可用)、Soft-state(软状态)和Eventually Consistent(最终一致性)三个短语的缩写。

8.2. 基本可用: 在分布式系统出现故障, 允许损失部分可用性(服务降级、页面降级)。

8.3. 软状态: 允许分布式系统出现中间状态。而且中间状态不影响系统的可用性。这里的中间状态是指不同的data replication(数据备份节点)之间的数据更新可以出现延时的最终一致性。

8.4. 最终一致性: data replications经过一段时间达到一致性。

8.5. BASE理论是对CAP中的一致性和可用性进行一个权衡的结果, 理论的核心思想就是: 我们无法做到强一致, 但每个应用都可以根据自身的业务特点, 采用适当的方式来使系统达到最终一致性

001_ZooKeeper简介相关推荐

  1. etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理

    1. etcd 简介 etcd 官网定义: A highly-available key value store for shared configuration and service discov ...

  2. Docker学习(一)-----Docker简介与安装

    一.Docker介绍 1.1什么是docker Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植 ...

  3. 【Spring】框架简介

    [Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...

  4. TensorRT简介

    TensorRT 介绍 引用:https://arleyzhang.github.io/articles/7f4b25ce/ 1 简介 TensorRT是一个高性能的深度学习推理(Inference) ...

  5. 谷粒商城学习笔记——第一期:项目简介

    一.项目简介 1. 项目背景 市面上有5种常见的电商模式 B2B.B2C.C2B.C2C.O2O B2B 模式(Business to Business),是指商家和商家建立的商业关系.如阿里巴巴 B ...

  6. 通俗易懂的Go协程的引入及GMP模型简介

    本文根据Golang深入理解GPM模型加之自己的理解整理而来 Go协程的引入及GMP模型 一.协程的由来 1. 单进程操作系统 2. 多线程/多进程操作系统 3. 引入协程 二.golang对协程的处 ...

  7. Linux 交叉编译简介

    Linux 交叉编译简介 主机,目标,交叉编译器 主机与目标 编译器是将源代码转换为可执行代码的程序.像所有程序一样,编译器运行在特定类型的计算机上,输出的新程序也运行在特定类型的计算机上. 运行编译 ...

  8. TVM Operator Inventory (TOPI)简介

    TOPI简介 这是 TVM Operator Inventory (TOPI) 的介绍.TOPI 提供了比 TVM 具有更高抽象的 numpy 风格的,通用操作和调度.TOPI 如何在 TVM 中,编 ...

  9. 计算机视觉系列最新论文(附简介)

    计算机视觉系列最新论文(附简介) 目标检测 1. 综述:深度域适应目标检测标题:Deep Domain Adaptive Object Detection: a Survey作者:Wanyi Li, ...

最新文章

  1. SAP MM UB类型的退货STO流程简述
  2. java中字符与字节的编码关系
  3. 【C 语言】内存四区原理 ( 栈内存属性增长方向 | 栈内存开口方向 | 代码示例 )
  4. 这个男人让你的爬虫开发效率提升8倍
  5. matlab连续信号离散化_MATLAB开发自动驾驶第八课-控制信号帧的回放以进行标签化处理...
  6. 运行时报错RuntimeError: expected device cpu but got device cuda:0
  7. 为什么技术最牛的码农当不了首席工程师?
  8. ffmpeg文档2:输出到屏幕
  9. 动态加载js文件以支持跨域脚本
  10. 使用mybatis-spring-boot-starter如何打印sql语句
  11. [Asp.net]Uploadify上传大文件,Http error 404 解决方案 - wolfy
  12. ubuntu重装用户root认证
  13. SOEM报文数据结构介绍
  14. Unity 3D | 在Unity3D中创建/执行C#脚本
  15. hello guass
  16. 推荐一个文献翻译软件--Deja Vu X
  17. 2021国产数据库领域最具商业合作价值企业盘点
  18. 借华为鸿蒙系统发布,谈谈操作系统的爱恨情仇发展史
  19. 在华为云 CCE 上部署 EMQX MQTT 服务器集群
  20. Java基础|一图总结Java File类(与IO密切相关)

热门文章

  1. 【Linux系列】【基础版】第二章 文件、目录管理
  2. jq实现跳转404跳转,原生js实现跳转404跳转
  3. 技术人员如何创业《四》- 打造超强执行力团队
  4. POS DES MAC 算法
  5. sqlserver2008中如何用右键可视化的设置外键
  6. redis、memcache、mongoDB有哪些区别?
  7. mysql 游标的使用
  8. Scrapy框架----pipeline---------数据保存EXCEL
  9. Python遍历列表时删除元素
  10. j2ee gradle构建