两台计算机之间的JVM堆复制

wswtfjt7  于 2022-11-23  发布在  其他
关注(0)|答案(4)|浏览(127)

在同一网络中连接的两台运行同一Java应用程序的独立计算机如何通过在彼此之间同步它们的堆来保持相同状态的基本原理是什么?
我相信Terracotta可以完成这个任务,但是我不知道一些伪代码会是什么样子,它会描述它的核心功能。
我只是想了解这项技术。

k5hmc34c

k5hmc34c1#

Terracotta DSO通过操作类的字节码(和JDK的类等)来工作。关于如何以及何时操作的说明是Terracotta配置文件的一部分。
字节码修改会寻找某些字节码,例如字段读取或写入,或监视器进入或退出。每当这些指令出现时,就会在该位置周围新增程式码,以在分散式储存区中执行适当的动作。例如,当因为同步行程而取得监视器时,还获得了分布式锁,(是读锁还是写锁取决于配置)。如果写入共享对象中的字段,分布式系统必须验证写锁正被持有,然后将数据值发送到集群服务器,集群服务器将其存储在磁盘上或在网络上适当地共享它。
注意,Terracotta并不共享整个堆,只共享由配置指示的对象图。通常,共享整个堆没有什么意义。最好由应用程序来描述分布式应用程序所需的域对象。
为了使上述操作高效,采用了许多优化:只有字段增量通过线路并且以比Java串行化有效得多的形式被发送,许多增量可以被捆绑并且成批发送,锁实际上被“检出”到特定客户端,使得如果应用数据被跨客户端划分,则大多数分布式锁实际上是不涉及网络调用的本地操作,等等。

alen0pnh

alen0pnh2#

如果你告诉Terracotta,它确实可以处理这个问题--参见description of its DSO--分布式共享对象。
这听起来很酷,但我更喜欢像EHcache这样的东西(可以再次由兵马俑支持),它的功能更高一点。

cyvaqqii

cyvaqqii3#

分布式软件事务存储器(Distributed Software Transactional Memory)是一种新兴的技术,它可以解决这个问题,并提供强大的数据一致性保证(即1-copy可串行化)和强大的并发控制机制:事务处理。
AFAIK,没有成熟的解决方案,但它是有希望的。

w46czmvw

w46czmvw4#

我建议您调查一下http://www.jboss.org/infinispan,看看它是否能满足您的需求。

相关问题