第一章 ZooKeeper的基本概念

一、介绍

在过去,每个应用一般都是在单个机子(单处理器)上运行,现在这一状况已经发生了巨大的变化。在大数据和云计算的世界里,应用程序已经被分成多个独立的模块在不同的服务器上提供服务。

但是这种方式的转变,使得协调这些独立模块的行为比写一个单一程序在单节点上运行要困难的多。这很容易让程序员陷入在协调逻辑的陷阱中,而忽略了本身程序的逻辑性。

ZooKeeper使得应用开发人员主要集中关注他们应用的逻辑,而不是关注独立模块间的协调。它受文件系统API的启发,暴露出一个简单的API接口,允许开发人员实现共同的协作任务。例如选取一个master服务节点来管理组成员和管理元数据。ZooKeeper是一个应用程序库,主要有C和Java两种实现方式。ZooKeeper通过服务节点的组合使得服务可以出现故障和增加吞吐量。

当我们设计一个应用程序(该程序需要用到ZooKeeper)时,最明智的做法是把应用数据从控制数据或协调数据中分离出来。举个例子,一个web邮箱服务的用户,他们关注的是邮箱的邮件内容(谁发送的,主题等),但是他们不会去关注哪个服务节点正在处理该特定的邮箱服务请求。邮箱的邮件内容是应用数据,而邮件的处理请求和服务节点的映射却不是,他们可以被ZooKeepter管理。

二、ZooKeeper的使命

试图解释ZooKeeper能为我们做什么就好像试图解释螺丝刀能为我们做什么一样。一个非常基本的运用中,我们可以通过螺丝刀开转动和拧拽螺丝钉,但是这样并不能显示出该螺丝刀的强大。它可使得我们能够组装家具和电子设备,并在某些情况下可以把照片挂到墙上去。通过给一些像这样的例子,我们可以感觉出螺丝刀可以为我们做什么,但肯定不是彻底的。

对于ZooKeepter能为我们做什么也是一样的,它能为分布式系统协调任务。协调任务一般涉及到多个进程。这样的一个任务的目的可以是合作或者调节。合作意味着进程需要一起做些事情,使得其他进程得到进展。例如,一个master-worker结构,worker告知master我现在空闲可以工作了,随后master分配任务给worker。争用不同的是:它是指其中两个进程不能同时取得进展的情况下,因此必须等待其他。比如master-worker这个例子,我们只需要一个单一的master,那么多个进程之间就会产生竞争。那么多进程间就需要实现互斥(mutual exclusion)。我们通常可以认为取得主控权的任务是获取一个锁:即获得主动权的进程具有了行使主人(master)的权利。

如果你有多线程编程的经历,你将会意识到这里有许多简单的问题。事实上,运行在同一机子上的进程和扩计算机的进程概念上是没有什么区别的。同步原语在多线程的上下文中有效,并且在分布式系统中它仍然有效。虽然有一些消息传递算法实现了同步原语,它通常更容易依靠提供一些特殊排序熟悉的共享存储,如ZooKeeper。协调不总是像领导人选举和锁的同步原语形式出现。配置元数据通常被用来处理进程间传递。例如,在一个,master-worker系统中,worker需要知道任务已经赋予给他们,并且这些信息必须可用即使master崩溃。

然我们来看些例子,ZooKeeper已经在一些地方得到很好的运用。

Apache Hbase ,Apache Kaka,Apache Solr,Yahoo!Fetching Service、Facebook Messages。

当编程用到Zookeeper时,开发人员设计应用程序作为链接ZooKeeper服务的客户端。并通过ZooKeeper的API调用连接。

ZooKeeper 学习笔记(一)的更多相关文章

  1. ZooKeeper 学习笔记

    ZooKeeper学习笔记 1.   zookeeper基本概念 zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,是hadoop和Habase的重要组件,是为分布式应用提供一致性服 ...

  2. ZooKeeper学习笔记(二)——内部原理

    zookeeper学习笔记(二)--内部原理 1. zookeeper的节点的类型 总的来说可以分为持久型和短暂型,主要区别如下: 持久:客户端与服务器端断开连接的以后,创建的节点不会被删除: 持久化 ...

  3. ZooKeeper学习笔记(一)——概述

    zookeeper学习笔记(一)--概述 1. 概述 Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目.zookeeper从设计模式的角度来理解:是一个基于观察者设计 ...

  4. Zookeeper学习笔记(中)

    Zookeeper学习笔记(中) Zookeeper的基本原理和基本实现 深入了解ZK的基本原理 ZK的一致性: ZAB 协议: Zookeeper 原子消息广播协议 ZK通过选举保证 leader ...

  5. Zookeeper学习笔记(上)

    Zookeeper学习笔记 本篇主要是一些基本的介绍和API的使用介绍, 有些只是记录了知识点,而没有完全在笔记中详细解释, 需要自行查找资料补充相关概念 主要参考了课程中的内容: Zookeeper ...

  6. ZooKeeper学习笔记一:集群搭建

    作者:Grey 原文地址:ZooKeeper学习笔记一:集群搭建 说明 单机版的zk安装和运行参考:https://zookeeper.apache.org/doc/r3.6.3/zookeeperS ...

  7. ZooKeeper学习笔记三:使用ZooKeeper实现一个简单的配置中心

    作者:Grey 原文地址:ZooKeeper学习笔记三:使用ZooKeeper实现一个简单的配置中心 前置知识 完成ZooKeeper集群搭建以及熟悉ZooKeeperAPI基本使用 需求 很多程序往 ...

  8. ZooKeeper学习笔记二:API基本使用

    Grey ZooKeeper学习笔记二:API基本使用 准备工作 搭建一个zk集群,参考ZooKeeper学习笔记一:集群搭建. 确保项目可以访问集群的每个节点 新建一个基于jdk1.8的maven项 ...

  9. ZooKeeper学习笔记四:使用ZooKeeper实现一个简单的分布式锁

    作者:Grey 原文地址: ZooKeeper学习笔记四:使用ZooKeeper实现一个简单的分布式锁 前置知识 完成ZooKeeper集群搭建以及熟悉ZooKeeperAPI基本使用 需求 当多个进 ...

  10. Zookeeper学习笔记(下)

    这是ZK学习笔记的下篇, 主要希望可以分享一些 ZK 的应用以及其应用原理 我本人的学习告一段落, 不过还遗留了一些ZK相关的任务开发和性能测试的任务, 留待以后完成之后再通过其他文章来进行分享了 Z ...

随机推荐

  1. C的动态链表建立

    运用到的函数为: 动态内存分配函数malloc()              比如:char *name=(char *)malloc(20);  相当与c++的new关键字 动态内存释放函数free ...

  2. jQuery.1.9 live 代替事件 on 新增内容无法触发事件

    如果是新增 append 或者 html() 事件添加的内容,无法触发 click 事件, 在1.9 可以用live 事件来代替 1.9以后用 <div class="search-r ...

  3. mysql 安装(压缩包安装和exe安装)

    1:mysql官网:https://dev.mysql.com/downloads/file/?id=482487 2:压缩包安装:https://www.cnblogs.com/jamespan23 ...

  4. Eclipse与IDEA快捷键对比

    from:http://blog.csdn.net/dc_726/article/details/9531281 花了一天时间熟悉IDEA的各种操作,将各种快捷键都试了一下,感觉很是不错!于是就整理了 ...

  5. OpenCL入门

    初入OpenCL,做个记录. 在Windows下开发OpenCL程序,必须先下载OpenCL的SDK,现在AMD,NVIDIA,Intel均提供各自的OpenCL库,基本是大同小异.安装好SDK后新建 ...

  6. C#操作mysql数据库,往mysql读取或者写入数据

    最近在开发的一个项目,需要将数据存贮在mysql数据库中,于是需要写一个操作mysql的帮助类,我采用的是官方的,还是先给出一个链接,后面有时间的话,继续更新. http://blog.csdn.ne ...

  7. C# 7.0 新特性收集

    1.out-variables(Out变量) 2.Tuples(元组) 3.Pattern Matching(匹配模式) 4.ref locals and returns (局部变量和引用返回) 5. ...

  8. erlang的一些小技巧(不定期更新)

    在任意节点热更新代码 rpc:call(Node,c,l,[Mod]) c和l的指的是code,library Erlang Shell隐藏的小技巧 f(). %%把所有绑定变量释放掉 f(Val). ...

  9. TCP/IP网络编程系列之二(初级)

    套接字类型与协议设置 我们先了解一下创建套接字的那个函数 int socket(int domain,int type,int protocol);成功时返回文件描述符,失败时返回-1.其中,doma ...

  10. html5 模块

    1.<header> 网站头部标签2.<nav> 导航标签3.<article> 内容标签4.<section> 文章标签5.<aside> ...