在运行相同Java应用程序的同一网络中连接的两台可分离计算机如何通过在彼此之间同步堆来维持相同状态的基本原理是什么?
我相信Terracotta执行此任务但我不知道某些伪代码会如何描述其核心功能。
我只是在寻找对这项技术的理解。
答案 0 :(得分:11)
Terracotta DSO通过操纵类的字节代码(以及JDK的类等)来工作。有关如何以及何时执行此操作的说明是Terracotta配置文件的一部分。
字节码修改查找某些字节代码,例如字段读取或写入或监视器进入或退出。每当出现这些指令时,都会在分布式存储中执行相应操作的位置周围添加代码。例如,当由于同步而获得监视器时,也获得分布式锁定(无论是读取还是写入锁定取决于配置)。如果写入共享对象中的字段,则分布式系统必须验证是否正在保持写锁定,然后将数据值发送到群集服务器,群集服务器将其存储在磁盘上或根据需要通过网络共享。 / p>
请注意,Terracotta不会共享整个堆,只会共享配置所指示的对象图。通常,共享整个堆没什么意义。最好是应用程序描述分布式应用程序所需的域对象。
采用了许多优化来使操作高效:只有字段增量通过线路发送,并且形式比Java序列化高得多,许多增量可以捆绑并批量发送,锁定实际上是“检出” “对于特定客户端,以便如果应用程序数据跨客户端进行分区,则大多数分布式锁定实际上是不涉及网络调用的本地操作等。
答案 1 :(得分:6)
如果您告诉它,Terracotta确实可以处理它 - 请参阅description of its DSO - 分布式共享对象。
这听起来很酷但是我更喜欢像EHcache这样的东西(可以再次由Terracotta支持),其功能更高一些。
答案 2 :(得分:3)
以某种方式解决此问题的一种新兴技术是分布式软件事务内存。您将获得强大的数据一致性保证(即1-copy serializability)和强大的并发控制机制:Transactions。
AFAIK,那里没有成熟的解决方案,但很有希望。
答案 3 :(得分:1)
我建议您调查http://www.jboss.org/infinispan,看看它是否能满足您的需求。