一. Zookeeper:
Zookeeper 是一个高性能,分布式,开源分布式协调应用服务。他提供了简单的原始功能,如:同步,配置管理,集群管理,命名空间等。服务器基于Java语言开发,基于TCP协议进行通信,有Java客户端。
基本概念:
1. 集群角色:
- Leader: 为服务提供读和写(集群的主节点)
- Follower: 提供读服务,所有的写服务都要交给Leader角色,参与选举
- Observer: 提供读服务,不参与选举,一般是为了增强ZK的读并发能力
2. 会话(Session)
- ZK的服务端和ZK的服务器之间的连接(实质就是TCP连接)
- 通过心跳检测客户端的存活
- 接受来自服务器的watch事件通知
- 可以设置超时时间
3. 数据节点(Znode)
- 不是机器的意思
- ZK树形结构中的节点,用于存储数据
- 持久节点
- 临时节点
二. 分布式:
A distributed sysytem consists of multiple computers that communicate through a network and interact with each other with a common goal.
- 多台计算机构成
- 计算机之间通过网络相互通信
- 彼此进行交互
- 完成共同的目标
三. 分布式系统协调问题:(类似交通管理)
- 协调: 多个节点完成同一个动作(An act multiple nodes perform together)
- 举例:
- 集群成员的管理(Group membership)
- 锁(locking)
- 选举(Leader Election)
- 同步(Synchroniztion)
- 订阅发布(Publisher/Subscriber)
四. ZK数据模型:
- 分层结构
- 树形结构中的每个节点叫做Znode
- 每个Znode都有数据,也可以有子节点
- 节点路径,斜线分割,没有相对路径
- 通过数据结构的stat来存贮数据的变化,ACL的变化和时间戳
- 数据发生变化时,版本会递增
- 可以对ZK中的数据进行读写操作
五. ZK典型应用场景介绍
- 数据的发布和订阅,数据配置中心到ZK(和ActiveMQ功能类似)
- 负载均衡(nginx),其本质利用ZK的配置管理功能, 步骤:
- 服务提供者把自己的域名及IP的端口映射注册到ZK中
- 服务的消费者通过通过域名从ZK中获取相应的IP及端口
- 当服务提供者宕机时,对应的IP域名映射就会少一个
- Dubbo框架就是使用ZK作为注册中心,实现路由和负载
在分布式系统里,我们会把一个服务应用分别部署到n台服务器上,这些服务器的配置文件是 相同的,如果配置文件的配置选项发生变化,那 么我们就得一个个去改这些配置文件,如果我们需要改的服务器比较少,这些操作还不是太麻烦,如果我们分布式的服务器特别多,比如某些大型互联网公司的 hadoop集群有数千台服务器,那么更改配置选项就是一件麻烦而且危险的事情。这时候zookeeper就可以派上用场了,我们可以把 zookeeper当成一个高可用的配置存储器,把这样的事情交给zookeeper进行管理,我们将集群的配置文件拷贝到zookeeper的文件系统 的某个节点上,然后用zookeeper监控所有分布式系统里配置文件的状态,一旦发现有配置文件发生了变化,每台服务器都会收到zookeeper的通 知,让每台服务器同步zookeeper里的配置文件,zookeeper服务也会保证同步操作原子性,确保每个服务器的配置文件都能被正确的更新。
3. 命名服务: 在分布式系统中,命名服务(Naming Service)类似于J2EE中的JNDI的效果: 在分布式环境下,命名服务更多地是资源定位,并不是真正的实体资源,其本质是用到ZK中的配置和查找
4. 分布式协调和通知
- 通过watch和通知实现
- 分布式锁
- 分布式事务
5. 集群管理(Solar. Kafka. dubbo)
- 当前集群中机器的数量
- 集群中机器的运行状态
- 集群中节点的上下线操作
- 集群节点的统一配置
6.分布式锁: 通过ZK实现排它锁和共享锁
7. 分布式队列: FIFO(一般用MQ实现)
学习,总结,沉淀,提高。