oracle coherence 配置使用

Coherence下載地址:

http://www.oracle.com/technetwork/cn/middleware/coherence/downloads/index.html

Coherence安裝:

Coherence是純Java的框架,不需要額外的安裝。首先在Oracle網站上下載開發包,最新爲3.4版,只有13M,可以說是很小很強大。 
SDK解壓即可,包含 bin, doc, example, lib 四個目錄。Doc下包含了完整的user-guide,只是有點長,有350多頁。
創建或切換到一個cache:Coherence集羣是由Node構成的,每個Node既存儲數據,又可以查詢數據。 
運行 bin/coherence.sh命令就能啓動一個Node實例。 
運行多次,就能啓動多個實例,各Node能自動檢測到網路內新啓動的Node,並加入集羣。 
第一個節點啓動信息大致爲:
MasterMemberSet(
  ThisMember=Member(Id=1, Timestamp=2014-09-01 00:25:33.724, Address=10.2.48.181:8088, MachineId=14517, Location=site:,process:2413, Role=CoherenceConsole)
  OldestMember=Member(Id=1, Timestamp=2014-09-01 00:25:33.724, Address=10.2.48.181:8088, MachineId=14517, Location=site:,process:2413, Role=CoherenceConsole)
  ActualMemberSet=MemberSet(Size=1
    Member(Id=1, Timestamp=2014-09-01 00:25:33.724, Address=10.2.48.181:8088, MachineId=14517, Location=site:,process:2413, Role=CoherenceConsole)
    )
  MemberId|ServiceVersion|ServiceJoined|MemberState
    1|3.7.1|2014-09-01 00:25:36.999|JOINED
  RecycleMillis=1200000
  RecycleSet=MemberSet(Size=0
    )
  )
最後會出現命令行提示符
                              
通過Coherence控制檯命令就可以執行Cache的基本操作。

創建基本cluster和緩存實例

創建一個基本的Cluster

1)使用一個文本編輯器,打開Coherence_home/bin/cache-server腳本
2)修改java_opts變量,包含tangosol.coherence.cluster和tangosol.coherence.clusterport系統屬性如下: 
set java_opts="-Xms%memory% -Xmx%memory% -Dtangosol.coherence.cluster=cluster_name -Dtangosol.coherence.clusterport=port"  替換cluster_name和端口號的值,對於cluster是唯一的。例如,使用你的名字來定義cluster的名和和你電話號碼的最後四位作爲端口 號
3)保存並關閉cache-server腳本
4)重複1到3的步驟來修改Coherence_Home/bin/coherence腳本
5)運行cache-server腳本。啓動一個緩存服務器,輸出信息提供了關於cluster成員的信息。
6)運行兩個coherence腳本,每個實例啓動後,輸出信息提供了關於各自的集羣成員的信息。每個實例返回了一個對於命令行工具的命令提示符。

創建緩存

在任意一個緩存工廠實例的命令提示符裏,創建一個名爲Cmcc的緩存。使用cache命令:
 
           cache Cmcc
    在命令提示符,使用put命令來存放一個簡單的字符串進行的緩存,通過鍵入一個key/value值對(用空格分開):
 
           put key1 hello 
 
    這個命令返回顯示null。put命令總是返回了一個給定鍵的以前的值。null值被返回,因爲這是這個鍵的第一個值。
    切換到另一個緩存工廠實例,從命令提示符創建一個Cmcc緩存,使用cache命令:
 
           cache Test
    從命令提示符,檢索緩存中的字符串,使用get命令,輸入鍵名
 
           get key1 
 
這個命令返回顯示hello。任何一個緩存功能進程能夠添加和移除緩存條目,因爲進程是同一個集羣的一部分,並且Cmcc緩存是被所有集羣成員所知道的。此外,既然緩存服務器存儲了緩存數據的備份,每個緩存工廠進程都能夠被關閉,緩存數據仍然存在。
Coherence默認的形式是用多播來尋找cluster。Coherence能夠被配置爲使用單播,如果網絡中不允許使用多播。

Coherence配置

默認的配置文件說明

tangosol-coherence.xml-這個文件提供了operational 和run-time設置,被用來創建和配置cluster,通訊和數據管理服務。這個文件代表性的被稱爲operational deployment descriptor.這個文件的架構是coherence-operational-config.xsd文件。
 
tangosol-coherence-override-dev.xml 當Coherence啓動在開發模式時,這個文件覆蓋了tangosol-coherence.xml文件的operational 設置。默認的,Coherence啓動與developer 模式,這個文件中的設置會被使用。這個文件中的設置適合開發環境。這個覆蓋文件的架構文件和operational deployment descriptor的架構文件是一樣的。
 
tangosol-coherence-override-eval.xml 當Coherence啓動與evaluation模式時候,這個文件覆蓋了在tangosol-coherence.xml文件的operational 設置。這個文件中的設置適合evaluating Coherence.這個覆蓋文件的架構文件和operational deployment descriptor的架構文件是一樣的。
tangosol-coherence-override-prod.xml當Coherence啓動與 evaluation模式時候,這個文件覆蓋了在tangosol-coherence.xml文件的operational 設置。這個文件中的設置適合production Coherence.這個覆蓋文件的架構文件和operational deployment descriptor的架構文件是一樣的。
 
coherence-cache-config.xml 這個文件用來指定在cluster中使用的各種各樣的緩存類型。這個文件被代表性的稱爲configuration deployment descriptor.這個文件的架構是coherence-cache-config.xsd文件。
 
coherence-pof-config.xml 當使用Portable Object Format(POF)來序列化對象時,這個文件用來指定自定義的數據類型。這個文件被代表性的稱爲POF configuration deployment descriptor.這個文件的架構是coherence-pof-config.xsd文件。
 
Management configuration files 一個用來配置coherence management reports的文件集合。這些文件在coherence.jar庫的/reports目錄裏。文件包含了一組配置文件的報告(report-group.xml。默認的),參考了許多的報告定義文件。每個報告定義文件的結果是創建一個報告文件,該文件顯示管理信息基於特定的一組度量。 這些文件的架構分別是coherence-report-config.xsd 和 coherence-report-group-config.xsd file.

 

Coherence常用命令

Coherence常用命令:

創建或切換到一個cache:Map (?): cache cmcc
Put一個數據:Map (ccc1): put key1 value1
Get一個數據: Map (ccc1): get key1
查看有哪些cache:Map (?): maps
查看一個cache下的所有key:Map (ccc1): list
你不必關心數據存在哪裏,可以在Node1 put一個數據,在Node2get出來。 
默認啓動Node使用的是 Coherence.jar中的緩存配置文件 coherence-cache-config.xml ,使用的是DistributedCache 分區緩存

Coherence在編程中使用

Coherence在編程中使用API1-------基礎:

使用Coherence進行數據管理的應用程序中的API調用非常簡單,無論集羣有多少個物理機器,多少個節點實例,客戶端只邏輯上面對集羣
    NamedCache cache = CacheFactory.getCache( cacheName );  
        cache.put(key, value);  
        Object value = cache.get(key);  
必須引入coherence.jar, tangosol.jar 等必要的類庫文件

Coherence在編程中使用API2--------查詢:

添加索引可以是查詢更有效:
      // ValueExtractor : 提取內容
      // Ordered 是否排序
      // 排序比較器
    cache.addIndex(ValueExtractor, Ordered, comparator)
內容提取器類型:
ReflectionExtractor        反射提取器
比如:new ReflectionExtractor("getAge")
KeyExtractor                                         關鍵字提取器
new KeyExtractor(new ReflectionExtractor("getName"))
ChainedExtractor           鏈接提取器
new ChainedExtractor("getAddress.getCity")
entrySet 查詢集合:
entrySet(Filter)方法內部是一個過濾器類型
過濾器類型:
EqualsFilter                     提取值等於參數字符串的對象
new EqualsFilter("getName", "JS")
NotEqualsFilter               Equal過濾器相反
new EqualsFilter("getName", "JS")
AndFilter                         鏈接兩個過濾器
new AndFilter(
         new EqualsFilter("getName", "JS1"),
         new EqualsFilter("getName", "JS2"))
LikeFilter 和數據庫的like 相似
new LikeFilter("getName","J%")
GreaterFilter 大於判斷
new GreaterFilter("getAge", 20)
 
coherence 集合查詢:
//得到大於20歲的個數
cache.aggregate(new GreaterFilter("getAge", 20), new Count())
//得到最小年齡
cache.aggregate(AlwaysFilter.INSTANCE,new LongMin("getAge"))
//得到最大年齡
cache.aggregate(AlwaysFilter.INSTANCE,new LongMax("getAge"))
//得到平均年齡
cache.aggregate(AlwaysFilter.INSTANCE,new DoubleAverage("getAge"))

Coherence緩存機制

1 複製緩存(ReplicatedCache)

數據在集羣成員中進行全複製,每個節點都有一個完整的數據拷貝。這種集羣下,read性能最高( cache.get(key) 操作),容錯性好,但cache.put(key,value) 操作性能較低。如果Node很多,每次put操作都要在所有成員上執行一次
這是一種傳統的集羣技術,不是Coherence的亮點。

2 樂觀緩存 (OptimisticCache)  

它類似於複製緩存,但不提供併發控制(Concurrency Control)。這種集羣數據吞吐量最高,各節點容易出現數據不一致的情況。

3 分區緩存(Distributed (Partitioned) Cache)

Coherence 的亮點。默認情況下,一份數據A只在兩個節點上有拷貝,第二份作爲備份數據(Backup),用於容錯。
從整體上看,假設應用需要的Cache總內存爲 M,該模式將數據分散到N個節點上,每個JVM只佔用 M/N  的內存消耗,與複製緩存每節點消耗 M量的內存形成對比,它可以極大節省內存資源。

4  Near緩存 (NearCache)  

分區緩存的改進版。分區緩存將數據全部存到Cache Node上,而Near緩存將緩存數據中使用頻率最高的數據(熱點數據Hotspot)放到應用的本地緩存(Local Cache)區域。由於本地內存訪問的高效性,它可以有效提升分區緩存的read性能

5  四種緩存類型的基本特點對比  

幾個重要因素:
JVM數量(N): 即啓動的Node數量,每個節點爲一個JVM進程;
數據大小(M):要緩存的數據總量的佔用空間大小,如10M,120M等;
冗餘度(R) :緩存的secondary備份個數。分區緩存默認爲1,可以配置2,3,…
本地緩存大小(L):(僅對Near緩存而言)應用所在的本地緩存的空間大小字節數。
幾種類型的對比:
 

Coherence數據管理模式

Coherence4種數據管理模式:

Read-Through,
Write-Through,
Refresh-Ahead
Write-Behind
數據管理模式體現在CacheStore 接口的功能上。
CacheStore負責直接和數據源交互,進行增刪改查操作;並也負責和Coherence Cache交互,向其中寫數據(put),讀數據(get)和刪除數據(remove)。CacheStore相當於 數據源和Cache間的橋樑。
對於不同的應用,由於數據源不同,如:DB,WebService ,FileSystem等, CacheStore有不同的實現。它一般作爲應用的一部分。Coherence也爲 Hibernate,Toplink等實現了一個CacheStore。

1 Read-Through:

Read-Through 的基本特點是同步讀取。步驟爲:
1)應用調用 CacheStore 查詢數據X;
2)CacheStore 去Cache中查詢,未發現數據時,向數據庫執行查詢操作,並將查詢結果放到 Cache中, 並將結果返回給應用;
3)如果發現Cache中有數據,則直接從Cache讀取,並返回給應用。
其特點體現在第二步,CacheStore調用 cache.get(X) 到 CacheStore 給應用返回數據,是同步操作。 也就是要在一個同步過程中先等待數據查詢,Cache被填充,才能獲得數據。 這種模式的性能比較低,不及 Refresh-Ahead。

2 Write-Through:

Write-Through 對應於數據修改操作,如 update,也具有同步的特點。
1)應用調用 CacheStore update數據X;
2)CacheStore 先update Cache中的數據,然後再向數據庫執行update操作;
這種模式在一個同步過程中,先改Cache,再改數據庫。因此性能也不是最理想的。

3 Refresh-Ahead:

與Read-Through相對,它是異步的。 
Coherence在Cache數據過期前,有CacheStore自動重新從數據庫加載數據。而前臺應用在查詢數據時,CacheStore 僅調用Cache.get(X)。因此這種模式的效率明顯高於read-through。 自動重載數據的時間可以設定。

l  4 Write-behind:

與write-through相對,它是異步的。
應用調用CacheStore進行update時,CacheStore不去操作數據庫,直接返回結果。而Coherence集羣自動對操作進行排隊(queue),在間隔一段時間後(interval), CacheStore在執行隊列中的 update 操作。 這樣,減少的同步操作數據庫的時間被節省,修改類功能的性能就能得到大幅提高。這也是Coherence的一大特色。

序列化選項

l  序列化選項:

因爲序列化通常是集羣數據管理中消費最大的,Coherence提供了下面的選項來序列化和反序列化數據:
1.       com.tangosol.io.pof.PofSerializer-Portal Object Format (也可以引用POF)是一種和語言無關的二進制格式。POF的設計是用來在控件和時間上提高效率,在Coherence中是最常用的序列化選項。
2.       java.io.Serializable 最簡單的,但是最慢的選項。
3.       java.io.Externalizable-這要求開發人員手動實現序列化,但是能夠提供重大的性能提升。與java.io.Serizlizable比較,這個能夠用兩種或者兩種以上的因素截取序列化數據(在分佈式緩存中特別有用,因爲他們通常以序列化形式緩存數據)。最重要的,CPU使用率顯著的降低。
4.       com.tangosol.io.ExternalizableLite-這和java.io.Externalizable十分相似,但是提供了更好的性能和更低的內存利用率,通過使用了一個更加高效的IO stream的實現。
5.       com.tangosol.run.xml.XmlBean-ExternalizableLite的默認實現

Invocation服務

l  Invocation服務

Coherence調用服務能夠部署運算代理到各個cluster的節點。這些代理既可以是excute-style(部署和異步監聽)有可以是query-style(部署和同步監聽)。 
調用服務能夠通過com.tangosol.net.InvocationService接口來訪問,包含以下兩個方法: 
public void execute(Invocable task, Set setMembers, InvocationObserver observer); 
public Map query(Invocable task, Set setMembers); 
服務的實例可以從com.tangosol.net.CacheFactory 類來檢索。 
Coherence爲以人物爲中心的處理實現WorkManager API。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章