我有一个Java应用程序,我需要它可用性很高。 我在考虑FastMPJ,就像在不同的PC上运行多个实例一样。应用程序每分钟都会检查主实例是否正在运行,如果没有,则另一个将运行而不是它。
我想问一下它是否是一个好的解决方案,或者是否有更好的解决方案。
答案 0 :(得分:3)
更通用的解决方案是使用负载平衡系统,即:您有N个应用程序运行的实例具有相同的权限(如果可能在不同的硬件上),那么前面的冗余负载均衡器选择其中一个那些基于每个请求/任务的实际负载。
这个解决方案的好处显然是,硬件实际上是使用的,并且不会处于空闲状态,等待0.01%的情况下跳入。然后实例实际上一直在测试,并且会报告错误它们发生了(比如有缺陷的硬件),并且你阻止了:“哦......备份甚至没有工作”。最重要的是,您可以自适应地平衡机器之间的负载。
答案 1 :(得分:2)
在我的一个项目实施交换时,我们使用Apache Qpid实现高可用性,我的体验非常令人满意。它也很好地扩展。我一直在运行最多32个节点集群的应用程序。如果您需要任何进一步的信息,请在此处查找更多详细信息并告知我们: http://qpid.apache.org/releases/qpid-0.18/books/AMQP-Messaging-Broker-Java-Book/html/High-Availability.html
希望有所帮助:)
答案 2 :(得分:0)
人们常常忘记从应用程序到数据库也必须具有高可用性。根据我的经验,数据访问层是大多数应用程序瓶颈所在的地方。因此,请确保您具有良好的应用程序感知数据库负载均衡器。 Oracle有一个可靠的解决方案,但仅适用于Oracle数据库。 PostGres有一个开源版本。 Heimdall Data是一个商业解决方案。