两台机器之间的JVM堆复制

Mat*_* B. 30 java heap replication jvm

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

我相信Terracotta完成了这项任务,但我不知道一些伪代码会如何描述其核心功能.

我只是在寻找对这项技术的理解.

Ale*_*ler 11

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

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

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

有许多优化用于使操作高效:只有字段增量通过线路发送,并且形式比Java序列化更有效,许多增量可以捆绑并批量发送,锁实际上"检出"到一个特定客户端,以便如果应用程序数据跨客户端分区,则大多数分布式锁实际上是不涉及网络调用等的本地操作.


Boz*_*zho 6

如果您告诉它,Terracotta确实可以处理它 - 请参阅其DSO - 分布式共享对象的说明.

这听起来很酷但我更喜欢像EHcache这样的东西(可以再次由Terracotta支持),其功能更高一些.