-
什么是zookeeper
- 中间件,提供协调服务。
- 作用于分布式系统,发挥其优势,可以为大数据服务
- 支持java,提供java和c语言的客户端api
-
什么是分布式系统
- 很多台计算机组成一个整体,一个整体一致对外并且处理同一个请求。
- 内部的每台计算机都可以相互通信(rest/rpc)
- 客户端到服务端的一次请求到响应结束历经很多台计算机
- 关于分布式系统,就是一个系统,进行功能的拆分,最后整合成一个庞大的系统。这个庞大的系统对于用户来说不是透明的,对于自己来说,全是透明的。可以根据业务拆分成为不同的子系统。这样的好处的负载会大大的增加,用户的请求会分布到不同的系统里面去,这样负载就会有一个整体的提高。
-
分布式系统的瓶颈以及zk的相关特性
-
分布式系统的瓶颈
- 在发生高并发的时候,例如上海的虹桥火车站。系统的负载肯定会上升,也就是请求量会暴增,跟火车站类似,在某一个时间点,人流量特别多,某个班次的火车的人的容量是固定的,是有控制的,但是目前人这么多,只能按照先来先得,后来后上的道理。这其实就是一个非常典型的分布式锁的案例。整个系统都需要做到同步。才可以做到数据的一致性。
- 在高并发的时候也可以映射为车流量特别的多,车流量多就会导致堵车,那么此时就需要有交警进行协调,哪个路口的车先走。
-
zookeeper的特性
- 一致性:数据一致性,数据按照顺序分批入库
- 原子性:事务要么成功要么失败,不会局部化
- 单一视图:客户端连接集群中的任一zk节点,数据都是一致的。比如说连接到某一个节点的数据是A,等下次断开连接到第二个节点,它的数据其实也会还是A,不会是一种ABA,或者ABB,所有的数据应该都是一致的。所有节点上的数据全是一致的,要么全是A,要么全是B。
- 可靠性:每次对zk的操作状态都会保存在服务端。可以查看每一次都是什么状态,甚至可以根据某一个状态进行回滚
- 实时性:客户端可以读取到zk服务端的最新数据。
-
-
Zookeeper的主要目录
- bin:主要的一些运行命令
- conf:存放配置文件,其中我们需要修改zk.cfg
- contrib:附件的一些功能
- dist-maven:mvn编译后的目录
- docs:文档
- lib:需要依赖的jar包
- recipies:demo案例
- src:源码
-
zoo.cfg配置
- tickTime:用于计算的时间单元。比如session超时:N * tickTime
- initLimit:用于集群,允许从节点连接并同步到mater节点的初始化连接时间,以tickTime的倍数来表示
- syncLimit:用于集群,master主节点与从节点之间发送消息,请求和应答时间长度。(心跳机制)
- dataDir:必须配置。存储zk开发需要的一些数据
- dataLogDir:日志目录,如果不配置会和dataDir共用
- clientPort:连接服务器的端口,默认2181
09-02
09-02
09-02