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

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. 从Pc转向H5开发遇到的适配问题思考

    1.首先说滚动条 移动端开发在不设置任何适配和viewport宽度的情况下,以iphone5为例:屏幕界面的逻辑分辨率是320x568,在谷歌浏览器的界面下屏幕的可视宽度是980px(谷歌设置的,每个 ...

  2. 小白学flask之路由,反向路由,路由参数

    # -*- coding: utf-8 -*- from flask import Flask, request, url_for app = Flask(__name__) @app.route(& ...

  3. 谈谈我从工作中理解的CDN

    一.CDN定义 CDN的全称是Content Delivery Network,即内容分发网络.其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快.更稳定.通过 ...

  4. python caser运行编码

    #!/usr/bin/env python# -*- coding:utf-8 -*-import os def encryption(): str_raw = raw_input("请输入 ...

  5. 关于div设置display: inline-block之后盒子之间间距的处理

    当两个盒子都设置display: inline-block之后并且css也清除了默认样式 这时候会发现div盒子之间仍然存在间隙 将font-size清0间距就会取消

  6. JavaEE中表现层、持久层、业务层的职责分析(转载)

    表现层.持久层.业务层 注:本文转载于:http://www.blogjava.net/jiabao/archive/2007/04/08/109189.html 为了实现web层(struts)和持 ...

  7. MQ测试

    2015年8月13日23:14:52 测试RabbitMq ====================== 千兆局域网:send ≍10000/s  receive ≍7000/s 百兆局域网:send ...

  8. 【Leetcode】【Medium】Combination Sum

    Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C wher ...

  9. QT的lineidet的光标问题

    http://blog.csdn.net/Howard_Liu1314/article/details/10456165

  10. python全栈学习笔记(一)网络基础之网络协议篇

    阅读目录 一.操作系统基础 二.网络通信原理 2.1 互联网的本质就是一系列的网络协议 2.2 osi七层协议 2.3 tcp/ip五层模型讲解 2.3.1 物理层 2.3.2 数据链路层 2.3.3 ...