ZooKeeper概述
================================================================================================
1. 分布式环境下数据一致的基本问题
- 分布式环境下,为了保证数据的可靠或分布式的处理,数据往往具有多个副本,而当数据发生变化时,如何保证数据一致就成了问题.这是分布式环境下数据分布式存储和处理的最基本的问题之一.
2. Zookeeper概述
- Zookeeper能够在分布式环境下实现数据的一致.
- 利用这样的特性,Zookeeper可以实现集群环境中的分布式协调服务。
- 所谓的分布式协调服务,本质上就是在集群的节点中进行可靠的消息传递,来协调集群的工作。
- 这样的分布式协调服务,包括:
- 数据发布订阅、负载均衡、命名服务、分布式协调/通知、集群管理、分布式锁、分布式队列等功能
- zookeeper基于优良的设计,成为了分布式环境下最重要的分布式协调工具之一.
3. Zookeeper特点
- a. 顺序一致性 - 按照顺序发生
- 从同一个客户端发起的事务请求,最终将会严格按照其发起顺序被应用到zookeeper中
- b. 原子性 - 要变都变 要不变都不变
- 所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的,即,要么整个集群中所有机器都成功应用了某一事务,要么都没有应用,一定不会出现集群中部分服务器接收了事物,而另一部分服务器拒绝事务的情况。
- c. 单一视图 - 找谁都一样
- 无论客户端连接的是哪个zookeeper服务器,其看到的服务端数据模型都是一致的。
- d. 可靠性 - 说话算数
- 一旦服务端成功的应用了一个事务,并完成对客户端的响应, 那么该事务所引起的服务端状态变更将会一直保留下来,除非有另一个事务又对其进行了改变。
- e. 实时性 - 说成了就是成了,绝对成了,但仍可能需要点时间 - 伪实时zookeeper并不能做到真正的实时性,当zk告知客户端操作成功 时,可以确信数据最终必然一致,但是zk集群仍需要一定的时间同步数据来达成最终一致的效果,所以其实Zookeeper只能保证数 据的顺序一致和最终一致,做不到实时的一致,只有伪实时的特性.
================================================================================================
起到的作用(解决的问题)
- 集群的管理问题,能够通过一定机制来检测到集群中节点的变化状态,是正常工作还是宕机,比如通过RPC心跳机制
- 集群的统一的排至文件管理
- 实现主备切换,避免单点问题
- 统一的命名服务,即确保每台服务器的名字唯一
- 分布式锁
- ZooKeeper集群的选举问题
- ZooKeeper集群的分布式数据一致性问题
================================================================================================
ZooKeeper原理
1.不能是一台机器
- zookeeper为了保证可靠性,不能用一台机器,而应该是一个集群
2.多台机器必须有一个机器充当leader
- 为了保证zookeeper集群数据能够一致,必须有一个拍板说了算的人,这就是leader,其他的是follower。
- 某一时刻集群里只能有且仅有一个leader。
- leader可以执行增删改和查询操作,而follower只能进行查询操作。所有的更新操作都会被转交给leader来处理,leader批准的任务, 再发送给follower去执行来保证和leader的一致性。
- 由于网络是不稳定的,为了保证执行顺序的