韧性和性能 Resilience and Performance

ZooKeeper应用应该被定位用于减少机器和网络对系统的影响。在实践中这意味着我将隔离机架、电源供应和路由,使得我们不会因为他们的故障而导致失去我们的大多数服务器。

低延迟服务应用的重点是要求所有的服务器都在一个数据中心里。然而一些不要求低延迟应答的场景,为了获得额外的韧性,将服务器部署在不同的数据中心(至少每两台在一个数据中心)。本节中的例子是一个leader选举算法和一个分布式锁算法,两者都不具有频繁的状态改变的特征,几十毫秒的开销对于系统并不会造成重要的影响。

注意
ZooKeeper的概念中有一类不参加leader选举投票的follower。由于在众多的读请求过程中,这种观察者节点并不参加投票,所以可以提高ZooKeeper集群的读取性能,而不去伤害到写入性能。观察者节点可以部署在跨数据中心的环境下,而不会像参加投票的follower那样在跨数据中心的环境中会对集群产生潜在的影响。那么我们可以将参加投票的follower部署在同一个数据中心,而将不参加投票的follower部署在另外一个数据中心。

ZooKeeper是一个高可用的系统,他的重点是能够及时运行它的功能。因此,建议ZooKeeper服务器最好专注于运行ZooKeeper。如果运行了其他的应用程序,可能会降低ZooKeeper的性能。

配置保证ZooKeeper的事务日志在与他的快照不同的硬盘上。默认情况下,都在dataDir指定的目录下,我们可以通过额外设置dataLogDir来指定日志的目录。日志被指定写到专门的硬盘设备,ZooKeeper就可以对大化写日志的速率。

我们在配置文件夹下的java.env中可以配置JVM参数。