赞
踩
虽然ZooKeeper通过让客户端直接连接到集合的投票成员来表现得非常好,但这种架构使得很难扩展到大量客户端。问题是,随着我们添加更多投票成员,写入性能下降。这是因为写操作需要(通常)同意整体中至少一半的节点,因此随着更多选民的加入,投票的成本会显着增加。
我们引入了一种名为Observer的新型ZooKeeper节点,它有助于解决这个问题并进一步提高ZooKeeper的可扩展性。观察员是合唱团的非投票成员,只听取投票结果,而不是导致投票结果的协议协议。除了这个简单的区别,Observers的功能与Followers完全相同 - 客户端可以连接到它们并向它们发送读写请求。观察员将这些请求像追随者一样转发给领导者,但他们只是等待听取投票结果。因此,我们可以在不损害选票表现的情况下尽可能多地增加观察员的数量。
观察者还有其他优点。因为他们不投票,所以他们不是ZooKeeper合奏的重要组成部分。因此,它们可能会失败,或者与群集断开连接,而不会损害ZooKeeper服务的可用性。对用户的好处是,观察者可能通过不太可靠的网络链接连接而不是追随者。实际上,Observers可能用于与另一个数据中心的ZooKeeper服务器通信。观察者的客户端将看到快速读取,因为所有读取都在本地提供,并且写入导致最小的网络流量,因为在没有投票协议的情况下所需的消息数量较少。
设置使用Observers的ZooKeeper集合非常简单,只需要对配置文件进行两次更改。首先,在要成为Observer的每个节点的配置文件中,您必须放置以下行:
peerType=observer
该行告诉ZooKeeper服务器是一个Observer。其次,在每个服务器配置文件中,必须将:observer添加到每个Observer的服务器定义行。例如:
server.1:localhost:2181:3181:observer
这告诉每个其他服务器server.1是一个观察者,他们不应该期望它投票。这是将Observer添加到ZooKeeper集群所需的所有配置。现在你可以连接到它,好像它是一个普通的追随者。通过运行来试试吧:
$ bin/zkCli.sh -server localhost:2181
其中localhost:2181是每个配置文件中指定的Observer的主机名和端口号。您应该看到一个命令行提示符,您可以通过该提示符发出ls等命令来查询ZooKeeper服务。
观察者的功能简单,作为整体的非投票成员,与追随者共享学习者界面,只持有略微不同的内部管道。两者都保持与仲裁端口的连接与领导者,通过它可以了解整体上的所有新提议。
默认情况下,Observers沿着仲裁端口连接到仲裁的领导者,这就是他们如何了解整体上的所有新提议。允许Observers连接到Followers作为插入提交流代替连接到Leader的方法是有好处的。它将支持Observers的负担转移到领导者之上,并使其专注于协调写入提交。这意味着当领导者处于高负荷时会有更好的性能,特别是在领导者选举之后可能发生的高网络负载时,许多学习者需要同步。当有大量观察者时,它会减少Leader上保持的总网络连接数。激活追随者以支持观察者可以使观察者的总数达到数百个。另一端,
通过让集合的所有成员知道跟随者将使用哪个端口来监听观察者连接,可以激活此功能。以下条目在添加到服务器配置文件时,将指示Observers连接到端口2191上的对等方(领导者和关注者),并指示Followers创建一个ObserverMaster线程来侦听并在该端口上提供服务。
observerMasterPort=2191
下面列出了观察员的两个示例用例。实际上,无论您希望扩展ZooKeeper集合的客户端数量,还是希望将集合的关键部分与处理客户端请求的负载隔离开来,Observers都是一个很好的架构选择。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。