浅谈zooKeeper

关于zookeeper的那些事

zookeeper的概述

zookeeper作为Apache 下面的一款== 分布式协调服务 == 的开源框架,它的本质是一个分布式的小文件存储系统,它的主要用途是用来解决分布式集群中应用系统的一致性问题.下面,我们将一起来探究一下zookeeper是如何来管理分布式集群的,话不多说,我们直接步入正题

zookeeper的特性

要想更好的了解zk这款软件,我们需要对它的特性十分的了解,那么接下来我们一起来看看它有那些具体的特性以及每个特性的用处
zk的特性简单的来说可以分为5种,分别是:== 全局数据一致 == == 可靠性 == == 顺序性 == == 数据更新原子性 == 以及 == 实时性 ==接下来,我们详细聊聊这5大特性

全局数据一致

全局一致性,顾名思义,作为zk的集群中的每一个成员,集群中每个服务器保存一份相同的数据副本,client无论连接到哪个服务器,展示的数据都是一致的,这是zk最重要的特征;

可靠性

如果一条消息被其中一台服务器接受,那么将被所有的服务器接受。

顺序性

顺序性分为全局有序偏序两种

全局有序

全局有序是指如果在一台服务器上消息a在消息b前发布,则在所有Server上消息a都将在消息b前被发布

偏序

偏序是指如果一个消息b在消息a后被同一个发送者发布,a必将排在b前面。

数据更新原子性

一次数据更新要么成功(半数以上节点成功),要么失败,不存在中间状态;这点类似于我们熟悉的MySQL的事务一样

实时性

zk保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。

zk中的集群角色

了解完zk的特性之后,.我们需要了解一下zk中都存在那些角色以及这些角色事如何产生的,如何去保证上面5大特性的顺利执行
zk中主要存在两大角色,即我们比较熟知的其他分布式软件中都存在的leader和follower,当然除了这两种主要的角色之外呢,还有一个Observer的角色,下面,我将对这三种角色的功能进行详细的阐述

leader

zk集群工作的核心,事务请求(写操作)的唯一调度和处理者,保证集群事务处理的顺序性;是整个zk集群内部各个服务器的调度者。对于每个follower来说都有接收create,setData,delete的请求,但是follower却没有处理这些请求的能力,每个follower会把自己接收到的请求的操作发送给leader统一处理,当leader收到消息并执行操作之后会将自己执行的操作告知除自己以外的其他角色执行这个操作,保证集群内每个角色内部数据的一致性,具体的流程如下图所示:
在这里插入图片描述

Follower

follower的主要作用是处理客户端非事务(读操作)请求,转发事务请求给Leader;参与集群Leader选举投票。(基于Paxos算法的实现),想了解该算法的小伙伴可以去度娘上面了解一下,这里就不做过多的阐述

Observer

观察者角色,观察Zookeeper集群的最新状态变化并将这些状态同步过来,其对于非事务请求可以进行独立处理,对于事务请求,则会转发给Leader服务器进行处理。
不会参与任何形式的投票只提供非事务服务,通常用于在不影响集群事务处理能力的前提下提升集群的非事务处理能力。

zk的数据模型

zk在数据模型上面选用的是树形层次结构,zk树中的每一个节点被称为一个Znode,Znode兼具文件和目录两种特点,每个Znode由3部分组成:① stat:此为状态信息, 描述该Znode的版本, 权限等信息② data:与该Znode关联的数据③ children:该Znode下的子节点

zk中的节点类型

zk中有四种节点类型,分别是:
1:永久节点(PERSISTENT)
2:临时节点(EPHEMERAL)
3:永久节点、序列化(PERSISTENT_SEQUENTIAL)
4:临时节点、序列化(EPHEMERAL_SEQUENTIAL)

zk中的监听机制

ZooKeeper中,引入了Watcher机制来实现这种分布式的通知功能。ZooKeeper允许客户端向服务端注册一个Watcher监听,当服务端的一些事件触发了这个Watcher,那么就会向指定客户端发送一个事件通知来实现分布式的通知功能。触发事件种类很多,如:节点创建,节点删除,节点改变,子节点改变等。总的来说可以概括Watcher为以下三个过程:客户端向服务端注册Watcher、服务端事件发生触发Watcher、客户端回调Watcher得到触发事件情况

监听机制的特点

一次性触发

事件发生触发监听,一个watcher event就会被发送到设置监听的客户端,这种效果是一次性的,后续再次发生同样的事件,不会再次触发。

事件封装

ZooKeeper使用WatchedEvent对象来封装服务端事件并传递。
WatchedEvent包含了每一个事件的三个基本属性:
通知状态(keeperState),事件类型(EventType)和节点路径(path)

event异步发送

watcher的通知事件从服务端发送到客户端是异步的。

先注册再触发

Zookeeper中的watch机制,必须客户端先去服务端注册监听,这样事件发送才会触发监听,通知给客户端。

通知状态和事件类型

同一个事件类型在不同的通知状态中代表的含义有所不同,下表列举了常见的通知状态和事件类型。

zk在业务中的应用场景

在分布式环境下,不管是主从架构集群,还是主备架构集群,要求在服务的时候有且有一个正常的对外提供服务,我们称之为master。
当master出现故障之后,需要重新选举出的新的master。保证服务的连续可用性。zookeeper可以提供这样的功能服务。
主要用到了:znode唯一性、临时节点短暂性、监听机制。
如下图所示:
在这里插入图片描述

Alt

带尺寸的图片: Alt

居中的图片: Alt

居中并且带尺寸的图片: Alt

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

如何插入一段漂亮的代码片

博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block
var foo = 'bar';

生成一个适合你的列表

  • 项目
    • 项目
      • 项目
  1. 项目1
  2. 项目2
  3. 项目3
  • 计划任务
  • 完成任务

创建一个表格

一个简单的表格是这么创建的:

项目Value
电脑$1600
手机$12
导管$1

设定内容居中、居左、居右

使用:---------:居中
使用:----------居左
使用----------:居右

第一列第二列第三列
第一列文本居中第二列文本居右第三列文本居左

SmartyPants

SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

TYPEASCIIHTML
Single backticks'Isn't this fun?'‘Isn’t this fun?’
Quotes"Isn't this fun?"“Isn’t this fun?”
Dashes-- is en-dash, --- is em-dash– is en-dash, — is em-dash

创建一个自定义列表

Markdown
Text-to- HTML conversion tool
Authors
John
Luke

如何创建一个注脚

一个具有注脚的文本。1

注释也是必不可少的

Markdown将文本转换为 HTML

KaTeX数学公式

您可以使用渲染LaTeX数学表达式 KaTeX:

Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n1)!nN 是通过欧拉积分

Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=0tz1etdt.

你可以找到更多关于的信息 LaTeX 数学表达式here.

新的甘特图功能,丰富你的文章

2014-01-07 2014-01-09 2014-01-11 2014-01-13 2014-01-15 2014-01-17 2014-01-19 2014-01-21 已完成 进行中 计划一 计划二 现有任务 Adding GANTT diagram functionality to mermaid
  • 关于 甘特图 语法,参考 这儿,

UML 图表

可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:

张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五

这将产生一个流程图。:

链接
长方形
圆角长方形
菱形
  • 关于 Mermaid 语法,参考 这儿,

FLowchart流程图

我们依旧会支持flowchart的流程图:

Created with Raphaël 2.3.0 开始 我的操作 确认? 结束 yes no
  • 关于 Flowchart流程图 语法,参考 这儿.

导出与导入

导出

如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

导入

如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。


  1. 注脚的解释 ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值