Zookeeper—分布式服务协调利器

1.ZooKeeper的产生

ZooKeeper是一种分布式协调服务。在分布式环境中协调和管理服务是一个复杂的过程。

分布式应用的优点

  • 可靠性 – 单个或几个系统的故障不会使整个系统出现故障。
  • 可扩展性 – 可以在需要时增加性能,通过添加更多机器,在应用程序配置中进行微小的更改,而不会有停机时间。
  • 透明性 – 隐藏系统的复杂性,并将其显示为单个实体/应用程序。

分布式应用的挑战

  • 竞争条件 – 两个或多个机器尝试执行特定任务,实际上只需在任意给定时间由单个机器完成。例如,共享资源只能在任意给定时间由单个机器修改。
  • 死锁 – 两个或多个操作等待彼此无限期完成。
  • 不一致 – 数据的一致性。

分布式应用程序提供了很多好处,但它们也抛出了一些复杂和难以解决的挑战。ZooKeeper通过其简单的架构和API解决了这个问题。ZooKeeper允许开发人员专注于核心应用程序逻辑,而不必担心应用程序的分布式特性。

ZooKeeper的好处

1.分布式协调过程操作简单上手快
2.同步 – 服务器进程之间的相互排斥和协作。
3.有序的消息
4.序列化 – 根据特定规则对数据进行编码。确保应用程序运行一致。这种方法可以在MapReduce中用来协调队列以执行运行的线程。
5.可靠性 -通过集群来保证可靠性
6.原子性 – 数据转移完全成功或完全失败,但没有事务是部分的。

2.ZooKeeper的基本架构

看看下面的图表。它描述了ZooKeeper的“客户端-服务器架构”。

《Zookeeper—分布式服务协调利器》 49a262f02991463c5c91ac2d46ceb2b3.png

Client(客户端)
客户端,我们的分布式应用集群中的一个节点,从服务器访问信息。对于特定的时间间隔,每个客户端向服务器发送消息以使服务器知道客户端是活跃的。
Server(服务器)
服务器,我们的ZooKeeper总体中的一个节点,为客户端提供所有的服务。向客户端发送确认码以告知服务器是活跃的。
ZooKeeper Service服务器组
形成服务器组。所需的最小节点数为3。
Leader
服务器主节点,负责客户端的write类型的请求。Leader在服务启动时被选举。
Follower
负责客户端的read类型请求,并可以参与Leader的选举

ZooKeeper的核心znode

一个znode对应着一个客户端,每个客户端都可以在ZooKeeper文件系统中进行增删改查的文件操作,创建属于自己的znode文件节点,下图描述了用于内存表示的ZooKeeper文件系统的树结构。

《Zookeeper—分布式服务协调利器》 201612291345162031.jpg

ZooKeeper数据模型中的每个znode都维护着一个 stat 结构。一个stat仅提供一个znode的元数据。它由版本号,操作控制列表(ACL),时间戳和数据长度组成。

Znode的类型

Znode被分为持久(persistent)节点,顺序(sequential)节点和临时(ephemeral)节点。

  • 持久节点 – 即使在创建该特定znode的客户端断开连接后,持久节点仍然存在。默认情况下,所有znode都是持久的。
  • 临时节点 – 客户端活跃时,临时节点就是有效的。当客户端与ZooKeeper集合断开连接时,临时节点会自动删除。因此,只有临时节点不允许有子节点。如果临时节点被删除,则下一个合适的节点将填充其位置。临时节点在leader选举中起着重要作用。
  • 顺序节点 – 顺序节点可以是持久的或临时的。当一个新的znode被创建为一个顺序节点时,ZooKeeper通过将10位的序列号附加到原始名称来设置znode的路径。例如,如果将具有路径 /myapp 的znode创建为顺序节点,则ZooKeeper会将路径更改为 /myapp0000000001 ,并将下一个序列号设置为0000000002。如果两个顺序节点是同时创建的,那么ZooKeeper不会对每个znode使用相同的数字。顺序节点在锁定和同步中起重要作用。

每个znode互相之间可以通过和ZooKeeper连接session来watch其他znode或者整个文件系统,来达到分布式环境下的消息联通。其中两个重要概念就是session和watch
Sessions(会话)

会话对于ZooKeeper的操作非常重要。一旦客户端连接到服务器,将建立会话并向客户端分配会话ID 。
客户端以特定的时间间隔发送心跳以保持会话有效。如果ZooKeeper集合在超过服务器开启时指定的期间(会话超时)都没有从客户端接收到心跳,则它会判定客户端死机。
会话超时通常以毫秒为单位。当会话由于任何原因结束时,在该会话期间创建的临时节点也会被删除。

Watches(监视)

监视是一种简单的机制,使客户端收到关于ZooKeeper集合中的更改的通知。客户端可以在读取特定znode时设置Watches。Watches会向注册的客户端发送任何znode(客户端注册表)更改的通知。
Znode更改是与znode相关的数据的修改或znode的子项中的更改。只触发一次watches。如果客户端想要再次通知,则必须通过另一个读取操作来完成。当连接会话过期时,客户端将与服务器断开连接,相关的watches也将被删除。

Znode leader选举

让我们分析如何在ZooKeeper集合中选举leader节点。考虑一个集群中有N个节点。leader选举的过程如下:

  • 1.所有节点创建具有相同路径 /app/leader_election/guid_ 的顺序、临时节点。ZooKeeper集合将附加10位序列号到路径,创建的znode将是 /app/leader_election/guid_0000000001,/app/leader_election/guid_0000000002等。
  • 2.对于给定的实例,在znode中创建最小数字的节点成为leader,而所有其他节点是follower。
  • 3.每个follower节点监视下一个具有最小数字的znode。例如,创建znode/app/leader_election/guid_0000000008的节点将监视znode/app/leader_election/guid_0000000007,创建znode/app/leader_election/guid_0000000007的节点将监视znode/app/leader_election/guid_0000000006。
  • 4.如果leader关闭,则其相应的znode/app/leader_electionN会被删除。
    下一个在线follower节点将通过监视器获得关于leader移除的通知。
    下一个在线follower节点将检查是否存在其他具有最小数字的znode。如果没有,那么它将承担leader的角色。否则,它找到的创建具有最小数字的znode的节点将作为leader。
  • 5.类似地,所有其他follower节点选举创建具有最小数字的znode的节点作为leader。
    leader选举是一个复杂的过程,但ZooKeeper服务使它非常简单。

ZooKeeper提供的功能

Apache ZooKeeper是由集群(节点组)使用的一种服务,用于在自身之间协调,并通过稳健的同步技术维护共享数据。ZooKeeper本身是一个分布式应用程序,为写入分布式应用程序提供服务。
ZooKeeper提供的常见服务如下 :

命名服务 – 按名称标识集群中的节点。它类似于DNS,但仅对于节点。
配置管理 – 加入节点的最近的和最新的系统配置信息。
集群管理 – 实时地在集群和节点状态中加入/离开节点。
选举算法 – 选举一个节点作为协调目的的leader。
锁定和同步服务 – 在修改数据的同时锁定数据。

命名服务通过ZooKeeper默认的文件系统得到解决
配置管理和集群管理通过znode的数据存储得到解决
选举算法和锁服务通过ZooKeeper的顺序节点的不重名得到解决

    原文作者:激情的狼王
    原文地址: https://www.jianshu.com/p/f7c347831786
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞