了解了解你自己的话zookeeper(从那时起,纠正了一些说法在线)
1,先看看官方的定义吧:
ZooKeeper is a distributed, open-source coordination service for distributed applications. It exposes a simple set of primitives that distributed applications can build upon to implement higher
level services for synchronization, configuration maintenance, and groups and naming. It is designed to be easy to program to, and uses a data model styled after the familiar directory tree structure of file systems.
zookeeper 是一个分布式应用程序提供的分布式的开源的协调服务。
他提供了一个简单的原语集,通过这些原语集能够实现更高层次的同步服务,配置管理,集群管理和命名服务。他被设计为易于编程和以一种和文件系统很类似的数据模型来实现编程。
通过定义能够了解到zookeeper都有哪些作用,无非就是一句话:能够为分布式应用程序提供同步服务,命名服务等功能。可是了解到这里马上就会产生疑问----还有好多开源项目都能够为分布式应用程序提供这些服务啊,为什么要用zookeeper呢?
举两个样例:
能够用redis实现分布式锁啊,或是不用redis随便用个什么其它的什么东西都能够作为分布式应用程序的锁啊;
配置管理好像就更扯了。我随便能够把配置放到什么地方仅仅要让分布式应用去读就能够了。
事实上。zookeeper不过只能提供这些功能也确实就没什么存在的必要了,关键是他可以提高可用的高一致性的这些服务。
提到高可用的这几个字,这时或许我们就会想到採用集群的方式(如今server部署的主流方式)。那么不过由于这个redis相同也能够达到这个标准。可是zookeeper还有高一致性的特性。
整体上来讲。zookeeper作为分布式应用的协调服务拥有一下特性:
高可用性。高一致性,高性能 (是不是对于分布式理论中的cap呢 Consistency Availability Partition Tolerance 事实上cap理论也是受到争议的)
以下主要说一说zookeeper的高一致性
Server端很多其它的是存储一些数据的状态,而非数据内容本身,因此Zookeeper能够作为一个小文件系统使用。数据状态的存储量相对不大。全然能够所有载入到内存中,从而极大地消除了通信延迟。
对于分布式系统的一致性问题,事实上也就是在分布式环境下更新操作的顺序问题。相应于学术术语也就是全序(她是集合其中的一个概念)
例如以下:
这个差点儿是不可能的, 由于全部的物理时钟同步。古代关于时钟另一个故事(參见罗辑思维-击溃牛顿的钟表匠)。只是现代google公布的spanner的核心技术中包括用卫星进行全球的datacenter之间的时钟同步
仅仅有当两个进程间产生通信后, 产生因果关系, 从而来确定顺序
如p1为发消息给Q事件, 而q2为从P收到消息事件, 则p1和q2间有明白的因果关系, 故能够说p1 "happen before" q2, 即p1 –> q2
所以在存在leader正常工作的情况下。由leader作为唯一的參照物就可以。可是当leader down掉选举发生的过程中。或者出现多个leader的情况下就没有办法了。
而zookeeper正是运用fastpaxos和zab来保证这中一致性。总之,zookeeper利用在全序列的思想下利用以ZAB为协议的fastpaxos算法实现了强一致性。
參考:
http://breezes.lofter.com/post/d325_1aa98b
http://michael8335.iteye.com/blog/1723183
http://www.searchtb.com/2011/01/zookeeper-research.html
http://blog.csdn.net/chen77716/article/details/7309915
版权声明:本文博主原创文章,博客,未经同意不得转载。
了解了解你自己的话zookeeper(从那时起,纠正了一些说法在线)的更多相关文章
- Zookeeper 的学习与运用
引子 云计算越来越流行的今天,单一机器处理能力已经不能满足我们的需求,不得不采用大量的服务集群.服务集群对外提供服务的过程中,有很多的配置需要随时更新,服务间需要协调工作,这些信息如何推送到各个节点? ...
- Zookeeper的基础知识
1.Zookeeper是什么? 引用官方的说法:“Zookeeper是一个高性能,分布式的,开源分布式应用协调服务.它提供了简单原始的功能,分布式应用可以基于它实现更高级 的服务.它被设计为易于编程, ...
- zookeeper的集群介绍、搭建、环境、安装
zookeeper是本身是一种分布式协调服务(英文意思动物园园长因为Hadoop就是一个动物园,storm.hadoop.kafkaka.hbaser都是基于zookeeper开发的) 原理:Zook ...
- Zookeeper基本使用(转)
一.Zookeeper架构 云计算越来越流行的今天,单一机器处理能力已经不能满足我们的需求,不得不采用大量的服务集群.服务集群对外提供服务的过程中,有很多的配置需要随时更新,服务间需要协调工作,这些信 ...
- 3.0 zookeeper的集群介绍、搭建、环境、安装
zookeeper是本身是一种分布式协调服务(英文意思动物园园长因为Hadoop就是一个动物园,storm.hadoop.kafkaka.hbaser都是基于zookeeper开发的) 原理:Zook ...
- 初识 Zookeeper
云计算越来越流行的今天,单一机器处理能力已经不能满足我们的需求,不得不采用大量的服务集群.服务集群对外提供服务的过程中,有很多的配置需要随时更新,服务间需要协调工作,这些信息如何推送到各个节点?并且保 ...
- Dubbo系列(1)_背景介绍和基本情况
一.本文目的 主要介绍Dubbo的产生背景和需要解决的问题 二.产生背景 随着大数据量.高并发的互联网应用越来越多,单机系统已经无法满足系统的需要.通过SOA搭建一个分 ...
- kafka的高可用和一致性探究
一.kafka基础 本篇文章讨论的kafka版本是目前最新版 0.10.1.0. 1.1 kafka种的KafkaController 所有broker会通过ZooKeeper选举出一个作为Kafka ...
- Kafka leader副本选举与消息丢失场景讨论
如果某个broker挂了,leader副本在该broker上的分区就要重新进行leader选举.来简要描述下leader选举的过程 1.4.1 KafkaController会监听ZooKeeper的 ...
随机推荐
- C++指针和引用简介
摘要 本文介绍C++指针和概念引用 这是一个指针 指针的类型 指针所指向的类型 指针表达式 指针与函数 什么是引用 指针引用差别 指针和引用的同样点和不同点 **什么是指针** 指针就是一个存放地址的 ...
- UVA 1358 - Generator(dp+高斯消元+KMP)
UVA 1358 - Generator option=com_onlinejudge&Itemid=8&page=show_problem&category=524& ...
- IOS 多于UIImageView 当加载较大的高清闪存管理
当我们是一家人View 多于UIImageView,和UIImageView表明一个更大的HD,可能存在的存储器的警告的问题.假设第一次走进这个view,无记忆出现预警.当重新进入view,在那曾经 ...
- Redis源代码分析(二十八)--- object创建和释放redisObject物
今天的学习更有效率.该Rio分析过,学习之间的另一种方式RedisObject文件,只想说RedisObject有些生成和转换.都是很类似的.列出里面长长的API列表: /* ------------ ...
- Java多线程<1>
1.Java多线程的概念: 线(Thread):它指的是一个任务的从开始执行流程到结束. 穿线提供执行任务的机构.供java条款.在一个程序可以启动多个并发线程.候执行. 在单处理器系统中,多个线程共 ...
- 第七章——DMVs和DMFs(4)——用DMV和DMF监控磁盘IO
原文:第七章--DMVs和DMFs(4)--用DMV和DMF监控磁盘IO 前言: 本文为本系列最后一篇,作为DBA,你必须经常关注磁盘的I/O问题,一旦出现问题,要尽快分析出是什么问题.SQLServ ...
- JAVA 跑马灯文字效果
JAVA跑马灯文字效果的实现: 1. 首先创建一个继承JFrame类的HorseRaceLightTextFrame窗体类,代码如下: package com.example.horseracelig ...
- mfc配置GDI+有106个错误
mfc配置GDI+有106个错误,处理如下,参考http://bbs.csdn.net/topics/380054079 一开始#include...放在stdafx.h里有错误,后来上面修改好了,放 ...
- C#程序(含多个Dll)合并成一个Exe
把C#程序(含多个Dll)合并成一个Exe的超简单方法 开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了. 但是,很多时候我们本想开发一款只需要一 ...
- spring整合JMS - 基于ActiveMQ实现
一. 开篇语 继上一篇apache ActiveMQ之初体验后, 由于近期一直在复习spring的东西, 所以本文就使用spring整合下JMS. 二. 环境准备 1. ActiveMQ5.2.0 ( ...