兵马俑是如何在这种情况下工作的?

mai*_*rgs 9 java failover terracotta high-availability

所以假设我有一个N大小的服务器阵列设置如下:

alt text http://www.terracotta.org/web/download/attachments/43909161/ServerArrayMirrorGroup.png

我有一个简单的JavaBean/POJO:

package example;

public class Person {
  private OtherObject obj;

  public void setObj(OtherObject theObj) {
    synchronized (this) {
      obj = theObj;
    }
  }

  public OtherObject getObj() {
    synchronized (this) {
      return obj;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果其中一个客户端在TC根(数据结构)中的Person对象上调用Person.setObj(OtherObject),则该客户端上的synchronized块(在Person.setObj(OtherObject)中)是否保持:

1)在使用该Person.obj属性同步/更新N大小的服务器阵列中的所有N个服务器之前?

要么

2)直到"活动"服务器与更新的Person.obj属性同步?那么阵列中的其他(N-1)服务器是否尽可能同步?

要么

3)我在看的其他一些方法?

Ale*_*ler 5

答案实际上不是1或2.对象在服务器镜像组中是条带化的.第一次设置此字段时,将创建一个事务,并为该第一个事务选择的镜像组将在此之后"拥有"该对象.

对于1和2,并非所有活动服务器组都需要更新,因此不需要等待这些条件中的任何一个.

您可以在Terracotta文档中找到有关配置Terracotta服务器阵列的更多信息:

从锁定的角度来看,在执行对象修改时,将保留此Person对象上的群集锁(跨群集互斥).synchronized块的范围形成上述事务.在getObj()方法中,您可以将其配置为读锁,这将允许跨群集的多个并发读取器.