zookeeper浅出深入1
来源:互联网 发布:淘淘商城 源码 编辑:程序博客网 时间:2024/06/03 21:47
什么是zookeeper
zookeeper是一个分布式协调系统,这里有两个关键字:分布式,协同.什么是分布式?所谓分布式就是同一件事情”一个人”干不完,需要”多个人”一起干.既然需要一起干活,那么”每个人”不能乱干,即需要有人去协调他们需干的活,这就是协同.那么既然有分布式协调系统,又没有非分布式协调系统呢?当然有,其中一个就是多线程,只不过多线程的协调是通过内存做的,多个服务器之间只能通过网络通信,因此有zookeeper的出现,通过网络控制各个干活的人.我们知道多线程中很多的协调是通过“锁”来做的,因此zookeeper中肯定有分布式锁的功能,实际上,zk除了分布式锁还有其他很多功能。
zookeeper的功能
zookeeper的提供的功能有:
* 数据发布订阅
* 负载均衡
* 命名服务
* 分布式协调/通知
* 集群管理
* Master选举
* 分布式锁
* 分布式队列
这些功能是如何实现的这里先不说,等弄清zookeeper的体系结构再来看.
zookeeper的体系结构
zk的体系架构图如下:
zk服务由若干服务器组成,每台服务器内存中维护相同的类似于文件系统的树形数据结构,其中的一台通过ZAB原子广播协议选举作为主控服务器,其他的作为从属服务器.这里要注意:zk服务中每台服务存有整个集群的所有数据,存在内存中,也会刷到磁盘上.如果从存储的角度来看这与HDFS等分布式存储是不一样,HDFS服务的每台服务器只存一部分分片数据,且不会一直存到内存中,那么为什么有这样的区别呢?这是由zk的功能来决定的,在分布式存储系统中,存储的数据可以分为业务数据(用户所传的数据)与集群内部管理数据,前者数据量较大,而重要性较后者低.后者数据量非常小,以至于单台服务器内存能放下所有数据(不分片)因此zk将这部分重要数据放到内存中以供客服端大量调用.
学习一个框架原理最重要的一点就是弄清其主要流程,而对于分布式系统来说,保证数据一致性是非常重要的功能,那么zk是如何保证其数据一致性的呢?
* zk服务的每台机器都可以响应客服端的读操作
* 只有zk的主控服务器才可以响应客户端的更新操作(写,更新,删除)
* 客户端可以连接zk任意一台服务器,如果是更新操作需转发到主控服务器来处理.
以上就是zk数据读写的主要流程,这样做的好处就是数据更新只有一个入口,不会产生数据冲突.如果有多个更新的入口会发生什么事情呢?比如像我们使用git等版本控制工具,多个人更新同一段代码,发生冲突就只有人工介入了,因此为了简化更新的操作,单入口更新.当然这样做的坏处就是更新操作可能慢些吧.
- zookeeper浅出深入1
- zookeeper深入学习(1)
- 唯有深入,可以浅出
- 浅出 RPC - 深入篇
- zookeeper 深入
- 浅出深入统计学(一)
- 浅出深入统计学(二)
- 深入理解zookeeper基本原理
- 深入剖析zookeeper原理
- 深入淺出xhtml
- ViewGroup深入简出
- 深入简出mysql
- RXjava 深入简出
- ZooKeeper学习总结 -ZooKeeper深入探讨
- Binder 浅出深入 -- 你真的会用 binder?
- zookeeper原理(深入学习)
- 深入解读zookeeper一致性原理
- 深入简出的ngin
- spring mvc 在Web.xml中自动扫描Spring的配置文件及resource时classpath*:与classpath:的区别
- hdu5761Rower Bo(计算几何)
- 如何下载卫星影像和等高线叠加
- 排序-插入排序
- IntelliJ IDEA 2016.2 配置Tomcat 运行Web项目
- zookeeper浅出深入1
- 开源协议介绍-序章
- Java并发编程:Callable、Future和FutureTask
- HDOJ 5615 Jam's math problem (数学题枚举)
- 支付相关
- HDU 1074 Doing Homework (状压+DP) 初学dp笔记
- 顺序表应用5:有序顺序表归并
- Android设备的唯一标识
- 如何衡量产品的用户体验?