认识zookeeper
之前稍微看了一下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的更多相关文章
- 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)
一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...
- [译]ZOOKEEPER RECIPES-Leader Election
选主 使用ZooKeeper选主的一个简单方法是,在创建znode时使用Sequence和Ephemeral标志.主要思想是,使用一个znode,比如"/election",每个客 ...
- zookeeper源码分析之六session机制
zookeeper中session意味着一个物理连接,客户端连接服务器成功之后,会发送一个连接型请求,此时就会有session 产生. session由sessionTracker产生的,sessio ...
- zookeeper源码分析之五服务端(集群leader)处理请求流程
leader的实现类为LeaderZooKeeperServer,它间接继承自标准ZookeeperServer.它规定了请求到达leader时需要经历的路径: PrepRequestProcesso ...
- zookeeper源码分析之四服务端(单机)处理请求流程
上文: zookeeper源码分析之一服务端启动过程 中,我们介绍了zookeeper服务器的启动过程,其中单机是ZookeeperServer启动,集群使用QuorumPeer启动,那么这次我们分析 ...
- zookeeper源码分析之三客户端发送请求流程
znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的 ...
- zookeeper源码分析之二客户端启动
ZooKeeper Client Library提供了丰富直观的API供用户程序使用,下面是一些常用的API: create(path, data, flags): 创建一个ZNode, path是其 ...
- zookeeper源码分析之一服务端启动过程
zookeeper简介 zookeeper是为分布式应用提供分布式协作服务的开源软件.它提供了一组简单的原子操作,分布式应用可以基于这些原子操作来实现更高层次的同步服务,配置维护,组管理和命名.zoo ...
- zookeeper集群的搭建以及hadoop ha的相关配置
1.环境 centos7 hadoop2.6.5 zookeeper3.4.9 jdk1.8 master作为active主机,data1作为standby备用机,三台机器均作为数据节点,yarn资源 ...
- 如何编译Zookeeper源码
1. 安装Ant Ant下载地址:http://ant.apache.org/bindownload.cgi 解压即可. 2. 下载Zookeeper源码包 https://github.com/ap ...
随机推荐
- mysql索引的使用[下]
接着上篇,我们继续来探究索引.这次我们主要来探究关于联合索引的使用和联合.多表查询的规范. 继续看一下数据: mysql> select * from student order by ID d ...
- Linux系统真正的优势以及学习方法
作为一名Linux爱好者,在Linux的世界中也算是半个老司机了,从桌面玩到服务器.从ubuntu到centos.从计算机到路由器,各种Linux的花俏玩法都略有体验.作者并非职业Linux选手,我仅 ...
- bzoj 3130: [Sdoi2013]费用流
#include<cstdio> #include<iostream> #define M 10000 #define inf 0x7fffffff #include<c ...
- ant sshexec 无法启动tomcat
1.如果./startup.sh启动不了,可以试试./catalina.sh run 2.这个两个都是调用的catalina里边的方法,只不过一个重定向了日志,一个没有 eval \"$_R ...
- Ubuntu gmake: command not found
由于ubuntu上取消了gmake(GUNmake)的而全部使用make代替.所以此问题的解决方式是有两种: 1.makefile中 gmake用make代替: 2.创建一个make的gmake连接: ...
- Android SQLiteOpenHelper(一)
SQLiteOpenHelper api解释: A helper class to manage database creation and version management. You creat ...
- [深入Python]__new__和__init__
class A(object): def __init__(self): print "init" def __new__(cls,*args, **kwargs): print ...
- CBC和CTR解密模式——C++实现
利用已经封装好的AES加密算法,实现CBC模式加密和CTR模式加密. (1)CBC解密 如图,CBC模式的解密,步骤主要有三个,首先是拿密文段逐一放到AES解密盒子里面得到一个结果temp(事先要把密 ...
- VC++ 文件系统
using namespace System; using namespace System::IO; void ShowHelpMsg(){ Console::WriteLine(L"本程 ...
- HDU 1209
http://acm.hdu.edu.cn/showproblem.php?pid=1209 水题,按五个时针分针成的锐角从小到大排序,角度相同时间从早到晚,输出中间的那个 时针一小时走30度,一分钟 ...