之前稍微看了一下Hadoop相关的技术文档,有了解到Hbase用zookeeper做分布式应用程序协调服务。

现在做的项目里,也是用zookeeper做集群和负载均衡(从类名LoadBalance看来)。

一个东西接连两次在你眼前晃过,就算实际中没有去用到,但也让人不得不去认识它。

从官网和其他博客找了一下相关资料介绍,从关键字看来都是“分布式锁”,“数据节点”,“主从选举”,“Watch触发器”等,看了肯定一下子就蒙了。

总结了一下实际的开发项目跟它介绍的这些专业术语关联不是很大,很多人还没来得及认识zookeeper,就单纯因为这几个关键字,觉得反正跟它也不相关,用不到,就直接把zookeeper抛一边。

但事实只要项目中涉及到分布式运算,基本上还是得回到zookeeper的了解中。

下面举个实际的例子,看看zookeeper对于现在从事的项目,可能应用到的场景:

分布式锁

如果问用Java写个线程同步的功能,怎么做?其实这个很容易,因为Java处理多线程语法比较简单,直接在要同步的方法前面加synchronized修饰符,或者在方法体里加入synchronized的代码块,锁住某个对象,进行线程间的互斥同步。

public synchronized void create() {
Object obj = new Object();
obj.toString();
}

对于同一台电脑、同一个进程,这样的同步是能够做到。但一提到分布式,这种处理同步的方法就立马歇菜了。先不说分布式是多台电脑之间的同步,就是一台电脑里多个进城间的同步(比如同一台电脑启动两个Tomcat服务),上面的写法也是无法做到。

数据一致性

所谓数据一致性,就是分布式环境中,只要有一台服务器的数据变更,其他服务器也跟着改变。这听起来好像似曾相识的样子,没错,数据库集群就是这样的处理的,往数据库集群中插入一条数据,集群的每个节点都会全部更新。这也是为什么HBase要用zookeeper,因为它就是一个分布式数据库。

那zookeeper这个特性,对于我们现在项目有什么地方可以应用到?实际的项目不可能去实现数据库集群这样的功能。

“更改一台服务器数据,其他服务器也跟着变”,从这句,立马能想到的就是配置信息。一般把项目发布到服务器上,能做修改的,就是改项目中的配置信息(比如连接池,线程池数量,返回最大数据条数、查询的距离等)。这又涉及到一个场景,改五台十台服务器配置用手动方式倒还能接受,如果是几十台,上百台呢?

认识zookeeper的更多相关文章

  1. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

  2. [译]ZOOKEEPER RECIPES-Leader Election

    选主 使用ZooKeeper选主的一个简单方法是,在创建znode时使用Sequence和Ephemeral标志.主要思想是,使用一个znode,比如"/election",每个客 ...

  3. zookeeper源码分析之六session机制

    zookeeper中session意味着一个物理连接,客户端连接服务器成功之后,会发送一个连接型请求,此时就会有session 产生. session由sessionTracker产生的,sessio ...

  4. zookeeper源码分析之五服务端(集群leader)处理请求流程

    leader的实现类为LeaderZooKeeperServer,它间接继承自标准ZookeeperServer.它规定了请求到达leader时需要经历的路径: PrepRequestProcesso ...

  5. zookeeper源码分析之四服务端(单机)处理请求流程

    上文: zookeeper源码分析之一服务端启动过程 中,我们介绍了zookeeper服务器的启动过程,其中单机是ZookeeperServer启动,集群使用QuorumPeer启动,那么这次我们分析 ...

  6. zookeeper源码分析之三客户端发送请求流程

    znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的 ...

  7. zookeeper源码分析之二客户端启动

    ZooKeeper Client Library提供了丰富直观的API供用户程序使用,下面是一些常用的API: create(path, data, flags): 创建一个ZNode, path是其 ...

  8. zookeeper源码分析之一服务端启动过程

    zookeeper简介 zookeeper是为分布式应用提供分布式协作服务的开源软件.它提供了一组简单的原子操作,分布式应用可以基于这些原子操作来实现更高层次的同步服务,配置维护,组管理和命名.zoo ...

  9. zookeeper集群的搭建以及hadoop ha的相关配置

    1.环境 centos7 hadoop2.6.5 zookeeper3.4.9 jdk1.8 master作为active主机,data1作为standby备用机,三台机器均作为数据节点,yarn资源 ...

  10. 如何编译Zookeeper源码

    1. 安装Ant Ant下载地址:http://ant.apache.org/bindownload.cgi 解压即可. 2. 下载Zookeeper源码包 https://github.com/ap ...

随机推荐

  1. JavaScipt 源码解析 异步

    我们常见的异步操作: 定时器setTimeout postmessage WebWorkor CSS3 动画 XMLHttpRequest HTML5的本地数据 等等- JavaScript要求在与服 ...

  2. 编译osg的一个错误

    C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppCommon.targets! 提示找不到CMAKELIST.T ...

  3. OC面向对象—继承

    OC面向对象—继承 一.基本概念 程序的世界和人类的“对象”世界在思想上是没有设么区别的,富二代继承了父母,自然就拥有了父母拥有的所有资源,子类继承了父类同样就拥有了父类所有的方法和属性(成员变量). ...

  4. iOS开发UI篇—简单介绍静态单元格的使用

    iOS开发UI篇—简单介绍静态单元格的使用 一.实现效果与说明 说明:观察上面的展示效果,可以发现整个界面是由一个tableview来展示的,上面的数据都是固定的,且几乎不会改变. 要完成上面的效果, ...

  5. POJ 3216 最小路径覆盖+floyd

    Repairing Company Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 6646   Accepted: 178 ...

  6. Android - PopupWindow

    PopupWindow就是一个可以显示在当前界面上的浮动容器,它可以用来显示任意一个View,同时还可以指定显示的位置. 下面写一个显示下拉的例子: PopupWindow mpopupWindow; ...

  7. 说一说vector<bool>

    vector<T>标准库模版类应该是绝大多数c++程序员使用频率比较高的一个类了.不过vector<bool>也许就不那么被程序员所了解.关于vector<bool> ...

  8. bzero函数

    函数原型:void bzero(void *s,int n) 作用:bzero函数的作用是将s指针指向的地址的前n个字节清零. 头文件:#include <string.h> eg.

  9. windowsAzure模拟器错误

    Failed to initialize Microsoft Azure storage emulator. Unable to open wait handle 无法初始化微软Azure存储模拟器. ...

  10. log4j.properties配置详解(转)

    本篇文章转自http://it.oyksoft.com/log4j/ 非常感谢原创作者的辛勤编写与分享. 一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders ...