Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否有可能复制jvm,以便在主jvm宕机的情况下可以简单地从主jvm切换到辅助jvm_Java_Jvm_Replication_Failover - Fatal编程技术网

Java 是否有可能复制jvm,以便在主jvm宕机的情况下可以简单地从主jvm切换到辅助jvm

Java 是否有可能复制jvm,以便在主jvm宕机的情况下可以简单地从主jvm切换到辅助jvm,java,jvm,replication,failover,Java,Jvm,Replication,Failover,是否可以复制一个完整的JVM,并且在故障转移的情况下只需将负载翻转到复制的JVM 如果是,那么我们怎么做呢?这不是在JVM级别完成的事情,但是有许多产品在处理消息时处理这一点。通常这是企业服务总线的一个特性。如果你的应用程序是一个web应用程序,请阅读有关“集群”和“负载平衡”的内容。大多数应用服务器都支持集群 您还可以查看JGroups,它提供了JVM间的通信 理论上是的,但主要问题是您的应用程序会慢得多(比如100到1000倍),而这正是大多数人不愿意进行完全复制的原因 相反,您需要生成重要

是否可以复制一个完整的JVM,并且在故障转移的情况下只需将负载翻转到复制的JVM


如果是,那么我们怎么做呢?

这不是在JVM级别完成的事情,但是有许多产品在处理消息时处理这一点。通常这是企业服务总线的一个特性。如果你的应用程序是一个web应用程序,请阅读有关“集群”和“负载平衡”的内容。大多数应用服务器都支持集群


您还可以查看JGroups,它提供了JVM间的通信

理论上是的,但主要问题是您的应用程序会慢得多(比如100到1000倍),而这正是大多数人不愿意进行完全复制的原因

相反,您需要生成重要信息片段的数据流,例如所有输入或输出消息(或两者),并将其发送到第二台计算机,并根据现有数据重新构建状态


顺便说一句:当您与服务器失去TCP连接时,必须关闭并重新连接。这些都不是透明的故障转移。UDP通过没有连接来避免此问题,但更难可靠地使用。解决这个问题的一种方法是使用一个简单的代理/负载平衡服务器,它位于客户机和服务器之间。因为它很简单,所以失败的可能性较小,并且它隐藏了与服务器的重新连接。但是如果数据中心出现故障,它也会消失。

JVM的故障切换听起来太复杂了:),但希望其他人知道。感谢您的回复。是的,实际上我们使用jetty作为应用服务器,使用jgroup进行集群。我们还使用infinispan进行缓存。但是,将所有数据结构更改为使用infinispan将花费更多的时间,因此,我认为如果能够像开始时那样复制整个jvm,负载将不会那么高。我将尝试探索jgroups来解决这个问题。@Ranger CPU可以以6 GB/s或60 GB/s以上的速度更新内存。如果您尝试在1 GB/s甚至10 GB/s的链接上复制,您可能会发现您总是落后,或者您的服务器速度急剧降低,因此第二个站点永远不会落后太多。同时,回滚不完整的更新也是非常复杂的。@Peter是的,当然,性能会下降,但在接下来的2-3个月内,我们可以忍受性能下降,并投入更多的机器。是的,事务管理是一项非常艰巨的工作,在缓存的情况下需要花费大量的时间。因此,主要目标是缩短故障切换的开发时间。任何建议:)将所有输入从主站点复制到辅助站点。如果您以相同的方式对这些输入进行排序,则辅助站点应与主站点处于相同的状态(站点之间的延迟除外),群集和负载平衡是一样的?感谢您的快速响应。我使用jgroups进行消息传递,使用infinispan进行缓存,但是将所有数据结构更改为使用infinispan需要花费很多时间,这就是为什么我开始计划使用整个JVM复制的原因。出于好奇,我们可以用硬件复制整个机器吗?看看虚拟机可以复制整个机器。有很多技术可以做到这一点。尽管您还需要ESB或其他技术的支持,以使消息流到正确的位置(在JavaLand中)。我认为Gigaspaces是一家商业公司,拥有一些可能在这里有用的技术。是的,这正是我们现在正在做的。在缓存场中具有最少的提交次数,并在发生故障转移时从缓存中读取。