之前稍微看了一下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. 读《程序员的SQL金典》[3]--表连接、子查询

    一.表连接-JOIN 1. 自连接实例 查询类型相同的订单信息. SELECT O1 .*,O2.* FROM T_Order O1 JOIN T_Order O2 ON O1 .FTypeId= O ...

  2. WCF初探-1:认识WCF

    1.WCF是什么? WindowsCommunication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,它是.NET框架的一部分,由.NET Framework 3. ...

  3. Positive-definite kernel

    Definition Let be a sequence of (complex) Hilbert spaces and be the bounded operators from Hi to Hj. ...

  4. mybatis进阶

    1.mybatis一对一映射 Student--Card <?xml version="1.0" encoding="utf-8" ?> <! ...

  5. 使用excel快速制表 拒绝粗心

    办公室打印个表格 使用了word打印后 发现 id重复很多 只好网上找了点excel 2003资料 学习小 快速制作表格 新建一个excel文件. 在新建excel中,用鼠标选中需要的表格行数列数,然 ...

  6. Python的平凡之路(4)

    一.迭代器&生成器 生成器定义: 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅 ...

  7. Objective-C学习笔记-第三天(1)

    今天开始用oc写iOS程序,遇到的问题有 1.在不同的类使用类的方法或者访问类的属性的时候(公开的方法或者属性),方法或者属性必须在类头文件中声明. 2.对象类型的声明以及定义需要用*,表明这个是一个 ...

  8. SAP web 开发 (第二篇 bsp 开发 mvc模式 Part1 )

    Model-View-Controller 简称MVC. 简单的说就是把数据处理,显示,页面事件及处理过程分离开来,企业应用多数都采用这种方式,多层架构的优缺点不再多言,google一下啥都知道. 在 ...

  9. 基于Twemproxy的Redis集群搭建以及想法

    基于Twemproxy的Redis集群方案(转) redis3.0 已经发布了几个月了,但是我这等菜鸟到网上还是没有找到很好的关于搭建redis3.0集群的文章,而且好像很多公司的redis版本还保持 ...

  10. system_call的处理过程

    一. 跟踪time系统调用 使用gdb调试跟踪系统调用内核函数sys_time 过程如下: 对sys_time设置断点之后,在menuOS中执行time命令,发现系统停在systime处,输入S单步执 ...