zookeeper分布式锁

Zookeeper系列(一)

空扰寡人 提交于 2019-12-05 05:28:50
一、ZooKeeper的背景 1.1 认识ZooKeeper ZooKeeper---译名为“动物园管理员”。动物园里当然有好多的动物,游客可以根据动物园提供的向导图到不同的场馆观赏各种类型的动物,而不是像走在原始丛林里,心惊胆颤的被动 物所观赏。为了让各种不同的动物呆在它们应该呆的地方,而不是相互串门,或是相互厮杀,就需要动物园管理员按照动物的各种习性加以分类和管理,这样我们才能更加放心安全的观赏动物。 回到企业级应用系统中,随着信息化水平的不断提高,企业级系统变得越来越庞大臃肿,性能急剧下降,客户抱怨频频。拆分系统是目前我们可选择的解决系统可伸缩性和性能问题的唯一行之有效的方法。但是拆分系统同时也带来了系统的复杂性——各子系统不是孤立存在的,它们彼此之间需要协作和交互,这就是我们常说的分布式系统0。各个子系统就好比动物园里的动物,为了使各个子系统能正常为用户提供统一的服务,必须需要一种机制来进行协调——这就是ZooKeeper(动物园管理员)。 1.2 为什么使用ZooKeeper 我们知道要写一个分布式应用是非常困难的,主要原因就是局部故障。一个消息通过网络在两个节点之间传递时,网络如果发生故障,发送方并不知道接收方是否接收到了这个消息。他可能在网络故障迁就收到了此消息,也坑没有收到,又或者可能接收方的进程死了。发送方了解情况的唯一方法就是再次连接发送方,并向他进行询问

简要分析ZooKeeper基本原理及安装部署

天大地大妈咪最大 提交于 2019-12-05 04:21:06
一、ZooKeeper 基本概念 1、ZooKeeper 是什么? Zookeeper官网地址: http://zookeeper.apache.org/ Zookeeper官网文档地址: http://zookeeper.apache.org/doc/trunk/index.html ZooKeeper 是Hadoop下的一个子项目,它是一个针对大型分布式系统的可靠协调系统;它提供的功能包括:配置维护、名字服务、分布式同步、组服务等; 它的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。 Zookeeper一个最常用的使用场景就是用于担任服务生产者和服务消费者的注册中心,服务生产者将自己提供的服务注册到Zookeeper中心,服务的消费者在进行服务调用的时候先到Zookeeper中查找服务,获取到服务生产者的详细信息之后,再去调用服务生产者的内容与数据,简单示例图如下: 2、ZooKeeper设计目标: ZooKeeper允许分布式进程通过共享的层次结构命名空间进行相互协调,这与标准文件系统类似。 名称空间由ZooKeeper中的数据寄存器组成 - 称为znode,这些类似于文件和目录。 与为存储设计的典型文件系统不同,ZooKeeper数据保存在内存中,这意味着ZooKeeper可以实现高吞吐量和低延迟。

zookeeper原理 使用场景

不羁岁月 提交于 2019-12-05 04:20:01
ZooKeeper是 Hadoop Ecosystem中非常重要的组件,它的主要功能是为分布式系统提供一致性协调(Coordination)服务,与之对应的Google的类似服务叫Chubby。今天这篇文章分为三个部分来介绍ZooKeeper,第一部分介绍ZooKeeper的基本原理,第二部分介绍ZooKeeper提供的Client API的使用,第三部分介绍一些ZooKeeper典型的应用场景。 ZooKeeper基本原理 1. 数据模型 如上图所示,ZooKeeper数据模型的结构与Unix文件系统很类似,整体上可以看作是一棵树,每个节点称做一个ZNode。每个ZNode都可以通过其路径唯一标识,比如上图中第三层的第一个ZNode, 它的路径是/app1/c1。在每个ZNode上可存储少量数据(默认是1M, 可以通过配置修改, 通常不建议在ZNode上存储大量的数据),这个特性非常有用,在后面的典型应用场景中会介绍到。另外,每个ZNode上还存储了其Acl信息,这里需要注意,虽说ZNode的树形结构跟Unix文件系统很类似,但是其Acl与Unix文件系统是完全不同的,每个ZNode的Acl的独立的,子结点不会继承父结点的,关于ZooKeeper中的Acl可以参考之前写过的一篇文章《 说说Zookeeper中的ACL 》。 2.重要概念 2.1 ZNode 前文已介绍了ZNode

【Zookeeper系列一】Zookeeper应用介绍与安装部署

心不动则不痛 提交于 2019-12-04 15:37:28
#0 系列目录# Zookeeper系列 【Zookeeper系列一】Zookeeper应用介绍与安装部署 【Zookeeper系列二】ZooKeeper典型应用场景实践 【Zookeeper系列三】ZooKeeper Java API使用 【Zookeeper系列四】ZooKeeper 分布式锁实现 【Zookeeper系列五】ZooKeeper 实时更新server列表 【Zookeeper系列六】Zookeeper 工作原理 Zookeeper源码 【Zookeeper源码一】Zookeeper 源码环境搭建 【Zookeeper源码二】Zookeeper 客户端创建连接过程分析 【Zookeeper源码三】Zookeeper 单机版服务器介绍 【Zookeeper源码四】Zookeeper 集群版服务器介绍 【Zookeeper源码五】Zookeeper 集群版建立连接过程 Zookeeper应用 基于ZooKeeper的分布式Session实现 #1 Zookeeper概述# ZooKeeper是一个为分布式应用所设计的分布的、开源的协调服务,它主要是 用来解决分布式应用中经常遇到的一些数据管理问题,简化分布式应用协调及其管理的难度,提供高性能的分布式服务 。ZooKeeper本身可以 以Standalone模式安装运行 ,不过

Zookeeper 原理与实践

落花浮王杯 提交于 2019-12-04 13:19:52
1、Zookeeper 的由来 在Hadoop生态系统中,许多项目的Logo都采用了动物,比如 Hadoop 和 Hive 采用了大象的形象,HBase 采用了海豚的形象,而从字面上来看 ZooKeeper 表示动物园管理员,所以大家可以理解为 ZooKeeper就是对这些动物(项目组件)进行一些管理工作的。 对于单机环境多线程的竞态资源协调方法,我们一般通过线程锁来协调对共享数据的访问以保证状态的一致性。 但是分布式环境如何进行协调呢?于是,Google创造了Chubby,而ZooKeeper则是对于Chubby的一个开源实现。 ZooKeeper是一种为分布式应用所设计的高可用、高性能且一致的开源协调服务,它提供了一项基本服务:分布式锁服务。由于ZooKeeper的开源特性,后来我们的开发者在分布式锁的基础上,摸索了出了其他的使用方法:配置维护、组服务、分布式消息队列、分布式通知/协调等。它被设计为易于编程,使用文件系统目录树作为数据模型。 2、ZooKeeper集群模式典型架构 2.1 角色 Zookeeper服务自身组成一个集群(2n+1个服务允许n>=1个失效)。Zookeeper集群是一个基于主从复制的高可用集群,每个服务器承担如下三种角色中的一种 Leader 一个Zookeeper集群同一时间只会有一个实际工作的Leader

探索Redis设计与实现15:Redis分布式锁进化史

爱⌒轻易说出口 提交于 2019-12-04 01:12:21
Redis分布式锁进化史 近两年来微服务变得越来越热门,越来越多的应用部署在分布式环境中,在分布式环境中,数据一致性是一直以来需要关注并且去解决的问题,分布式锁也就成为了一种广泛使用的技术,常用的分布式实现方式为Redis,Zookeeper,其中基于Redis的分布式锁的使用更加广泛。 但是在工作和网络上看到过各个版本的Redis分布式锁实现,每种实现都有一些不严谨的地方,甚至有可能是错误的实现,包括在代码中,如果不能正确的使用分布式锁,可能造成严重的生产环境故障,本文主要对目前遇到的各种分布式锁以及其缺陷做了一个整理,并对如何选择合适的Redis分布式锁给出建议。 各个版本的Redis分布式锁 V1.0 tryLock() { SETNX Key 1 EXPIRE Key Seconds } release() { DELETE Key } 这个版本应该是最简单的版本,也是出现频率很高的一个版本,首先给锁加一个过期时间操作是为了避免应用在服务重启或者异常导致锁无法释放后,不会出现锁一直无法被释放的情况。 这个方案的一个问题在于每次提交一个Redis请求,如果执行完第一条命令后应用异常或者重启,锁将无法过期,一种改善方案就是使用Lua脚本(包含SETNX和EXPIRE两条命令),但是如果Redis仅执行了一条命令后crash或者发生主从切换,依然会出现锁没有过期时间

Zookeeper简单理解

匿名 (未验证) 提交于 2019-12-03 00:38:01
ZooKeeper是一个高可用的分布式数据管理与系统协调框架。基于对Paxos算法的实现,使该框架保证了分布式环境中数据的强一致性,也正是基于这样的特性,使得ZooKeeper解决很多分布式问题 1.1 Zookeeper 是 Google 的 Chubby一个开源的实现,是 Hadoop 的分布式协调服务。包含一个简单的原语集,分布式应用程序可以基于她实现同步服务,配置维护和命名服务等。 1.2 为什么使用zookeeper 1)大部分分布式应用需要一个主控、协调或控制器来管理物理分布的子进程(如资源、任务分配等) 2)大部分应用需要开发私有的协调程序,缺乏一个通用的机制。 3)协调程序的反复编写浪费,且难以形成通用伸缩性好的协调器 4)zookeeper 提供通用的分布式锁服务,用以协调分布式应用。 1.3 zookeeper使用 1.4 zookeeper的特性 Zookeeper是简单的 Zookeeper是富有表现力的 Zookeeper具有高可用性 Zookeeper采用松耦合交互方式 Zookeeper是一个资源库 1.6 zookeeper的数据模型 1.7 zookeeper的节点 1.8 zookeeper的角色 文章来源: Zookeeper简单理解

分布式系统理论基础 - 选举、多数派和租约

匿名 (未验证) 提交于 2019-12-03 00:06:01
选举(election)是分布式系统实践中常见的问题,通过打破节点间的对等关系,选得的leader(或叫master、coordinator)有助于实现事务原子性、提升决议效率。 多数派(quorum)的思路帮助我们在网络分化的情况下达成决议一致性,在leader选举的场景下帮助我们选出唯一leader。租约(lease)在一定期限内给予节点特定权利,也可以用于实现leader选举。 下面我们就来学习分布式系统理论中的选举、多数派和租约。 选举(electioin) 一致性问题(consistency)是独立的节点间如何达成决议的问题,选出大家都认可的leader本质上也是一致性问题,因而如何应对宕机恢复、网络分化等在leader选举中也需要考量。 Bully算法[1]是最常见的选举算法,其要求每个节点对应一个序号,序号最高的节点为leader。leader宕机后次高序号的节点被重选为leader,过程如下: (a). 节点4发现leader不可达,向序号比自己高的节点发起重新选举,重新选举消息中带上自己的序号 (d). 节点5收到节点6的OK消息,而节点6经过超时时间后收不到更高序号节点的OK消息,则认为自己是leader (e). 节点6把自己成为leader的信息广播到所有节点 回顾《分布式系统理论基础 - 一致性、2PC和3PC》就可以看到,Bully算法中有2PC的身影

Zookeeper内部实现分布式数据一致性(底层系统模型)(一)

匿名 (未验证) 提交于 2019-12-03 00:05:01
Zookeeper的几个概念:(接下来将从这几个概念书写Zookeeper的内部工作流程) 数据模型 节点特性 版本 Watcher ACL   <1> 数据模型 :   Zookeeper的视图很热Unix文件系统很像。但没有引入文件和文件目录相关概念;而是使用“数据节点”概念,称为ZNode;   ZNode是ZK中最小的数据单元,每个ZNode上可以保存数据,也可以挂载子节点;即形成了一种层次化空间树;   事务ID : ZK中,事务是指能够改变zk服务器状态的操作,一般包括数据节点创建与删除,数据节点内容更新和客户端会话创建与失效等操作;对于每一个事务请求,zk都会为其分配一个全局唯一的事务ID,用ZXID表示,是一个64位的数字;每一个ZXID对应一个事务操作; <2> 节点特性:    ZK中每个数据节点都是有生命周期;具体取决于数据节点的类型;   节点类型可以分为:持久节点,临时节点,顺序节点;   在节点的创建过程中,可以组合使用,于是有以下四种组合:     (1)持久节点:该节点一旦被创建,就会一直存在于ZK服务器上,直到有删除操作来主动清除这个节点;     (2)持久顺序节点:ZK中,每个父节点会为其第一级子节点维护一份顺序,用于记录下每个节点的先后顺序。     (3)临时节点:临时节点生命周期和客户端会话绑定在一起,客户端会话失效,这个节点被自动清理掉

基于zookeeper实现高性能分布式锁

匿名 (未验证) 提交于 2019-12-02 21:53:32
本文章用于面试展示,具体细节以及排版正在编辑,暂时先写下来实现原理 实现原理:利用zookeeper的持久性节点和Watcher机制 具体步骤:   1、创建持久性节点 zkLock   2、在此父节点下创建子节点列表,name按顺序定义   3、Java程序获取该节点下的所有顺序子节点,并且按照从小到大的顺序排列   4、取出最小的节点,如果该节点在所有顺序子节点列表中index等于0,代表成功获取到锁资源     否则将给比当前节点还小的节点注册监听事件,利用Watcher机制动态观察节点的删除事件   5、删除子节点即释放锁资源 文章来源: 基于zookeeper实现高性能分布式锁