Zookeeper检查外部资源可用性

时间:2016-03-18 07:09:47

标签: java apache-zookeeper

我在Tomcat服务器集群上部署了Spring应用程序,其中Oracle数据库和JMS服务器(Tibco EMS)作为外部资源。

我有一个非功能性的要求来检查DB和JMS服务器是否可用,并在它们关闭时通知tomcat集群。 (心跳管理)

Zookeeper是否适合此要求?我可以为这些资源创建短暂的znode,当它们不可用/ diconnected时,这些节点将从zookeeper中删除。然后,那些znode上的任何观察者都可以获知这些外部资源的不可用性。

这个用例通常是使用zookeeper处理的吗?如果是,谁将在zookeeper中为DB和JMS服务器创建这些znode?

zookeeper或Apache curator中是否有处理外部资源状态要求的配方?

如果Zookeeper不适合管理外部资源状态,那么通常如何管理此类外部资源的心跳需求?

1 个答案:

答案 0 :(得分:2)

是的,在ZooKeeper的帮助下,这可能是一个很好的案例。您的应用程序确实会观察具有临时节点的ZK数据树的一部分,并且如果它们中的任何一个没有/那么就能够做出反应。

您将遇到的问题是您的外部资源(例如您提到的DB和JMS服务器)必须首先将其临时节点发布到ZK。如果它们是第三方应用程序,您无法轻松扩展以添加必要的ZK代码,这很难。 ZK不会开箱即用。

在这种情况下,常见的配方是创建在与外部服务相同的主机上运行的代理/管理程序应用程序,它监视目标进程并执行ZK通信部分(发布临时节点并保持ZK连接处于活动状态,包括心跳是ZK协议的一部分。)

我建议使用Curator,可能还有一些策展人服务发现配方。但是,您很可能没有开箱即用的所需功能,并且至少需要编写一些代码来监视/监督您的数据库服务器并执行所需的ZK行为。