找到的東西就是 Terracotta , Terracotta 是一個JVM-level clustering 目前最新的Open source版本是3.5.3, terracotta可以做很多的事, 這邊只做簡單的測試,主要是針對Terracotta 的DSO 功能。
有關DSO的說明跟細節可以參考 About Terracotta DSO Installations
首先要先下載Open Source版本的Terracotta 3.5.3, 可以到官網下載,這邊我下載的是binary 版本,然後將其解壓縮到Linux 機器上, 這邊都用預設的設定, 如果沒有自訂tc-config.xml 的話,預設會用com/tc/config/setup/default-config.xml來啟動Terracotta server, 這邊我只設定單台的tc server , Terracotta 支持Server Array , 可以多個tc server成為group , 當root死掉時會將root 交給其他active 的server , 有興趣可以自己看看官網的文件, The Terracotta Server Array , 下圖是terracotta server啟動的狀況
這樣tc server就算啟動完成, 再來是要寫一個簡單的sample 來測試, 這邊可以先安裝
Terracotta DSO Eclipse Plugin , 然後在Eclipse 裡面直接new 一個DSO project , 如下圖
然後寫一個簡單的Java 程式測試,
package com;
import java.util.Random;
public class DsoTest {
private Integer shareInteger = new Random().nextInt();
public Integer getShareInteger() {
System.out.println("getShareInteger on call !!");
return shareInteger;
}
public void setShareInteger(Integer shareInteger) {
System.out.println("set value!!!");
this.shareInteger = shareInteger;
}
public void print(){
System.out.println("shareInteger = " shareInteger.toString());
}
public static void main(String[] args) {
DsoTest t1 = new DsoTest();
t1.print();
DsoTest t2 = new DsoTest();
t2.print();
}
}
執行後結果如下
這個是我們預期的結果,那如果加上terracotta之後呢?
先打開tc-config.xml做設定
<?xml version="1.0" encoding="UTF-8"?>
<con:tc-config xmlns:con="http://www.terracotta.org/config">
<servers>
<server host="192.168.3.95" name="EMD-test">
<dso-port bind="192.168.3.95">9510</dso-port>
<jmx-port bind="192.168.3.95">9520</jmx-port>
<data>root/terracotta/server-data</data>
<logs>root/terracotta/server-logs</logs>
<statistics>root/terracotta/cluster-statistics</statistics>
</server>
</servers>
<clients>
<logs>terracotta/client-logs</logs>
</clients>
<application>
<dso>
<instrumented-classes>
<include>
<class-expression>com.*..*</class-expression>
</include>
</instrumented-classes>
<roots>
<root>
<field-name>com.DsoTest.shareInteger</field-name>
</root>
</roots>
</dso>
</application>
</con:tc-config>
主要的是root 跟 field-name , 然後再加上instrumented-classes的部份, 這樣設定之後再去跑一次, 直接run as > terracotta dso application
這次看到的結果就是一樣的instance了
這邊只是單純簡單試試DSO的功能,確實是可以達到JVM-Level 的cluster ,也許那天會用上也不一定。
Reference :
Terracotta Cluster : Wiki
Introduction to Terracotta DSO
JVM-level clustering - Terracotta
用Terracotta 去Distribute Objects




