分布式专题(一)——Zookeeper简介
- 什么是Zookeeper;
- CAP原理&Zookeeper数据的一致性;
- Zookeeper的集群架构;
- Zookeeper的客户端会话;
- Zookeeper的数据节点;
- Zookeeper的事件监听器;
- Zookeeper的权限控制;
一、什么是Zookeeper
在维基百科是这样解释的: Apache ZooKeeper是Apache软件基金会的一个软件项目,他为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。ZooKeeper曾经是Hadoop的一个子项目,但现在是一个独立的顶级项目。
ZooKeeper的架构通过冗余服务实现高可用性。因此,如果第一次无应答,客户端就可以询问另一台ZooKeeper主机。ZooKeeper节点将它们的数据存储于一个分层的命名空间,非常类似于一个文件系统或一个前缀树结构。客户端可以在节点读写,从而以这种方式拥有一个共享的配置服务。更新是全序的。
C:Consistency,一致性,数据一致更新,所有数据变动都是同步的。
A:Availability,可用性,系统具有好的响应性能。
P:Partition tolerance,分区容错性。以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择,也就是说无论任何消息丢失,系统都可用。
该理论已被证明:任何分布式系统只可同时满足两点,无法三者兼顾。 因此,将精力浪费在思考如何设计能满足三者的完美系统上是愚钝的,应该根据应用场景进行适当取舍。
2、ZK从以下几点保证了分布式数据的一致性:
顺序一致性:同一个客户端发起的事务请求,严格按其顺序处理;
原子性:所有事务请求的处理结果在整个集群中是一致的,要么整个集群中所有的机器都应用了这个事务,要不就都不应用;
单一视图:无论客户端连接的是哪个ZK服务器,看到的服务端数据模型都是一致的;
可靠性:一旦服务端成功的应用了一个事务,并完成了对客户端的响应,那么这个事务所引起的服务端变更会一直保留,直到被下个一事务所更改;
实时性:ZK保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。
三、Zookeeper的集群角色有哪些
Leader:集群中有且仅有一个Leader,通过选举过程产生。负责所有事务写操作(回话状态变更及数据节点变更操作),保证集群事务处理的顺序性。默认设置下,Leader也处理读请求。
Follower: 处理客户端非事务请求,转发事务请求给Leader服务器;参与Leader选举投票,参与事务操作的“过半通过”投票策略。
Observer:只提供读取服务。在不影响写性能的情况下提升集群读取性能。不参与任何形式的投票。
要搭建一个高可用的ZK集群,我们首先需要确定好集群规模。一般我们将节点(指Leader和Follower节点,不包括Observer节点)个数设置为 2*n+1 ,n为可容忍宕机的个数。 ZK使用“过半”设计原则,很好地解决了单点问题,提升了集群容灾能力。但是ZK的集群伸缩不是很灵活,集群中所有机器ip及port都是事先配置在每个服务的zoo.cfg 文件里的。如果要往集群增加一个Follower节点,首先需要更改所有机器的zoo.cfg,然后逐个重启。
四、Zookeeper的客户端会话
指客户端与服务器之间的会话,在ZK中会话是通过客户端和服务器之间的一个TCP长连接来实现的。通过这个长连接,客户端能够使用心跳检测与服务器保持有效的会话,也能向服务器发送请求并接收响应,还可接收服务器的Watcher事件通知。Session的sessionTimeout是会话超时时间,如果这段时间内,客户端未与服务器发生任何沟通(心跳或请求),服务器端会清除该session数据,客户端的TCP长连接将不可用,这种情况下,客户端需要重新实例化一个Zookeeper对象。
五、Zookeeper的数据节点
Zookeeper将所有的数据存在内存中,数据模式是一棵树ZNode Tree,用斜杠进行分割(/node/path1)。每个ZNode上会保存自己的数据,同时还会保存一系类属性;
六、Zookeeper的事件监听器
Zookeeper允许用户在一些指定的节点上注册一些Watcher,并且在一些特定事件触发的时候,Zookeeper服务端会将事件通知到感兴趣的客户端上去,该机制是zk实现分布式协调服务的重要特性。
Watcher 有几个特点:
Watches通知是一次性的,必须重复注册。
对某个节点注册了Watcher但是节点被删除了,那么节点上的Watcher也会被移除。
同一个zk客户端对某一个节点注册相同的Watcher只会收到一次通知。
Watcher对象只会保存在客户端,不会传递到服务端。
七、Zookeeper的权限控制
Zookeeper采用ACL(Access Control Lists)策略来进行权限控制,类似于UNIX文件系统的权限控制。其中Create,Delete 都是争对子节点的权限控制。
分布式专题(一)——Zookeeper简介的更多相关文章
- ZooKeeper分布式专题与Dubbo微服务入门
第1章 分布式系统概念与ZooKeeper简介对分布式系统以及ZooKeeper进行简介,使得大家对其有大致的了解1-1 zookeeper简介1-2 什么是分布式系统1-3 分布式系统的瓶颈以及zk ...
- 手撕面试官系列(九):分布式限流面试专题 Nginx+zookeeper
Nginx专题 (面试题+答案领取方式见侧边栏) 1.请解释一下什么是 Nginx?2.请列举 Nginx 的一些特性.3.请列举 Nginx 和 Apache 之间的不同点4.请解释 Nginx 如 ...
- zookeeper(分布式协调框架)简介与集群搭建
ZooKeeper 的由来: Zookeeper最早起源于雅虎研究院的一个研究小组.在当时,研究人员发现,在雅虎内部很多大型系统基本都需要依赖一个类似的系统来进行分布式协调,但是这些系统往往都存在分布 ...
- 分布式服务框架:Zookeeper简介
分布式服务框架:Zookeeper(分布式系统的可靠协调系统) 本文导读: 1 Zookeeper概述 2 Zookeeper总体结构 ——逻辑图.运转流程.特点.优点.数据结构 3 Zookeepe ...
- 个人学习分布式专题(二)分布式服务治理之分布式协调技术Zookeeper
分布式协调技术Zookeeper 2.1 zookeeper集群安装部署(略) 2.2 zookeeper的基本原理,数据模型 2.3 zookeeper Java api的使用 2.4 zookee ...
- 第1章 分布式系统概念与ZooKeeper简介
ZooKeeper分布式专题与Dubbo微服务入门 第1章 分布式系统概念与ZooKeeper简介 1-1 zookeeper简介 1-2 什么是分布式系统 略 1-3 分布式系统的瓶颈以及zk的相关 ...
- zookeeper 简介
一.简介 zookeeper是hadoop的一个子项目,A distribute coordination service for distributed applications 为了分布式应用而开 ...
- Zookeeper简介与安装
Zookeeper:A Distributed Coordination Service for Distributed Applications. 一.Zookeeper简介 众所周知,协同服务是分 ...
- ZooKeeper: 简介, 配置及运维指南
1. 概览 ZooKeeper是一个供其它分布式应用程序使用的软件, 它为其它分布式应用程序提供所谓的协调服务. 所谓的协调服务, 是指ZooKeeper的如下能力 naming 命名 configu ...
- Zookeeper简介与集群搭建
Zookeeper简介 Zookeeper是一个高效的分布式协调服务,可以提供配置信息管理.命名.分布式同步.集群管理.数据库切换等服务.它不适合用来存储大量信息,可以用来存储一些配置.发布与订阅等少 ...
随机推荐
- Heka配置讲解
基于Heka,ElasticSearch和Kibana的分布式后端日志架构 目前主流的后端日志都采用的标准的elk模式(Elasticsearch,Logstash,Kinaba),分别负责日志存储, ...
- easyui学习笔记12—tab标签页的添加和删除
这一篇我们来看看标签页的添加和删除动作.我在想看这些例子还不如看文档,文档的内容更加全面,但是文档全部是理论没有实际的操作,看起来很枯燥,文档只能是遇到问题的时候查.easyui的文档写的还是很详细的 ...
- 如何使用Flashfxp上传下载文件
一.首先您本地电脑需要安装flashfxp软件,您可以通过百度搜索下载. 二.我们打开flashfxp,然后在右上角点击“会话”,再点击“快速连接”,如下图. 三.弹出“如下图”窗口.请输入FTP连接 ...
- photo的复数是photos
以O结尾的单词变复数时,有生命的加es,无生命的加s. 如:photo,zoo,为无生命的,+s tomato,potato为有生命的,+es. 自己总结的,但到目前为止还没有遇到过例外的.记住这一个 ...
- [转] Java 命名规范
定义规范的目的是为了使项目的代码样式统一,使程序有良好的可读性. 包的命名 (全部小写,由域名定义) Java包的名字都是由小写单词组成.但是由于Java面向对象编程的特性,每一名Java程序员都 ...
- phonegap 的指南针 api Compass
一. Compass 介绍方法参数 1.Compass 也就是,常说的指南针,又叫罗盘 2.方法 compass.getCurrentHeading compass.watchHeading co ...
- phpcms利用表单向导创建留言板(可以回复)
这篇博客写的很详细,可跳转到如下链接: http://blog.aiwebcom.com/%E7%BD%91%E7%AB%99%E5%BB%BA%E8%AE%BE/phpcms/456.html 注: ...
- 2.spring:集合属性
1.list 配置java.util.List类型的属性,需要指定<list>标签,在标签里面包含有一些元素,这些标签 可以通过<value>指定简单的常量值,通过<r ...
- js 实现分享功能
分享功能初步测试,title为当前页面的title. 其他详见注释!!! <!doctype html> <html> <head> <meta http-e ...
- 【luogu P1666 前缀单词】 题解
题目链接:https://www.luogu.org/problemnew/show/P1666 10.13考试题 当时没想出来,觉得是要用trie做,在trie上跑一个树形dp 结果是写了个子集枚举 ...