分布式架构有以下几点普适性的共性需求:

1. 提供集群的集中化的配置管理功能,可以不重启就让新的配置参数生效,类似与配置中心

     2. 简单可靠的集群节点动态发现机制,便于动态发现服务,动态扩展节点

     3. 简单可靠的leader选举机制

     4. 提供分布式锁

zookeeper的数据结构整体上可以看作一颗目录树,其中每个节点被称作ZNode,每个Znode都可以通过其路径(Path)唯一标识,如/services/helloworld。每个ZNode都可以绑定一个二进制存储数据(Data),用来存储少量数据,默认最大1MB。不建议在ZNode中存储大量的数据,因为数据多份复制,会带来宽带压力,降低性能。

ZNode有一个ACL访问权限列表,用来决定当前操作API 的用户是否有操作此节点的权限。ZNode还提供了实时通知的接口--Watch,应用可以选择任意ZNode进行监听,如果被监听的ZNode或者其Child发生变化,则应用可以实时收到通知,这样一来,很多场景和需求都能通过ZooKeeper来实现了。

此外,ZNode是有生命周期的,这取决于节点的类型,节点的类型分为以下几类:

 1. 持久节点:节点创建后就一直存在,直到有删除操作来主动删除该节点

2. 临时节点:临时节点的生命周期和创建该节点的客户端会话绑定,即如果客户端会话失效(客户端宕机或下线),这个节点自动删除

3. 时序节点:创建节点是可以设置这个属性,ZooKeeper会自动为给定的节点加上一个数字后缀,作为新的节点名。数字后缀的范围是整型的最大值

4. 临时性时序节点:同时具备临时节点与时序节点的特性,主要用于分布式锁的实现

从上面的分析来看,持久节点主要用于保存持久化数据,如集群的配置信息,结合Watch特性,实现配置的实时生效。

临时节点可以实现复杂的动态服务发现和服务路由功能。通常的做法是,分布式集群不同服务器上的服务注册到同一个ZooKeeper上,并在某个指定的路径下创建各自对应的临时节点,如/serviceA/node1, /serviceA/node2,客户端则监听/service目录。当有新的节点加入集群时,ZooKeeper会把变化实时通知到所有客户端,客户端就可以及时更新自己的服务路由转发表,实现全自动透明的服务发现和服务路由功能。

时序类型的节点,在创建时,每个节点名都会被追加一个递增的序号,类似于数据库自增主键,每个ZNode都有唯一序号,而且不会冲突。以此可以实现简单的Master(Leader)选举机制。即把一组service实例都注册为临时性时序节点ZNode,每次选取Master时,选取序号最小的为Master,而当Master宕机时,相应的ZNode会消失,新的服务器列表会推送至客户端,继续选举下一任Master,这样就做到了动态选举Master。

ZooKeeper主要用于以下场景:

1. 实现配置管理(配置中心)

2. 服务注册中心

3. 集群通信与控制子系统

作为服务注册中心时:

首先服务提供者将自身的服务信息注册到注册中心。通常注册信息包含如下内容:

1. 服务的类型

2. 隶属于哪个系统

3. 服务的IP/端口

4. 服务的请求URL

5. 服务的权重

其次注册中心要将所有服务信息存储,同时负责将注册信息的更新推送到所有的消费者(通过Watch机制实现)。

最后,服务消费者只有在初始化及服务变更时会依赖注册中心,而在整个服务调用过程中与服务提供方直接通信,不依赖于任何第三方,包括注册中心。

欢迎关注我的微信公众号(Sunnick,请扫码关注),随时留言交流~

ZooKeeper系列(1)--分布式系统的基石的更多相关文章

  1. zookeeper系列(五)zookeeper在大型分布式系统中的应用

    作者:leesf    掌控之中,才会成功:掌控之外,注定失败. 出处:http://www.cnblogs.com/leesf456/p/6063694.html 尊重原创感谢博主公开这么好的博文, ...

  2. Zookeeper系列六:服务器角色、序列化与通信协议、数据存储、zookeeper总结

    一.服务器角色 1. Leader 1)事务请求的唯一调度者和处理者.保证事务处理的顺序性 事务请求:导致数据一致性的请求(数据发生改变).如删除一个节点.创建一个节点.设置节点数据,设置节点权限就是 ...

  3. Zookeeper 系列(三)Zookeeper API

    Zookeeper 系列(三)Zookeeper API 本节首先介绍 Zookeeper 的 Shell 命令,再对 Java 操作 Zookeeper 的三种方式进行讲解,本节先介绍 Zookee ...

  4. Zookeeper 系列(一)基本概念

    Zookeeper 系列(一)基本概念 https://www.cnblogs.com/wuxl360/p/5817471.html 一.分布式协调技术 在给大家介绍 ZooKeeper 之前先来给大 ...

  5. 【分布式】Zookeeper在大型分布式系统中的应用

    一.前言 上一篇博文讲解了Zookeeper的典型应用场景,在大数据时代,各种分布式系统层出不穷,其中,有很多系统都直接或间接使用了Zookeeper,用来解决诸如配置管理.分布式通知/协调.集群管理 ...

  6. zookeeper系列之六—zookeeper之应用

    http://www.cnblogs.com/sharpxiajun/archive/2013/06/02/3113923.html Zookeeper是hadoop的一个子项目,虽然源自hadoop ...

  7. ZooKeeper系列(1):安装搭建ZooKeeper环境

    ZooKeeper系列文章:https://www.cnblogs.com/f-ck-need-u/p/7576137.html#zk ZooKeeper有三种安装模式:单机安装(standalone ...

  8. ZooKeeper系列(2):ZooKeeper命令行工具zkCli.sh

    ZooKeeper系列文章:https://www.cnblogs.com/f-ck-need-u/p/7576137.html#zk 1.简介 ZooKeeper提供了一个非常简单的命令行客户端zk ...

  9. ZooKeeper系列(3):znode说明和znode状态

    ZooKeeper系列文章:https://www.cnblogs.com/f-ck-need-u/p/7576137.html#zk 1.znode znode的官方说明:http://zookee ...

  10. ZooKeeper系列(4):ZooKeeper的配置文件详解

    ZooKeeper系列文章:https://www.cnblogs.com/f-ck-need-u/p/7576137.html#zk zkServer.sh读取的默认配置文件是$ZOOKEEPER_ ...

随机推荐

  1. Hibernate 脏检查和刷新缓存机制

    刷新缓存: Session是Hibernate向应用程序提供的操作数据库的主要接口,它提供了基本的保存,更新,删除和加载java对象的方法,Session具有一个缓存,可以管理和追踪所有持久化对象,对 ...

  2. SPOJ:COT2 Count on a tree II

    题意 给定一个n个节点的树,每个节点表示一个整数,问u到v的路径上有多少个不同的整数. n=40000,m=100000 Sol 树上莫队模板题 # include <bits/stdc++.h ...

  3. Python入门-函数进阶

    昨天我们简单的了解了函数的定义,调用,以及传参,其实还有一个更重要的传参:动态传参,让我们继续昨天没有说完的,以及今天我要分享的东西. 一.动态传参 之前我们说过了传参,如果我们需要给一个函数传参,而 ...

  4. openlayers模仿google地图--地图版权随鹰眼关闭打开而改变位置

    额..题目有点长......今天有个群友问我.想实现google地图地图版权随鹰眼关闭状态改变位置的功能.就是这种<ignore_js_op> 打开鹰眼时  地图版权也随着鹰眼位置改变而改 ...

  5. [小北De编程手记] : Lesson 04 - Selenium For C# 之 API 上

    这一部分,我准备向大家介绍Selenium WebDriver的常用API,学习这部分内容需要大家最好有一些简单的HTML相关知识,本文主要涉及到以下内容: Selenium API:元素检查 Sel ...

  6. 基础架构之Maven私有库

    Maven对于Java开发来说肯定不会陌生,由于各种问题,公司常常需要搭建自己的私有Maven仓库. (一)  环境要求 Centos 7.5.1804 Docker 18.06.1-ce sonat ...

  7. Docker常用操作指令

    1.查看正在运行的容器 docker ps 2.查看所有容器 docker ps -a 3.停用所有正在运行的容器 docker stop $(docker ps -q) 4.删除所有容器 docke ...

  8. (C#) 表达式树

    需求是将一个string 表达式 转换成 逻辑 表达式 并得到结果. 例如: bool result = (key1==val1) || (key2!=val2) && (key3== ...

  9. androidcode

    package UICtrl; import android.animation.ObjectAnimator;import android.content.Context;import androi ...

  10. SQL Server ->> Sparse File(稀疏文件)

    Sparse File(稀疏文件)不是SQL Server的特性.它属于Windows的NTFS文件系统的一个特性.如果某个大文件中的数据包含着大量“0数据”(这个应该从二进制上看),这样的文件就可以 ...