我正在编写一个小型代理应用程序,它应该是冗余的,例如,主代理将在一个服务器上运行,而冗余代理将在另一个服务器上运行。是否有一个简单的高可用性框架可以用来实现这种冗余性?例如,这个HA框架将在实例之间发送ping,并在第一个实例崩溃时在另一个实例上引发某种异常或通知。
我正在编写一个小型代理应用程序,它应该是冗余的,例如,主代理将在一个服务器上运行,而冗余代理将在另一个服务器上运行。是否有一个简单的高可用性框架可以用来实现这种冗余性?例如,这个HA框架将在实例之间发送ping,并在第一个实例崩溃时在另一个实例上引发某种异常或通知。
您没有提供有关应用程序工作的详细信息,因此根据其状态性、是否可以容忍轻微数据丢失、是否时间紧迫、您是更注重开发人员时间还是机器时间,您可以拥有不同的解决方案。
上面有一些好的建议,我想补充一下:看看JMS和持久化消息。通常这些使恢复变得非常简单,但代价是延迟(除非您购买商业产品并学会使用或支付供应商来调整您的应用程序)。使用JMS队列,您可以实现主动-主动处理,并避免故障检测的麻烦。
另一个要考虑的方向是分布式状态管理/集群框架,例如Gigaspaces、Coherence、Gemstone、Infinispan、Gridgain和Teracotta。这些可以复制您的数据并保证各种服务质量级别。它们中的大多数都带有某种类型的故障检测和分布式管理机制。
如果您想要无需麻烦地实现高可用性,只需使用一些具有HA功能的负载均衡器,例如Ultramonkey、LVS和keepalived等。
在HA配置中,通常需要使用虚拟IP,因此即使您将ping/notify功能作为框架使用,仍然需要进行一些操作(一旦另一个实例失败,开始响应对虚拟IP的请求)。因此,除非您正在寻找学习机会,否则我建议使用中间件而不是使用框架自己编写代码。
这些中间件可以配置多种健康检查。例如,简单的健康检查可能会定期向您的应用程序发送GET请求,并查找响应中的特定字符串(例如“XXX running.”),以确保您的应用程序正常运行。