Geode是一個提供實時且高一致性的分佈式數據管理平臺,典型案例是中國鐵路12306售票系統使用Geode管理10個集羣節點,在內存中管理2T的熱點數據和10個高可用彈性規模的後備節點。
Geode經過內存池 CPU 網絡資源和可選本地磁盤跨多個進程來管理對象和行爲,它使用動態複製和數據分區技術實現高可用性以及提升性能,保證高擴展性和容錯性,除了是一個分佈式數據容器,Geode仍是一個內存in-memory內存數據管理系統提供可靠的異步事件通知和保證信息傳遞。
Geode做爲一個極其成熟和強大的產品,其歷史能夠追溯到Smalltalk的第一個對象數據庫:GemStone,Geode是第一次被部署在金融部門是做爲華爾街交易平臺的交易 低延遲數據引擎。現在有超過600個企業客戶使用其實現高擴展的 24x7業務關鍵應用。典型案例是中國鐵路售票系統。
主要概念和組件
緩存是在Geode分佈式系統中描述節點的一個抽象。
在每一個緩存中,你能定義數據區域region,數據區域是是相似於關係數據庫中數據表的概念,以分佈式風格做爲name/value名稱/值對來管理數據,一個可複製區域中存儲的是分佈式系統中每一個緩存成員中數據的相同拷貝,一個分區區域是在緩存成員中傳播數據,當系統配置之後,客戶端應用可以根本不知道這些底層基礎架構狀況下訪問區域中的被分佈的數據,當數據改變時,你能定義監聽者來接受通知,你能定義過時時間來刪除區域中的過期數據。
Locator提供了服務發現和負載平衡的功能,你能夠配置客戶端使用一段Locator服務列表,而locator維持着動態服務成員列表,缺省狀況下,Geode客戶端和服務器使用端口40404廣播發現彼此。
Geode有以下特性:
1. 綜合冗餘 複製和shared nothing的持久化架構,提供自動預防故障的高性能的傳遞。
2.橫向擴展到數千萬個緩存成員,使用多個緩存拓撲來知足不一樣企業需求緩存可以跨計算機分佈。
3.異步和同步緩存更新傳播
4.delta變化量傳播能只在一個對象(delta)的新舊不一樣版本之間傳播,而不是將整個對象進行傳播,好處是顯著下降了分佈的開銷。
5.可靠的異步事件通知,保證消息傳遞能實現定製的低延時的分佈。
6.在沒有附加硬件狀況下,應用運行性能提升4到40倍。
7.數據敏感和實時商業智能,若是數據改變,你會當即可以看到改變。
8.集成Spring框架簡化可擴展的事務企業應用。
9.JTA兼容事務支持
10.跨整個集羣範圍的配置可以持久或導出到其餘集羣
11.遠程HTTP集羣管理
12.REST API和激活REST應用開發
13.主版本滾動升級。
五分鐘起步
從Pivotal得到源碼,支持JDK1.7.75以上版本:
$ cd geode
$ ./gradlew build installDist |
啓動locator和服務器:
$ cd gemfire-assembly/build/install/geode
$ ./bin/gfsh
gfsh> start locator --name=locator
gfsh> start server --name=server |
建立區域region:
gfsh> create region --name=region --type=REPLICATE |
編寫一個客戶端:
import java.util.Map; import com.gemstone.gemfire.cache.Region; import com.gemstone.gemfire.cache.client.*; public class HelloWorld { public static void main(String[] args) throws Exception {
ClientCache cache = new ClientCacheFactory()
.addPoolLocator("localhost", 10334) .create(); Region<String, String> region = cache .<String, String>createClientRegionFactory(ClientRegionShortcut.CACHING_PROXY) .create("region"); region.put("1", "Hello"); region.put("2", "World"); for (Map.Entry<String, String> entry : region.entrySet()) { System.out.format("key = %s, value = %s\n", entry.getKey(), entry.getValue()); } cache.close(); } } |
編譯運行HelloWorld.java,應該將gemfire-core-dependencies.jar放入classpath:
javac -cp /some/path/geode/gemfire-assembly/build/install/geode/lib/gemfire-core-dependencies.jar HelloWorld.java
java -cp .:/some/path/geode/gemfire-assembly/build/install/geode/lib/gemfire-core-dependencies.jar HelloWorld
Home · project-geode/docs Wiki · GitHub html
Geode爲用戶在Redis Cluster和Hazelcast以外提供了第三個選擇,這三個產品都是基於分佈式內存的開源產品。