zookeeper分布式协调系统的架构设计与源码剖析

这篇具有很好参考价值的文章主要介绍了zookeeper分布式协调系统的架构设计与源码剖析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

001_我们一般到底用ZooKeeper来干什么事儿?

002_有哪些开源的分布式系统中使用了ZooKeeper?

003_为什么我们在分布式系统架构中需要使用ZooKeeper集群?

004_ZooKeeper为了满足分布式系统的需求要有哪些特点

005_为了满足分布式系统的需求,ZooKeeper的架构设计有哪些特点?

006_ZooKeeper集群的三种角色:Leader、Follower、Observer

007_客户端与ZooKeeper之间的长连接和会话是什么?

008_ZooKeeper的数据模型:znode和节点类型

009_ZooKeeper最核心的一个机制:Watcher监听回调

二、使用步骤

1.引入库

2.读入数据

总结


001_我们一般到底用ZooKeeper来干什么事儿?

ZooKeeper顶尖高手课程:从实战到源码

Kafka里面大量使用了ZooKeeper进行元数据管理、Master选举、分布式协调,Canal也是一样,ZooKeeper进行元数据管理,Master选举实现HA主备切换

HDFS,HA也是基于ZK来做的

6周的,zk核心原理,zk集群部署、运维和管理,zk实战开发,zk在hdfs、kafka、canal源码中的运用的分析,两周的时间研究zk的核心的内核源码和底层原理

《001_我们一般到底用ZooKeeper来干什么事儿?》

Java架构的课,分布式架构中,分布式锁,Redis分布式锁,ZooKeeper分布式锁

分布式锁:运用于分布式的Java业务系统中

元数据管理:Kafka、Canal,本身都是分布式架构,分布式集群在运行,本身他需要一个地方集中式的存储和管理分布式集群的核心元数据,所以他们都选择把核心元数据放在zookeeper中的

分布式协调:如果有人对zk中的数据做了变更,然后zk会反过来去通知其他监听这个数据的人,告诉别人这个数据变更了,kafka有多个broker,多个broker会竞争成为一个controller的角色

如果作为controller的broker挂掉了,此时他在zk里注册的一个节点会消失,其他broker瞬间会被zk反向通知这个事情,继续竞争成为新的controller

这个就是非常经典的一个分布式协调的场景,有一个数据,一个broker注册了一个数据,其他broker监听这个数据

Master选举 -> HA架构

HDFS,NameNode HA架构,部署主备两个NameNode,只有一个人可以通过zk选举成为Master,另外一个backup

Canal,HA

ZooKeeper,分布式协调系统,封装了分布式架构中所有核心和主流的需求和功能,分布式锁、分布式集群的集中式元数据存储、Master选举、分布式协调和通知

002_有哪些开源的分布式系统中使用了ZooKeeper?

《002_有哪些开源的分布式系统中使用了ZooKeeper?》

Canal、Kafka、HDFS,学习过的这些技术都用了ZooKeeper,元数据管理,Master选举

ZooKeeper,他主要是提供哪些功能,满足哪些需求,使用在哪些场景下,最后一句话总结,ZooKeeper到底是为什么而生的,定位是什么?

三类系统

第一类:分布式Java业务系统,分布式电商平台,大部分的Java开发的互联网平台,或者是传统架构系统,都是分布式Java业务系统,Dubbo、Spring Cloud把系统拆分成很多的服务或者是子系统,大家协调工作,完成最终的功能

ZooKeeper,用的比较少,分布式锁的功能,而且很多人会选择用Redis分布式锁

第二类:开源的分布式系统

Dubbo,HBase,HDFS,Kafka,Canal,Storm,Solr

分布式集群的集中式元数据存储、Master选举实现HA架构、分布式协调和通知

Dubbo:ZooKeeper作为注册中心,分布式集群的集中式元数据存储

HBase:分布式集群的集中式元数据存储

HDFS:Master选举实现HA架构

Kafka:分布式集群的集中式元数据存储,分布式协调和通知

Canal:分布式集群的集中式元数据存储,Master选举实现HA架构

第三类:自研的分布式系统

HDFS,面向的超大文件,切割成一个一个的小块儿,分布式存储在一个大的集群里

分布式海量小文件系统:NameNode的HA架构,仿照HDFS的NameNode的HA架构,做主备两个NameNode,进行数据同步,然后自动基于zk进行热切换

在很多,如果你自己研发类似的一些分布式系统,都可以考虑,你是否需要一个地方集中式存储分布式集群的元数据?是否需要一个东西辅助你进行Master选举实现HA架构?进行分布式协调通知?

如果你在自研分布式系统的时候,有类似的需求,那么就可以考虑引入ZooKeeper来满足你的需求

003_为什么我们在分布式系统架构中需要使用ZooKeeper集群?

003_为什么我们在分布式系统架构中需要使用ZooKeeper集群?》

ZooKeeper,功能和定位,满足的需求

使用ZooKeeper去满足自己需求的项目都有哪些

分布式集群的集中式元数据存储,Master选举实现HA架构,分布式协调和通知

我们写一个类似ZK的系统,单机版本,就是部署在一台机器上面,里面提供了一些功能,比如说允许你在里面存储一些元数据,支持你进行Master选举,支持你分布式协调和通知,也可以做到

单机版本的系统,万一挂掉了怎么办?

集群部署,部署一个集群出来,多台机器,保证高可用性,挂掉一台机器,都可以继续运行下去

3台机器

我现在要进行元数据的存储,我向机器01写了一条数据,机器01应该怎么把数据同步给其他的机器02和机器03呢?

自己写一个类似ZK的系统?不可能单机版本吧?肯定得集群部署保证高可用吧?一旦集群了之后,数据一致性怎么保证?多麻烦!

你的分布式架构中有需求,干脆就直接用工业级,久经考验的zookeeper就可以了,bug很少,功能很全面,运用在很多工业级的大规模的分布式系统中,HDFS、Kafka、HBase

004_ZooKeeper为了满足分布式系统的需求要有哪些特点

ZooKeeper肯定是一套系统,这个系统可以存储元数据,支持Master选举,可以进行分布式协调和通知

集群部署:不可能单机版本

顺序一致性:所有请求全部有序

原子性:要么全部机器都成功,要么全部机器都别成功

数据一致性:无论连接到哪台ZK上去,看到的都是一样的数据,不能有数据不一致

高可用:如果某台机器宕机,要保证数据绝对不能丢失

实时性:一旦数据发生变更,其他人要实时感知到

zookeeper分布式协调系统的架构设计与源码剖析,分布式

005_为了满足分布式系统的需求,ZooKeeper的架构设计有哪些特点?

《005_为了满足分布式系统的需求,ZooKeeper的架构设计有哪些特点?》

为了实现需要的一些特性,ZooKeeper的架构设计需要有哪些特点?

集群化部署:3~5台机器组成一个集群,每台机器都在内存保存了zk的全部数据,机器之间互相通信同步数据,客户端连接任何一台机器都可以

树形结构的数据模型:znode,树形结构,数据模型简单,纯内存保存

数据结构就跟我们的文件系统是类似的,是有层级关系的树形的文件系统的数据结构

znode可以认为是一个节点而已

create /usr/local/uid

create /usr/local/test_file

uid:可以写入一些数据的值,比如说hello world

test_file:也可以写入一些数据的值

顺序写:集群中只有一台机器可以写,所有机器都可以读,所有写请求都会分配一个zk集群全局的唯一递增编号,zxid,保证各种客户端发起的写请求都是有顺序的

数据一致性:任何一台zk机器收到了写请求之后都会同步给其他机器,保证数据的强一致,你连接到任何一台zk机器看到的数据都是一致的

高性能:每台zk机器都在内存维护数据,所以zk集群绝对是高并发高性能的,如果你让zk部署在高配置物理机上,一个3台机器的zk集群抗下每秒几万请求没有问题

高可用:哪怕集群中挂掉不超过一半的机器,都能保证可用,数据不会丢失,3台机器可以挂1台,5台机器可以挂2台

高并发:高性能决定的,只要基于纯内存数据结构来处理,并发能力是很高的,只有一台机器进行写,但是高配置的物理机,比如16核32G,写入几万QPS,读,所有机器都可以读,3台机器的话,起码可以支撑十几万QPS

https://www.processon.com/v/6597671165d15f64a981eb02

006_ZooKeeper集群的三种角色:Leader、Follower、Observer

https://www.processon.com/v/659b4ac89dab311b9590f194

007_客户端与ZooKeeper之间的长连接和会话是什么?

zk集群启动之后,自己分配好角色,然后客户端就会跟zk建立连接,是TCP长连接

把我们的Java架构课程里的网络那块的东西,自研的分布式海量小文件存储系统的项目,我们手写了大量的底层的网络通信的代码

也就建立了一个会话,就是session,可以通过心跳感知到会话是否存在,有一个sessionTimeout,意思就是如果连接断开了,只要客户端在指定时间内重新连接zk一台机器,就能继续保持session,否则session就超时了

008_ZooKeeper的数据模型:znode和节点类型

核心数据模型就是znode树,平时我们往zk写数据就是创建树形结构的znode,里面可以写入值,就这数据模型,都在zk内存里存放

有两种节点,持久节点和临时节点,持久节点就是哪怕客户端断开连接,一直存在

临时节点,就是只要客户端断开连接,节点就没了

还有顺序节点,就是创建节点的时候自增加全局递增的序号

大家去看一下,之前Java架构的分布式锁里,有一个zk锁的源码分析,curator框架,zk分布式锁的实现,在里面就是基于zk的临时顺序节点来实现的,加锁的时候,是创建一个临时顺序节点

zk会自动给你的临时节点加上一个后缀,全局递增的,编号

如果你客户端断开连接了,就自动销毁这个你加的锁,此时人家会感知到,就会尝试去加锁

如果你是做元数据存储,肯定是持久节点

如果你是做一些分布式协调和通知,很多时候是用临时节点,就是说,比如我创建一个临时节点,别人来监听这个节点的变化,如果我断开连接了,临时节点消失,此时人家会感知到,就会来做点别的事情

顺序节点,在分布式锁里用的比较经典

每个znode还有一个Stat用来存放数据版本,version(znode的版本),cversion(znode子节点的版本),aversion(znode的ACL权限控制版本)12144

009_ZooKeeper最核心的一个机制:Watcher监听回调

ZooKeeper最核心的机制,就是你一个客户端可以对znode进行Watcher监听,然后znode改变的时候回调通知你的这个客户端,这个是非常有用的一个功能,在分布式系统的协调中是很有必要的

支持写和查:只能实现元数据存储,Master选举,部分功能

分布式系统的协调需求:分布式架构中的系统A监听一个数据的变化,如果分布式架构中的系统B更新了那个数据/节点,zk反过来通知系统A这个数据的变化

/usr/local/uid

使用zk很简单,内存数据模型(不同节点类型);写数据,主动读取数据;监听数据变化,更新数据,反向通知数据变化

实现分布式集群的集中式的元数据存储、分布式锁、Master选举、分布式协调监听

012_从zk集群启动到数据同步再到崩溃恢复的ZAB协议流程

zk集群启动的时候,进入恢复模式,选举一个leader出来,然后leader等待集群中过半的follower跟他进行数据同步,只要过半follower完成数据同步,接着就退出恢复模式,可以对外提供服务了

只要有超过一半的机器,认可你是leader,你就可以被选举为leader

3台机器组成了一个zk集群,启动的时候,只要有2台机器认可一个人是Leader,那么他就可以成为leader了

3台可以容忍不超过一半的机器宕机,1台

剩余的2台机器,只要2台机器都认可其中某台机器是leader,2台 大于 一半,就可以选举出来一个leader了

zk的leader选举算法,我们可以在后面的zk核心源码剖析的时候

1台机器时没有办法自己选举自己的

5台机器,3台机器认可某个人是leader;可以允许2台机器宕机,3台机器,leader选举,只要是5台机器,一半2.5,3台机器都认可某个人是leader,此时3 > 2.5,过半,leader是可以选举出来的

2台机器,小于一半,没有办法选举新的leader出来了

当然还没完成同步的follower会自己去跟leader进行数据同步的

此时会进入消息广播模式

只有leader可以接受写请求,但是客户端可以随便连接leader或者follower,如果客户端连接到follower,follower会把写请求转发给leader

leader收到写请求,就把请求同步给所有的follower,过半follower都说收到了,就再发commit给所有的follower,让大家提交这个请求事务

如果突然leader宕机了,会进入恢复模式,重新选举一个leader,只要过半的机器都承认你是leader,就可以选举出来一个leader,所以zk很重要的一点是主要宕机的机器数量小于一半,他就可以正常工作

因为主要有过半的机器存活下来,就可以选举新的leader

新leader重新等待过半follower跟他同步,完了重新进入消息广播模式,leader就会把自己的数据开始同步,因为有一种可能之前有些follower没有从leader那边完全同步过来,这个时候一定要保证一个数据的同步,leader会去检查自己磁盘里的文件,去看看哪些数据是哪些follower的,哪些follower还没有同步的,leader要保证自己的数据和其它的follower要保证全部同步,同步守他会进入消息广播模式,leader就会接受写请求了

2PC是什么,两阶段提交,Java架构里的分布式事务的课程,好好去看一下

集群启动:恢复模式,leader选举(过半机器选举机制) + 数据同步

消息写入:消息广播模式,leader采用2PC模式的过半写机制,给follower进行同步

崩溃恢复:恢复模式,leader/follower宕机,只要剩余机器超过一半,集群宕机不超过一半的机器,就可以选举新的leader,数据同步

二、使用步骤

1.引入库

代码如下(示例):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context

2.读入数据

代码如下(示例):

data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

该处使用的url网络请求的数据。


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。文章来源地址https://www.toymoban.com/news/detail-777675.html

到了这里,关于zookeeper分布式协调系统的架构设计与源码剖析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker部署ZooKeeper分布式协调服务

    1、准备工作 2、创建TEST容器,将conf目录COPY出来,在映射进去,方便后续维护管理! 3、运行容器 4、测试链接zookeeper 正常输出内容:

    2024年02月07日
    浏览(31)
  • 分布式应用程序协调服务 ZooKeeper 详解

    目录 1、ZooKeeper简介 2、ZooKeeper的使用场景 3、ZooKeeper设计目的 4、ZooKeeper数据模型

    2024年02月08日
    浏览(39)
  • ZooKeeper的应用场景(命名服务、分布式协调通知)

    命名服务(NameService)也是分布式系统中比较常见的一类场景,在《Java网络高级编程》一书中提到,命名服务是分布式系统最基本的公共服务之一。在分布式系统中,被命名的实体通常可以是集群中的机器、提供的服务地址或远程对象等一这些我们都可以统称它们为名字(Name),

    2024年02月12日
    浏览(24)
  • 【大数据】大数据之分布式协调服务--Zookeeper 教程

    ZooKeeper 是一种分布式协调服务,用于管理大型主机。在分布式环境中协调和管理服务是一个复杂的过程。ZooKeeper 通过其简单的架构和 API 解决了这个问题。ZooKeeper 允许开发人员专注于核心应用程序逻辑,而不必担心应用程序的分布式特性。 ZooKeeper 框架最初是在“Yahoo!\\\"上构

    2023年04月09日
    浏览(25)
  • Zookeeper 和 ETCD在分布式协调服务的使用

    在云原生环境中,etcd和ZooKeeper都是常见的分布式协调服务,具有各自的优点和缺点。以下是它们在云原生环境中的比较: etcd的优点: 性能:etcd采用Raft一致性算法,具有较高的性能和吞吐量。 简单的API:etcd的API设计简洁易用,支持多种编程语言的客户端库。 可观察性:

    2024年02月16日
    浏览(32)
  • ZooKeeper 分布式协调服务: 概述及原理, 安装配置, 基本操作

    作者:禅与计算机程序设计艺术 Apache Zookeeper 是 Apache Hadoop 的子项目之一,是一个开源的分布式协调服务。它负责存储和维护关于网络中各个节点的数据。Zookeeper 提供了以下功能:配置维护、域名服务、同步和共享、软/硬件负载均衡、集群管理、Master 选举等。它的架构使得

    2024年02月08日
    浏览(31)
  • 【系统架构】分布式系统架构设计

    分布式系统是指由多个计算机节点组成的一个系统,这些节点通过网络互相连接,并协同工作完成某个任务。 与单个计算机相比,分布式系统具有更高的可扩展性、可靠性和性能等优势,因此广泛应用于大规模数据处理、高并发访问、分布式存储等领域。 分布式系统的设计

    2024年02月15日
    浏览(34)
  • 分布式系统架构设计之分布式缓存技术选型

    随着互联网业务的快速发展,分布式系统已经成为了解决大规模并发请求、高可用性、可扩展性等问题的重要手段。在分布式系统中,缓存作为提高系统性能的关键技术,能够显著降低数据库负载、减少网络延迟、提高数据访问速度。当面对大量并发请求时,如果每次都直接

    2024年02月03日
    浏览(42)
  • HadoopHA模式(由于Hadoop的HA模式是在Hadoop完全分布式基础上,利用zookeeper等协调工具配置的高可用的Hadoop集群模式)

    目录 1.前期准备 1.1.hadoop-3.1.3.tar.gz,jdk-8u212-linux-x64.tar.gz,apache-zookeeper-3.5.7-bin.tar.gz三个包提取码:k5y6 2.解压安装包,配置环境变量 3. 将三个节点分别命名为master、slave1、slave2并做免密登录 免密在前面Hadoop完全分布式搭建说过,这里不再赘述 4.搭建zookeeper集群  根据配置的

    2024年02月04日
    浏览(30)
  • 分布式系统架构设计之分布式数据存储的安全隐私和性能优化

    在前面分布式系统部分,有对安全性做过介绍,如前面所述,在分布式系统中,确保系统的安全性和隐私是至关重要的。安全性关注系统的防护措施,而隐私是关注用户的个人信息保护。 身份认证:确保用户和系统组件的身份是合法的,通过通过密码、令牌或证书实现 授权

    2024年02月02日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包