原文格式可以访问: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. Linux.vim.多行复制、删除、剪切

    复制: //单行复制+粘贴 yy + p:复制光标所处当前行, 敲p粘贴在光标处. //多行复制+粘贴 n + yy + p:复制光标所在行起以下n行(含当前行), 敲yy复制光标所处当前行, 敲p粘 ...

  2. spring cloud的配置

    注解篇 @EnableEurekaServer 注解启动一个服务注册中心提供给其他应用进行对话 @EnableDiscoveryClient 激活Eureka中的DiscoveryClient实现 配 ...

  3. IO系统-标准C的I/O和文件I/O

    1.标准C的I/O 1.1常用函数和结构体 char *fgets(char *s, int size, FILE *stream); //整行输入 int printf(const char *fo ...

  4. 玩转Django2.0---Django笔记建站基础十二(Django项目上线部署)

    第十二章 Django项目上线部署 目前部署Django项目有两种主流方案:Nginx+uWsGI+Django或者Apache+uWSGI+Django.Nginx作为服务器最前端,负责接收浏览器的 ...

  5. HTML-02-常用标签演示

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. Git详解之内部原理

    前言 不管你是从前面的章节直接跳到了本章,还是读完了其余各章一直到这,你都将在本章见识 Git 的内部工作原理和实现方式.我个人发现学习这些内容对于理解 Git 的用处和强大是非常重要的,不过也有人认 ...

  7. 强大的Guava中的新集合类型: Multiset, Multimap, BiMap, Table, ClassToInstanceMap, RangeSet, RangeMap等

    一 Multiset /** * 新类型集合: Multiset: Multiset就是可以保存多个相同的对象,并且无序 * 占据了List和Set之间的一个灰色地带 * 其他实现: TreeMult ...

  8. Leetcode 题目整理 Sqrt && Search Insert Position

    Sqrt(x) Implement int sqrt(int x). Compute and return the square root of x. 注:这里的输入输出都是整数说明不会出现 sqrt ...

  9. 曹工说Spring Boot源码(14)-- AspectJ的Load-Time-Weaving的两种实现方式细细讲解,以及怎么和Spring Instrumentation集成

    写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...

  10. C#系列之基础知识点(一)

    知识点一:VS启动方法 第一种:双击图标 第二种:window+R——调出cmd,输入devenu properties  属性的意思 知识点二:后缀名解释 .sln  解决方案文件:包含整个解决方案 ...