认识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 ...
随机推荐
- 使用Git进行代码管理的心得
使用GitHub进行代码托管的方法 我是直接下载 Github for Windows ,这个软件自带一个 Github 客户端 和一个 Git shell,其中Github是图形化界面,对初学者来说 ...
- C#多线程 线程池
实例1:直接看看微软提供的代码 using System; using System.Threading; public class Example { public static void Main ...
- iOS开发UI篇—直接使用UITableView Controller
iOS开发UI篇—直接使用UITableView Controller 一.一般过程 // // YYViewController.h // UITableView Controller // // ...
- Swift学习
Swift 中文教程(一)基础数据类型 基础类型 虽然Swift是一个为开发iOS和OS X app设计的全新编程语言,但是Swift的很多特性还是跟和Objective-C相似. Swift也提供了 ...
- Rhel6-DM多路经存储配置文档
系统环境: rhel6 x86_64 iptables and selinux disabled 主机: 主机 网卡 软件 server21.example.com eth0:192.168.122. ...
- 制造业如何基于BPM做供应链管理?
公司介绍深圳市吉祥腾达科技有限公司是中国网络产业的开航者,是中国无线网络领域的首批开拓者之一.历经10年的开拓创新,已经形成了拥有自主研发的全面产品线. 为了使公司物流.资金流和信息流实现优化整合,腾 ...
- Linux(Ubuntu) 和 Python 常用命令
Linux: pwd: check current directory touch f1 f2 f3: create three empty files tree dir/: show the lev ...
- UNIX 和 LINUX
UNIX操作系统(尤尼斯),是一个强大的多用户.多任务操作系统,支持多种处理器架构,按照操作系统的分类,属于分时操作系统,最早由KenThompson.DennisRitchie和DouglasMcI ...
- Oracle日期时间
今天上班一个问题:sql获取最近三天内上传文档在页面显示标记new,超过三天则不显示标记,并且在标题标明new数量. 完成思路:sql上加一字段查询出三天内为1,其他为非1;在angularJs的se ...
- 如何在Kali Linux中搭建钓鱼热点
文中提及的部分技术可能带有一定攻击性,仅供安全学习和教学用途,禁止非法使用! 0×00 实验环境 操作系统:Kali 1.0 (VM) FackAP: easy-creds 硬件:NETGEAR wg ...