ZooKeeper学习笔记(一)
引导
刚开始学习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学习笔记(一)的更多相关文章
- ZooKeeper 学习笔记
ZooKeeper学习笔记 1. zookeeper基本概念 zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,是hadoop和Habase的重要组件,是为分布式应用提供一致性服 ...
- ZooKeeper学习笔记(二)——内部原理
zookeeper学习笔记(二)--内部原理 1. zookeeper的节点的类型 总的来说可以分为持久型和短暂型,主要区别如下: 持久:客户端与服务器端断开连接的以后,创建的节点不会被删除: 持久化 ...
- ZooKeeper学习笔记(一)——概述
zookeeper学习笔记(一)--概述 1. 概述 Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目.zookeeper从设计模式的角度来理解:是一个基于观察者设计 ...
- Zookeeper学习笔记(中)
Zookeeper学习笔记(中) Zookeeper的基本原理和基本实现 深入了解ZK的基本原理 ZK的一致性: ZAB 协议: Zookeeper 原子消息广播协议 ZK通过选举保证 leader ...
- Zookeeper学习笔记(上)
Zookeeper学习笔记 本篇主要是一些基本的介绍和API的使用介绍, 有些只是记录了知识点,而没有完全在笔记中详细解释, 需要自行查找资料补充相关概念 主要参考了课程中的内容: Zookeeper ...
- ZooKeeper学习笔记一:集群搭建
作者:Grey 原文地址:ZooKeeper学习笔记一:集群搭建 说明 单机版的zk安装和运行参考:https://zookeeper.apache.org/doc/r3.6.3/zookeeperS ...
- ZooKeeper学习笔记三:使用ZooKeeper实现一个简单的配置中心
作者:Grey 原文地址:ZooKeeper学习笔记三:使用ZooKeeper实现一个简单的配置中心 前置知识 完成ZooKeeper集群搭建以及熟悉ZooKeeperAPI基本使用 需求 很多程序往 ...
- ZooKeeper学习笔记二:API基本使用
Grey ZooKeeper学习笔记二:API基本使用 准备工作 搭建一个zk集群,参考ZooKeeper学习笔记一:集群搭建. 确保项目可以访问集群的每个节点 新建一个基于jdk1.8的maven项 ...
- ZooKeeper学习笔记四:使用ZooKeeper实现一个简单的分布式锁
作者:Grey 原文地址: ZooKeeper学习笔记四:使用ZooKeeper实现一个简单的分布式锁 前置知识 完成ZooKeeper集群搭建以及熟悉ZooKeeperAPI基本使用 需求 当多个进 ...
- Zookeeper学习笔记(下)
这是ZK学习笔记的下篇, 主要希望可以分享一些 ZK 的应用以及其应用原理 我本人的学习告一段落, 不过还遗留了一些ZK相关的任务开发和性能测试的任务, 留待以后完成之后再通过其他文章来进行分享了 Z ...
随机推荐
- 开始学习es6(二) let 与 const 及 块级作用域
1.var JavaScript中,我们通常说的作用域是函数作用域,使用var声明的变量,无论是在代码的哪个地方声明的,都会提升到当前作用域的最顶部,这种行为叫做变量提升(Hoisting) cons ...
- 标准C程序设计七---114
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
- Python Challenge 第五关
进入第五关,一张图和一行提示: pronounce it.右键源代码,只有一行注释: <!-- peak hell sounds familiar ? --> peak hell 听起来熟 ...
- 微信公众号手机端PC端多客服系统
最近很多客户反应没有专门的客服坐在电脑面前,接收回复客户的问题:不能及时回复客户 咨询的问题,现在我们已经为此帮您解决烦恼!! 支持PC与手机端接收微信客户咨询与回复客户,让您随时随地及时回复客户咨询 ...
- 51nod 1201 整数划分
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1201 DP转移方程:dp[i][j] = dp[i-j][j]+dp[i ...
- 洛谷——P1331 海战
P1331 海战 题目描述 在峰会期间,武装部队得处于高度戒备.警察将监视每一条大街,军队将保卫建筑物,领空将布满了F-2003飞机.此外,巡洋船只和舰队将被派去保护海岸线.不幸的是因为种种原因,国防 ...
- PageHelper分页工具
<a>共${page.total}件商品</a> <a>共${page.pages}页</a> <a>当前第${page.pag ...
- Java Web工程连接MySQL数据库及Tomcat服务器页面中文乱码
Java Web工程连接MySQL数据库 一. 准备工作 1.下载连接MySQL数据库的JDBC (可以去官网下,也可以去百度云找) 2.将下载的jar文件复制到Tomcat的lib目录下 3.新建一 ...
- AnsiString类型定义的时候可以直接指定代码页,比如950繁体字,936日文
procedure TForm3.FormCreate(Sender: TObject); type AnsiStringForPage = type AnsiString(950);//代码页 va ...
- javascript --- 继承小结
回顾之前学到的知识,大体上可以分为两类: 1. 基于构造器工作的模式. 2. 基于对象的工作模式. 3. 是否使用原型 4. 是否执行属性拷贝. 5. 两者都有(执行原型属性拷贝) 下面我们把之前的知 ...