原文格式可以访问:https://www.rockysky.tech

分布式系统的基本操作

  1. 主节点选举:在绝大多数分布式系统中,都需要进行主节点选举。主节点负责管理协调其它节点或者同步集群中其它节点的数据。为了确保集群中一直存在一个主节点,需要有主节点的选举机制。但现有主节点无法访问的时候,自动产生新的主节点接管集群管理和协调的任务
  2. 宕机检测:当集群中有某个节点或者某部分节点脱离集群或者不可访问的时候,分布式系统的其他节点可以识别出来,并执行相应的步骤,去替换或者接管宕机节点的工作,使得整个集群的功能不会受到影响。
  3. 集群组管理:对于比较大规模的分布式系统,我们需要管理其不同的分组。比如说Kubernetes集群就需要管理基本的服务单位POD。如何去管理和协调每个组的资源和任务分配也是分布式系统必须要处理的任务。
  4. 元数据管理(Metadata):在一个分布式系统中需要保存一些元数据。比如每个节点正在执行的任务,任务的进度,各个节点的状态。节点间需要共享的一些同步数据等等。

Zookeeper是什么

Zookeeper是一个分布式系统协调器,其本身并不直接实现上述的任何一个分布式系统的基本操作。Zookeeper本身其实就是一个通过Raft共识机制协同的分布式键值对文件存储系统。Zookeeper的文件以树状形式存储,每个节点都可以存储数据,每个节点叫做一个znode,如下图所示:

和普通的文件结构不同,Zookeeper没有目录的概念,每个节点都可以存储数据。

持久性节点(Persistent)和易失性(Ephemeral)节点

Zookeeper的节点分为两种主要的类型,即持久性节点和易失性节点,

  • 持久性节点(Persistent),这种节点的数据必须能够一直保存,即使写入这些数据的客户端连接丢失,或者客户端宕机。这些节点和数据任然必须保留。举个例子,比如说一个并行运算的集群,给每个slave节点分配的运算任务必须要能够记录下来,即使集群的master节点或者slave节点宕机,为了保证最后的运算能够完整,也不能够把这些任务删除。
  • 易失性节点(Ephemeral)一旦客户端本身连接中断或者宕机,这些数据节点会被释放。例如,一个集群的Master节点挂了,那这个Master节点的锁就必须要释放出来,这个锁的机制就可以用易失性节点来完成。

有条件的更新和Watch机制

Zookeeper支持一种watches机制。客户端可以给znode设定watch机制,一旦这个znode被更新,就会触发通知机制发送消息给客户端,同时删除这个watch。如果ZooKeeper服务器本身挂掉了,那客户端会直接收到本地通知。

ZooKeeper保证的是什么

ZooKeeper的设计原则

Zookeeper本身被设计为一个非常简单,高速和可靠的服务。从而为各类分布式系统提供高级别和负责的分布式系统基本操作。对于分布式系统的CAP分类中,ZooKeeper是一种CP系统,重点保证的是强一致性。包括以下的特点:

  • 顺序一致性:客户端对节点的更新一定会保证其最终更新先后顺序的的一致性

  • 原子性:对znode的更新只会有成功,失败两种状态,不会有中间结果

  • 单点一致性:客户端对zookeeper集群中任何一节点看到的znode结构和数据完全相同

  • 高可靠性:一旦对znode更新成功,其结果会一直保持,直到下一次变更

  • 时效性:在一定时间段,确保系统数据最新(up-to-date)

    不过需要注意的是Zookeeper不确保数据的可用性,必须要等到所有ZooKeeper集群节点都同步成功,数据更新才会确认操作成功。这是才能够读取这个数据。时效性是值得能够确保在一定的时间段内可以完成数据跟新和同步。

极为简单的API设计

Zookeeper通过API提供服务,提供以下几个API。

  • create : 在树状结构上创建znode
  • delete : 删除znode
  • exists : 测试某个znode是否存在
  • get data : 读取某个znode的数据
  • set data : 向Znode写入数据
  • get children : 获取子节点列表
  • sync : 等待所有zookeeper节点广播和同步完成。

性能:

在大量读和少量写入的情况先,Zookeeper性能是比较高的。

可靠性:

官方数据显示,Zookeeper选举主节点的时间大概在200ms,当节点从新恢复后,整个系统性能可以迅速恢复。

Zookeeper分布式系统协同器概念快速学习的更多相关文章

  1. ZooKeeper快速学习

    "一入Java深似海",过去自身对于分布式的接触,始终处于使用别人构建的框架的水平,最多就是在nginx配置一下第4层的负载均衡(最后有介绍).随着java使用深入,本文将重点理解 ...

  2. ASP.NET Core on K8S学习初探(2)K8S基本概念快速一览

    在上一篇<单节点环境搭建>中,通过Docker for Windows在Windows开发机中搭建了一个单节点的K8S环境,接下来就是动人心弦的部署ASP.NET Core API到K8S ...

  3. [转帖]从0开始的高并发(一)--- Zookeeper的基础概念

    从0开始的高并发(一)--- Zookeeper的基础概念 https://juejin.im/post/5d0bd358e51d45105e0212db 前言 前面几篇以spring作为主题也是有些 ...

  4. 大白话带你认识 ZooKeeper !重要概念一网打尽!

    大家好,我是 「后端技术进阶」 作者,一个热爱技术的少年. 1. 前言 相信大家对 ZooKeeper 应该不算陌生.但是你真的了解 ZooKeeper 到底有啥用不?如果别人/面试官让你给他讲讲对于 ...

  5. 快速学习C语言一: Hello World

    估计不会写C语言的同学也都听过C语言,从头开始快速学一下吧,以后肯定能用的上. 如果使用过其它类C的语言,如JAVA,C#等,学C的语法应该挺快的. 先快速学习并练习一些基本的语言要素,基本类型,表达 ...

  6. 60分钟Python快速学习(转)

    60分钟Python快速学习(给发哥一个交代) 阅读目录 第一步:开发环境搭建: 第一个Python功能:初识Python 02.Python中定义变量不需要数据类型 03.在Pythod中定义方法 ...

  7. 阿里巴巴Java开发手册快速学习

    Java作为一门名副其实的工业级语言,语法友好,学习简单,大规模的应用给代码质量的管控带来了困难,特别是团队开发中,开发过程中的规范会直接影响最终项目的稳定性. 善医者“未有形而除之”,提高工程健壮性 ...

  8. Javaweb快速学习

    孙卫琴老师的javaweb一书已经买了很多年,由于很厚一直也没有去好好阅读下, 项目发布后有闲暇时间,决定快速学习了,毕竟很多概念和知识主要还是复习. 对于互联网,我们可以简单认为浏览器就是会人类语言 ...

  9. HBase应用快速学习

    HBase是一个高性能.面向列.可伸缩的开源分布式NoSQL数据库,是Google Bigtable的开源实现. HBase的思想和应用和传统的RDBMS,NoSQL等有比较大的区别,这篇文章从HBa ...

随机推荐

  1. JS中字符串切片

    1.charAt 作用:根据索引值获取字符串 s1= "Hello world"; // 根据索引求字符 var myChar = s1.charAt(4); console.lo ...

  2. html恶搞之无限弹窗

    啦啦啦啦啦 恶搞别人吗? 把下面代码做成html文件发给别人,用浏览器打开就可以看见效果了 <!DOCTYPE html> <html><head><meta ...

  3. RMQ算法使用ST表实现

    RMQ RMQ (Range Minimum Query),指求区间最小值.普通的求区间最小值的方法是暴力. 对于一个数列: \[ A_1,~ A_2,~ A_3,~ \cdots,~ A_n \] ...

  4. selenium,测试套件的使用

    学习 selenium-webdriver 已经一段时间了,最近学习到,测试用例的批量执行,和测试套件的使用,有点自己的理解,不晓得对不对,希望大家指正!   写一个测试用例 baidu.py   c ...

  5. 【WPF学习】第二十一章 特殊容器

    内容控件不仅包括基本控件,如标签.按钮以及工具提示:它们还包含特殊容器,这些容器可用于构造用户界面中比较大的部分区域. 首先介绍ScrollViewer控件,该控件直接继承自ContentContro ...

  6. [CCPC2019 ONLINE]E huntian oy

    题意 http://acm.hdu.edu.cn/showproblem.php?pid=6706 思考 打表出奇迹. 注意到这个式子有一大堆强条件限制,最后化为: $$\frac{1}{2}\sum ...

  7. [ZJOI2007]报表统计(splay,堆)

    [ZJOI2007]报表统计(luogu) Description 题目描述 Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工作,作为她的生日礼物之一. ...

  8. ios---scrollview用法总结

    一.使用步骤: 1.添加子组件到scrollview //必要步骤 2.设置clipsToBounds来确定超出范围是否被剪裁 (默认yes) self.scrolltest.clipsToBound ...

  9. Linux文件内容重定向

    文件描述符 可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以实现文件的读写操作. 用户可以自定义文件描述符范围是:3-num,这个最大数字, ...

  10. Mac 解决IDEA无法启动的问题

    今天重装了IDEA,发现IDEA启动不了,点击IDEA无反应,使用命令行启动idea,然后看看具体的错误,具体的启动方案就是:打开finder->应用程序->idea.app->右键 ...