引导

刚开始学习ZooKeepter,看的书是[O'Reilly Media] ZooKeeper。下面的内容基本上是该书的翻译,很多语句也存在问题,大致读还是没问题的,自己在学习中记录。

第一章 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. poj 1981 Circle and Points

    Circle and Points Time Limit: 5000MS   Memory Limit: 30000K Total Submissions: 8131   Accepted: 2899 ...

  2. Codeforces878C. Tournament

    $n \leq 50000$个人,每个人有$K \leq 10$个属性,现对每一个前缀问:进行比赛,每次任意两人比任意属性,小的淘汰(保证同一属性不会出现两个相同的数),最终有几个人有可能获胜. 明显 ...

  3. GridView主键列不让编辑时应该修改属性DataKeyNames

    原文发布时间为:2008-08-02 -- 来源于本人的百度文章 [由搬家工具导入] 为了防止GridView主键被编辑,应该在GridView属性DataKeyNames里面写上主键

  4. 无密码登录Linux

    配置主机A无密码登录主机B 主机A:192.168.1.110 主机B:192.168.1.111 先确保所有主机的防火墙处于关闭状态. 在主机A上执行如下: 1. $cd ~/.ssh 2. $ss ...

  5. 用Linux完成Oracle自动物理备份

    https://blog.csdn.net/24024846/article/details/115292

  6. HDU 5046 Airport【DLX重复覆盖】

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5046 题意: 给定n个城市的坐标,要在城市中建k个飞机场,使城市距离最近的飞机场的最长距离最小,求这 ...

  7. Linux Root下的.gvfs出现异常解决办法(导致source失败,自启动失败)

    原文地址:   http://www.cnblogs.com/tdyizhen1314/p/4142991.html 在linux系统下安装软件或复制文件的时候,复制不成功,出现错误如下: error ...

  8. git 撤回上一次commit中某一个不想添加的文件

    1. 假设我们修改了文件a,同时修改了IDE的配置文件b 2.此时我们只想添加文件a到commit中,却不小心将b也添加进去了 3.那么怎么撤回呢? 4.第一种方法 :重新提交commit 5. 第二 ...

  9. java常用IO

    字节流:FileInputStream.FileOutputStream 字符流:FileWriter.FileReader 转换流:InputStreamReader.OutputStreamRea ...

  10. MQTT协议介绍

    http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.pdf   MQTT 文档 http://mqtt.org/new/wp-c ...