之前稍微看了一下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. 使用Git进行代码管理的心得

    使用GitHub进行代码托管的方法 我是直接下载 Github for Windows ,这个软件自带一个 Github 客户端 和一个 Git shell,其中Github是图形化界面,对初学者来说 ...

  2. C#多线程 线程池

    实例1:直接看看微软提供的代码 using System; using System.Threading; public class Example { public static void Main ...

  3. iOS开发UI篇—直接使用UITableView Controller

    iOS开发UI篇—直接使用UITableView Controller 一.一般过程 // // YYViewController.h // UITableView Controller // // ...

  4. Swift学习

    Swift 中文教程(一)基础数据类型 基础类型 虽然Swift是一个为开发iOS和OS X app设计的全新编程语言,但是Swift的很多特性还是跟和Objective-C相似. Swift也提供了 ...

  5. Rhel6-DM多路经存储配置文档

    系统环境: rhel6 x86_64 iptables and selinux disabled 主机: 主机 网卡 软件 server21.example.com eth0:192.168.122. ...

  6. 制造业如何基于BPM做供应链管理?

    公司介绍深圳市吉祥腾达科技有限公司是中国网络产业的开航者,是中国无线网络领域的首批开拓者之一.历经10年的开拓创新,已经形成了拥有自主研发的全面产品线. 为了使公司物流.资金流和信息流实现优化整合,腾 ...

  7. Linux(Ubuntu) 和 Python 常用命令

    Linux: pwd: check current directory touch f1 f2 f3: create three empty files tree dir/: show the lev ...

  8. UNIX 和 LINUX

    UNIX操作系统(尤尼斯),是一个强大的多用户.多任务操作系统,支持多种处理器架构,按照操作系统的分类,属于分时操作系统,最早由KenThompson.DennisRitchie和DouglasMcI ...

  9. Oracle日期时间

    今天上班一个问题:sql获取最近三天内上传文档在页面显示标记new,超过三天则不显示标记,并且在标题标明new数量. 完成思路:sql上加一字段查询出三天内为1,其他为非1;在angularJs的se ...

  10. 如何在Kali Linux中搭建钓鱼热点

    文中提及的部分技术可能带有一定攻击性,仅供安全学习和教学用途,禁止非法使用! 0×00 实验环境 操作系统:Kali 1.0 (VM) FackAP: easy-creds 硬件:NETGEAR wg ...