發文作者:wekon | 十一月 3, 2008

[筆記] Terracotta – distributed java memory


http://www.terracotta.org/

Terracotta 是個 open source 的系統
讓 Java application 可以容易地進行分散式物件的同步

一般我們要讓物件可以遠端存取時
需要透過 RMI 的方式
這代表著我們必須學習如何使用 RMI
並且,你必須要顧好你的 RMI server
如果他掛掉了,RMI 本身沒有提供 fault tolerance 的機制

Terracotta 提供了一個對於程式撰寫相當容易的方式
做到分散式的物件同步
其示意圖如下

也就是說
在原本的 Application 與下層的 JVM 中間
多加了一層 Terracotta 進行處理
在 runtime 的時候
只要你所指定的 object 有變動
就會發出 transaction, 將此改變套用到所有人使用的 object 之上
稱之為 cluster JVM, 讓分散式的 application 好像在同一個 JVM 上跑一樣

要讓程式可以達到這樣的效果
首先你要安裝 Terracotta 的 library
再來,你要架設 Terracotta 的 server
在此處,server 有分 active 與 passive 兩種
passive 是 active 的備用 server
而 active server 可以多台
Terracotta 會自動幫你分配哪些東西要放在哪些 active server 上
並且如果 active server 都掛掉了,Terracotta 會自動從 passive server 中
選擇備用 server 做 fault tolerance

至於程式撰寫方面
可以說是相當簡單
只要依照 Java 基本的方式撰寫
不需要額外 import package,或是研究要進行哪些呼叫
只需要另外準備一個 XML 檔案
說明你的 class 中哪一些 object 是要經由 Terracotta 來進行同步的即可

最後,要執行時
必須透過包含 Terracotta library 的 batch 檔執行
使用傳統方式執行就不會經過 Terracotta 了

除此之外,
如果你的程式中有用到 syncchronized
你也可以在此 XML 檔案中指定是 write/read 的方式來 lock object

並且,他也支援 tomcat session replication
讓你可以在不同的 tomcat server 上
存有相同的 session 內容
讓你在一台 server 上的動作可以立刻反映在另一台 server 上
不過不知道這種功能可以用來做什麼就是了

再來,因為可以有多台 active server
並且支援 stripe 的方式,也就是每台 active server 上存的東西可以不一樣
所以可以達到 scalability,active server 越多,可以存的 object 也就越多

References:
official site: http://www.terracotta.org/
demo: http://www.terracotta.org//web/display/orgsite/Demo


Responses

  1. 看了你的筆記讓我豁然開朗
    謝了~

  2. 很高興能對你有幫助


發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

分類

%d 位部落客按了讚: