博客已经搬家,见【ZooKeeper怎么玩】之一:为什么需要ZK

学习新东西首先需要搞清楚为什么学它,这是符合我们的一个认知过程。
<!--more-->
#ZooKeeper是什么
ZooKeeper是一个分布式协调服务,它致力去解决如何在分布式环境下保持数据一致性的问题。

#分布式环境下遇到的问题
共享的资源在并发的情况下会出现竞争,在线程间可以使用Java提供的锁机制来协调这些资源,那么在分布式的环境下,如何来协调这些资源呢?

如何协调分布式环境下的资源,首先应该明确由单机环境转到分布式环境下遇到了什么问题?

1. **分布式环境下无法保证顺序**。

在单机环境如果想让A先执行,B后执行,先调用A后调用B就可以了;由于网络是不可靠的,分布式环境中则不同,在网络延迟的情况下A可能比B执行要晚。
2. **分布式环境下无法明确执行结果**。

单机中调用A成功和失败很明确;而在分布式环境中,即使调用A执行成功了,而在网络传输中超时了,此时无法判断A是否执行成功了,需要通过重试的方式才能判断A有没有执行成功。
3. **分布式环境下无法保证数据一致性**。

分布式环境如果很多台服务器提供相同的服务,如何保证服务的某一个改动要么同时生效,要么失败,是分布式和单机环境的最重要的区别。

#没有ZooKeeper之前的世界是什么样子

1. **保证事务顺序一致性**。

如果事务A在一台服务器上优先于事务B先执行,则在所有的服务器上事务A都将优先于事务B执行。由于网络是不可靠的,如果没有ZooKeeper如何保证在所有服务器上事务顺序一致将是一个很复杂的问题,而ZooKeeper使我们专注于业务逻辑,而不用过分关注于分布式协调。

2. **保证单调一致性**。

单调一致性是最终一致性的变种。在任何情况下,用户一旦读到某个数据的某次更新后的值,就不会再读到比这个值更旧的值了。

【ZooKeeper怎么玩】之一:为什么需要ZK的更多相关文章

  1. 搭建一个基于CentOS的可视化zookeeper管理工具zkUI实现对zk的可视化管理

    一. zookeeper 可视化工具   JMX => CLRProfile ZKUI => java写的一个可视化的web网站 github中下载 https://github.com/ ...

  2. zookeeper笔记之基于zk实现分布式锁

    一.分布式锁概述 Java中基于AQS框架提供了一系列的锁,但是当需要在集群中的多台机器上互斥执行一段代码或使用资源时Java提供的这种单机锁就没了用武之地,此时需要使用分布式锁协调它们.分布式锁有很 ...

  3. zk 06之:ZooKeeper命令、命令行工具及简单操作

    常用命令ZooKeeper 支持某些特定的四字命令字母与其的交互.它们大多是查询命令,用来获取 ZooKeeper 服务的当前状态及相关信息.用户在客户端可以通过 telnet 或 nc 向 ZooK ...

  4. 欢迎来到 ZooKeeper 动物世界

    本文作者:HelloGitHub-老荀 Hi,这里是 HelloGitHub 推出的 HelloZooKeeper 系列,免费有趣.入门级的 ZooKeeper 开源教程,面向有编程基础的新手. Zo ...

  5. Spark ZooKeeper数据恢复

    Spark使用ZooKeeper进行数据恢复的逻辑过程如下: 1.初始化:创建<CuratorFramwork,LeaderLatch,LeaderLatchListener>用于选举 创 ...

  6. zookeeper工作原理、安装配置、工具命令简介

    1.Zookeeper简介 Zookeeper 是分布式服务框架,主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务.集群管理.分布式应用配置项的管理等等. 2.zo ...

  7. ZooKeeper 笔记(1) 安装部署及hello world

    先给一堆学习文档,方便以后查看 官网文档地址大全: OverView(概述) http://zookeeper.apache.org/doc/r3.4.6/zookeeperOver.html Get ...

  8. ZooKeeper学习总结 第二篇:ZooKeeper深入探讨(转载)

    其实zookeeper系列的学习总结很早就写完了,这段时间在准备找工作的事情,就一直没有更新了.下边给大家送上,文中如有不恰当的地方,欢迎给予指证,不胜感谢!. 1. 数据模型 1.1. 只适合存储小 ...

  9. dubbo+zookeeper简单环境搭建

    dubbo+zoopeeper例子 [TOC] 标签(空格分隔): 分布式 dubbo dubbo相关 dubbo是目前国内比较流行的一种分布式服务治理方案.还有一种就是esb了.一般采用的是基于Ap ...

随机推荐

  1. JMeter参数文件的相对路径

    很多教程里都说“尽可能将参数文件配置为相对路径,以更好的去适配Slave环境”或者“把XX放到相对路径” 这里相对路径是指的 C:\Program Files (x86)\apache-jmeter- ...

  2. Centos Crontab查看状态和开启

    # service crond status crond is stopped # service crond start Starting crond # service crond status ...

  3. Qt5 窗口内的控件随窗口大小自动变化

    http://www.bubuko.com/infodetail-827151.html 讲的很详细

  4. 解决:easygui.msgbox("Hello there!")报错:Tcl_Init error: Can't find a usable init.tcl in the following directories问题的解决

    今天学习<父与子的编程之旅>,当看到运行第一个gui时(代码如下): import easygui easygui.msgbox("Hello there!") 发现报 ...

  5. poj 2513 欧拉图/trie

    http://poj.org/problem?id=2513 Colored Sticks Time Limit: 5000MS   Memory Limit: 128000K Total Submi ...

  6. linux部署python和加入mysqldb、easy_install

    一.安装easy_install 参考文章: http://www.cnblogs.com/huangjacky/archive/2012/03/28/2421866.html 安装 wget htt ...

  7. 【WPF】命令系统

    引言 在MVVM模式开发下,命令Command是编程中不可或缺的一部分.下面,我分3种场景简单介绍一下命令的用法. ViewModel中的命令 在ViewModel定义命令是最常用的用法,开发中几乎9 ...

  8. (转) Android Service完全解析,关于服务你所需知道的一切(上)

    相信大多数朋友对Service这个名词都不会陌生,没错,一个老练的Android程序员如果连Service都没听说过的话,那确实也太逊了.Service作为Android四大组件之一,在每一个应用程序 ...

  9. Java匿名对象和匿名类总结

    一.匿名对象 匿名对象是没有名字的实体,也就是该实体没有对应的变量名引用  匿名对象的特征:            创建的匿名类的对象只能够调用一次            匿名对象只在堆内存中开辟空间 ...

  10. ZOJ - 3201 Tree of Tree (树形背包)

    题意:有一棵树,树上每个结点都有一个权值,求恰好包含k个结点的子树的最大权值. 设dp[i][j]为以结点i为根的树中包含j个结点的子树的最大权值,则可以把这个结点下的每棵子树中所包含的所有子树的大小 ...