Dec
源起
看到這篇 Terracotta 介紹 後,想要試試,當我們同在一起,是否其快樂無比,做法是將兩隻老虎 (Java5) 變成一隻大老虎看看。
Terracotta 官方網站 以及這篇練習的 Hello 範例 參考。
DSO Server Node
先從 DSO 版本下手,下載 windows/linux 版約50MB 來用,這個安裝有自帶一個 JRE,所以不裝 JRE 也可以用,windows 裝完大約在 C:\Program Files\Terracotta\terracotta-2.2 可以找到。
因為要不同機器執行,和範例的本機執行有差別,要改一下東西才能跑。
先複製 \dso\config-sample\tc-config-dso.xml 為 tc-config-hello.xml。 改 /tc:tc-config/servers/server[@name and @host] 為 windows 機器的 ip。
start-tc-server.bat" -f ..\config-sample\tc-config-hello.xml
這個 tc-server 會啟動一個 HTTP 服務可以看輸出的訊息,例如啟動在 9510。
- http://192.168.111.194:9510/ 會對應到 C:\Program Files\Terracotta\terracotta-2.2 目錄。
- http://192.168.111.194:9510/config 輸出整個設定 XML,這個檔是關鍵。
JMX 的部份可以直接開 AdminConsole.exe 來看。
Tiger 1 DSO Client Node
這次要測的 HelloWorld 類似一張黑板,每個人(JVM)上去寫現在日期(執行一次)後, 大家都可以看到內容。
利用之前的 tiger1 當 Client Node 的環境,參閱 Hello Two Tigers
客戶端更簡單,不需要設定檔,直接在網路上抓 server node 的執行就可以。
/dso/bin/dso-java.sh -Dtc.config=http://192.168.1.9:9510/config tutorial.HelloWorld
tiger2 如法炮製,只要裝好 terracotta 後,將 java 換成 dso-java 並註明一下 server node 設定檔就可以多一台,接下部署要幾台有幾台。
保存
萬一 server node 關掉,狀態需要保存,就需要加個設定,將資料放在檔案中。
<persistence>
<mode>permanent-store</mode>
</persistence>
這樣可以不需要資料庫也可以保存狀態。只是兩種存放可能都是必須的,舉例來說,一張下午飲料訂購單上,傳來傳去,刪刪減減中,突然停電,這時狀態保留在 server node,開機後繼續傳閱填單子,最後負責人要保留這張單子並副本給飲料店。
這時候應該還是需要某種 ORM 將單子存到 DB 來保存,方便以後查詢。
飲料單可能是半天,員工旅行或是意見單前前後後也許要幾星期,不能保持狀態在 server node 實在太危險,這類延續數天數星期的事件,中間是否需要保留到 DB ,多久保留一次都是需要觀察的問題。
至於是否可以就讓這張單子一直躺在 server node ? 可能還需要時間檢視,完全不用 DB 來保存是否會有其他問題。
關於 一直躺著的問題 有人提到,雖說還不到某種 OODB 的實現,目前要做到的狀況跟現實差不多,現實需要一個 放在角落的櫃子來放這些單子,如果這個櫃子不是用 ORM 連結展示的 DB,就必須是某種櫃子物件,這樣才有連結 reference 可以找到其中放置的單子來取資料。
換句話說,保存搜尋的這個過程中,你要查閱某張單子,都需要先找到放的容器來找,暫時性的也許是承辦人的抽屜 (DSO) ,永久性也許是地下室架上的櫃子 (DB TABLE)。
不用 Terracotta
下面列舉想到的一些做法,可能需要考慮用資料庫或是某種保存程式來存放狀態,並提供同步所有點的即時物件狀態查詢。
- object-JDBC-DB-JDBC-object
- object-ORM-DB-ORM-object
- object-OXM-SOAP-WS-SOAP-OXM-object
觀察
- 在 windows 平台,一開起 start-tc-server.bat 會立刻吃掉近 250MB 記憶體,改一下 Xms64m Xmx128m 才能在小機器玩一下。
- 因為具有所謂的穿透性,說明程式不用改,可以直接在數十台直接部署,新增物件時,到 server node 改一下 tc-config.xml 就可以。
- server node 很像物件即時狀態交換中心,效率與同步衝突等等議題還有待練習觀察。
- JVM network 是個星狀網路,連結是採用 TCP/IP ,需要一直保持連線,如果斷掉連線 再回來,會回復到目前最新狀態。