Java 两台机器之间的JVM堆复制

Java 两台机器之间的JVM堆复制,java,jvm,heap,replication,Java,Jvm,Heap,Replication,在运行同一Java应用程序的同一网络中连接的两台可分离计算机如何通过在彼此之间同步堆来保持相同状态的基本原理是什么 我相信它可以完成这项任务,但我不知道一些伪代码将如何描述它的核心功能 我只是想了解这项技术 如果您让Terracotta看到分布式共享对象,它确实可以处理这个问题 这听起来很酷,但我更喜欢像EHcache(可以再次得到Terracotta的支持),它的功能更高一点。解决这个问题的一种新兴技术是分布式软件事务内存。您可以获得强大的数据一致性保证(即1拷贝可串行化)和强大的并发控制机制

在运行同一Java应用程序的同一网络中连接的两台可分离计算机如何通过在彼此之间同步堆来保持相同状态的基本原理是什么

我相信它可以完成这项任务,但我不知道一些伪代码将如何描述它的核心功能


我只是想了解这项技术

如果您让Terracotta看到分布式共享对象,它确实可以处理这个问题


这听起来很酷,但我更喜欢像EHcache(可以再次得到Terracotta的支持),它的功能更高一点。

解决这个问题的一种新兴技术是分布式软件事务内存。您可以获得强大的数据一致性保证(即1拷贝可串行化)和强大的并发控制机制:事务


顺便说一句,目前还没有成熟的解决方案,但很有希望。

Terracotta DSO通过操纵类(以及JDK类等)的字节码来工作。如何以及何时执行此操作的说明是Terracotta配置文件的一部分

字节码修改查找某些字节码,如字段读取或写入或监视器输入或退出。每当这些指令出现时,就会在分布式存储中执行适当操作的位置周围添加代码。例如,当由于同步而获得监视器时,也会获得分布式锁(它是读锁还是写锁取决于配置)。如果写入共享对象中的字段,分布式系统必须验证是否持有写锁,然后将数据值发送到群集服务器,群集服务器将数据值存储在磁盘上或通过网络进行共享(视情况而定)

请注意,Terracotta并不共享整个堆,只共享由配置指示的对象图。通常,共享整个堆没有什么意义。相反,应用程序最好描述整个分布式应用程序所需的域对象


为了使上述操作更高效,有许多优化措施:只有字段增量通过网络发送,并且以比Java序列化更高效的形式发送,许多增量可以捆绑并成批发送,锁实际上“签出”到特定的客户端,因此,如果应用程序数据跨客户端进行分区,大多数分布式锁实际上是一个本地操作,不涉及网络调用等。

我建议您调查一下,看看它是否能满足您的需要。

抱歉,看起来我错了。我删除了我的答案。我不知道。我们使用陶土,但不使用DSO。仅使用分布式缓存可以让您更多地考虑分布式体系结构—分发什么和不分发什么。这并不总是好的,但我个人更喜欢。Ehcache和Terracotta协调是DSO技术的一种更有限的使用。在DSO中,字节码操作意味着不序列化对象,并且保留图形中的对象标识。Terracotta上的Ehcache确实使用Java序列化,因此对象标识不会保留。这是一个折衷的问题-性能降低了一点,但部署要简单得多(没有字节码操作)。在Strange Loop 2011上将有一个关于分布式STM的演讲:我目前正在从事CloudTM项目;)该文本描述中的大量内容涉及IST/INESC-ID(www.IST.eu/www.INESC-ID.pt)开发的技术。很高兴看到DSTM的广泛应用。