zookeeper

zookeeper:

一个分布式系统的协调者。=文件系统+监听通知机制
ZooKeeper是一种为分布式应用所设计的高可用、高性能且一致的开源协调服务,它提供了一项基本服务:分布式锁服务。由于ZooKeeper的开源特性,后来我们的开发者在分布式锁的基础上,摸索了出了其他的使用方法:配置维护、组服务、分布式消息队列分布式通知/协调等。

功能:

统一命名服务、状态同步服务、配置维护、集群管理。(都是基于分布式锁)
(因为分布式系统,对于某些服务器地址的管理,比如:mysql,dubbo的地址。如果机器的地址要变动呢?数量一多,那不就得一个个去改吗?很麻烦。此时只要将他们交给zookeeper管理,我们只要拿到zookeeper地址,就可以管理这些所有地址。)

原理:在目录下创建这些文件,然后存入这些节点。监听这些节点的变化,然后通知给客户端。

首先它设计一种新的数据结构——Znode,然后在该数据结构的基础上定义了一些原语,也就是一些关于该数据结构的一些操作。有了这些数据结构和原语还不够,因为我们的ZooKeeper是工作在一个分布式的环境下,我们的服务是通过消息以网络的形式发送给我们的分布式应用程序,所以还需要一个通知机制——Watcher机制。那么总结一下,ZooKeeper所提供的服务主要是通过:数据结构+原语+watcher机制,三个部分来实现的。

有四种类型的znode:

  • PERSISTENT-持久化目录节点

    客户端与zookeeper断开连接后,该节点依旧存在

  • PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点

    客户端与zookeeper断开连接后,该节点依旧存在,所谓顺序节点,就是在创建节点时,Zookeeper根据创建的时间顺序给该节点名称进行编号。

  • EPHEMERAL-临时目录节点

    客户端与zookeeper断开连接后,该节点被删除

  • EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点(解决分布式锁(在分布式情况下,线程不在同一个机器上,锁失效了)的问题:保证来的第一个拿到锁,导致后面的节点不断监听前面的节点,形成一条链。当然redis也可以解决分布式Setnx()方法保证独占)

    在创建节点时,Zookeeper根据创建的时间顺序给该节点名称进行编号;当创建节点的客户端与zookeeper断开连接后,临时节点会被删除。

Simple API

One of the design goals of ZooKeeper is providing a very simple programming interface. As a result, it supports only these operations:

  • create : creates a node at a location in the tree
  • delete : deletes a node
  • exists : tests if a node exists at a location
  • get data : reads the data from a node
  • set data : writes data to a node
  • get children : retrieves a list of children of a node
  • sync : waits for data to be propagated
    微信公众号也会更新哦!!
posted @ 2020-09-19 21:16  badribbit123  阅读(98)  评论(0编辑  收藏  举报