Oracle Coherence中文教程一:入門

入門

本章提供一般連貫性的概念和功能的快速概覽。它概括產品的功能,使用的可能性,怎麼會去實現特定的功能,並提供一個簡要概述。在本章中討論的項目在本指南詳述。

1.1基本概念


本節中的主題介紹了基本概念,都與coherence,並討論了使用羣集數據的連貫性,相關的幾個重要特徵。

集羣數據管理

在一致性的核心是集羣數據管理的概念。這意味着以下目標:
一個完全一致的,單一系統映像(SSI
可擴展性進行讀取和寫入訪問
快速,透明的故障切換和故障恢復
線性可擴展性的存儲和處理
無單點故障(SPOFS
羣集範圍鎖定和交易
建立在此基礎之上Coherence提供的各種服務,包括數據庫高速緩存,HTTP會話管理,網格代理調用和分佈式查詢。進入有關這些功能的細節之前,一些基本的連貫性方面應該進行討論。

一個單一的邏輯層的APIXML配置的物理層
Coherence支持很多拓撲集羣數據管理。這些拓撲結構有一個權衡性能和容錯方面。通過使用一個單一的API,拓撲結構的選擇可延至部署,如果需要的話。這使開發人員能夠用一個連貫一致的邏輯視圖,同時提供了靈活性,在調整或應用需求的改變。

緩存策略
Coherence提供多個緩存實現:
    本地緩存本地緩存堆非集羣的緩存。
複製緩存非常小,讀重緩存。


分佈式緩存讀取和寫入訪問真正的線性可擴展性。數據是自動,動態和透明的跨節點分區。分配算法最大限度地減少網絡流量,並避免通過逐步轉移數據服務將暫停。

    近緩存提供本地高速緩存的性能與可擴展性的分佈式緩存。幾個不同的近緩存策略,並提供一個折衷性能和同步擔保之間。
在過程高速緩存提供了最高水平的原始性能,因爲對象是本地JVM內部管理。這樣做的好處是最直接實現本地複製,樂觀和近緩存實現。
進程(客戶端/服務器)緩存使用專用的緩存服務器提供了一個選項。當你想分區工作負載(避免強調應用服務器),這可以幫助。這是通過使用分區的緩存實現,只是在客戶端節點上禁用本地存儲,通過一個單一的命令行選項或一個單行條目在XML配置。
分層緩存(使用近緩存功能),使您能夠夫婦較大,分區的緩存服務器上緩存在應用服務器上的本地緩存,結合本地緩存分區緩存的可擴展性的原始性能。這是非常有用的兩個專用緩存服務器和緩存(高速緩存分區存儲在應用程序服務器的JVM)合署辦公。
見第三部分使用高速緩存緩存配置和使用的詳細信息。

數據存儲選項
雖然大多數客戶使用堆存儲加上專用的高速緩存服務器,Coherence數據存儲有幾個選項:

    On-heap—堆最快的選項,儘管它可以影響JVM的垃圾收集時間。
    NIO RAM—NIO內存垃圾收集沒有影響,但它確實需要序列化/反序列化。
    NIO Disk—相似NIO磁盤NIO的內存,但使用內存映射文件。
    File-based—基於文件的,採用了特殊的優化磁盤的存儲系統,以優化速度和減少I / O

連貫性存儲是短暫的:基於磁盤的存儲選項只用於管理高速緩存的數據。連貫性持久性存儲,再加上一個緩存加載/緩存存儲提供支持地圖。

請參見第13章,實現存儲和備份的地圖的詳細信息。

序列化選項
由於序列化集羣數據管理往往是最昂貴的部分,Coherence數據序列化/反序列化提供了以下選項:
    com.tangosol.io.pof.PofSerializer - 便攜式對象格式(也可簡稱爲POF)是一種語言無關的二進制格式。 POF的設計是令人難以置信的高效率,在空間和時間的連貫性是推薦的序列化選項。請參見第19章,使用可移植對象格式

    java.io.Serializable接口 簡單,但最慢的選擇。

    java.io.Externalizable - 這就要求開發人員手動實現序列化,但可以提供顯着的性能優勢。了java.io.Serializable相比,這可以減少序列化數據的大小由兩個或兩個以上(分佈式緩存特別有用的一個因素,因爲他們一般高速緩存數據以序列化的形式)。最重要的是,CPU佔用率大大降低。

    com.tangosol.io.ExternalizableLite - 這是非常相似java.io.Externalizable的的,但提供了更好的性能和更低的內存使用情況,通過使用更高效的IO流實現。

    com.tangosol.run.xml.XmlBean - 的默認實現ExternalizableLite

可配置和可擴展性

連貫性的API提供了訪問所有的連貫性功能。最常用的子集,該API是通過簡單的XML選項露出典型使用情況,以儘量減少努力。混合XML配置更容易通過API直接配置有沒有處罰。

連貫性被設計爲允許根據需要更換模塊。例如,本地的“backing maps”(每個節點上提供實際的物理數據存儲)可以很容易地根據需要更換。絕大多數的時間,這不是必需的,但它確實存在的情況下,需要它。一般原則是,80%的任務很容易,而餘下的20%的任務(特殊情況)需要多一點的努力,但肯定可以做到無重大困難。

命名空間層次

連貫性組織一套服務。在根羣集服務。集羣被定義爲一組連貫實例(每個JVM的一個實例,一個或多個在每臺計算機上的JVM)。集羣被定義的組播地址和端口的組合。甲網絡數據包的TTL(生存時間到,網絡躍點的數量)的設置可以限制羣集到一臺計算機,或計算機連接到單個交換機。

在羣集服務的各種服務,包括相干API。這些措施包括不同的緩存服務(複製,分發等)和調用服務(代理部署到各個節點集羣)。每個服務實例的命名,是一個典型的默認服務爲每種類型的實例。

緩存服務包含名爲的緩存(com.tangosol.net.NamedCache),這是類似於數據庫表是,它們通常包含了一組相關的對象。

羣集服務,以及基於其他羣集提供服務的連貫性的更多信息,請參閱第6章,簡介到相干集羣,

1.2讀寫緩存

本節提供了一個概述的NamedCache API,它是主要的應用程序接口,用於獲取和交互緩存實例。本節還包括一些洞察的NamedCache API使用。

1.2.1 NamedCache

下面的源代碼返回一個引用一個NamedCache實例。底層的緩存服務開始,如果必要的。請參閱Oracle CoherenceJava API參考的細節上NamedCache接口。

import com.tangosol.net.*;

...

NamedCache cache = CacheFactory.getCache("MyCache");

連貫性掃描的緩存配置XML文件名稱映射mycache的。這是一個web容器的web.xml文件中的名稱映射到Servlet類似。連貫性的緩存配置文件包含(在最簡單的情況下)一組映射(從緩存名稱緩存方案)和一組緩存計劃。

默認情況下,Coherence 使用coherence-cache-config.xml文件在根coherence.jar發現。這可以在JVM命令行與-Dtangosol.coherence.cacheconfig=file.xml覆蓋。這個參數可以參考的文件系統路徑,或一個Java資源路徑。

com.tangosol.net.NamedCache接口擴展其他幾個接口:

The com.tangosol.net.NamedCache interface extends several other interfaces:

 java.util.Map—basic Map methods such as get(), put(), remove().

 com.tangosol.util.ObservableMap—methods for listening to cache events. (See Chapter 21, "Using Cache Events".

   com.tangosol.net.cache.CacheMap方法,獲得在緩存中的keys(as a Map)的集合,把緩 存中的對象。還支持添加屆滿值時,高速緩存中的條目。
    com.tangosol.util.QueryMap查詢緩存的方法。 (見查詢緩存”Oracle Coherence的開發 者指南)
    com.tangosol.util.ConcurrentMap併發訪問,如lock() and unlock().
 com.tangosol.util.InvocableMap服務器端緩存中的數據處理方法。

1.2.2緩存對象的要求

的緩存鍵和值必須是可序列化的(例如,java.io.Serializable接口)。此外,緩存鍵必須提供一個實現的hashCode()和equals()方法,這些方法必須羣集節點間返回一致的結果。這意味着,執行的hashCode()和等於()必須被基於對象的序列化狀態(即是,該對象的非transient的領域);大部分內置的Java類型,如字符串,整數和日期,滿足僅這一要求。一些緩存實現(特別是分區的高速緩存)使用的關鍵對象的序列化形式平等的測試,這意味着鍵的equals()返回true必須序列是完全相同的;多數內建的Java類型以及滿足這一要求。

1.2.3 NamedCache的使用模式

一般有兩種方法使用NamedCache

    作爲一個集羣執行的java.util.Map的幾個新增的功能(查詢,併發),但沒有持久性的支持(高速緩存)。

    作爲一種手段去耦訪問外部數據源(內聯高速緩存)。在這種情況下,應用程序使用界面NamedCacheNamedCache護理管理的基礎數據庫(或其他資源)。

通常情況下,內聯高速緩存用於緩存數據:

    a database—數據庫的最直觀的使用的簡單緩存緩存數據庫表(以Java對象的形式)。

    a service—服務的主機,網絡服務,服務局的任何服務,代表一種昂貴的資源的訪問(無論是由於成本或實際上網費用計算)。

   calculations— 計算,金融計算,聚合,數據轉換。使用內嵌緩存,使得它很容易,以避免重複計算。如果計算完成後,結果只是被從緩存中取出。由於任何可序列化的對象可以被用來作爲一個緩存鍵,它是一件簡單的事,使用對象,其中包含計算參數作爲緩存鍵。

參見第14章,更多信息內嵌緩存緩存的數據源

回寫式選項:

    寫通過確保外部數據源總是包含最新信息。二手數據時必須立即保留,或與其他應用程序共享數據源時。

    後寫提供更好的性能緩存寫入到外部數據源。不僅可以寫入緩衝,甚至在數據源上的負載,但是可以結合多個寫入的,進一步降低了I / O。權衡的是,數據是不是立刻保存到磁盤,但是,它立即分佈在整個集羣中,這樣的數據服務器生存的損失。此外,如果整個數據集的緩存,這個選項意味着應用程序可以暫時度過一個完整的數據源失敗既是緩存讀取和寫入不需要同步訪問數據源。

要實現一個只讀的內嵌的緩存,你只需實現兩個方法上com.tangosol.net.cache.CacheLoader接口,一個單量讀取,批量讀取。 Coherence提供一個抽象類com.tangosol.net.cache.AbstractCacheLoader的,它提供了一個默認實現批量的方法,這意味着你只需要實現一個方法:公共對象負載(對象OKEY)。此方法接受一個任意的緩存鍵和返回適當的值對象。

如果你想實現讀/寫緩存,必須繼承com.tangosol.net.cache.AbstractCacheStore的(或實現接口com.tangosol.net.cache.CacheStore),這增加了以下方法:

public void erase(Object oKey);

public void eraseAll(Collection colKeys);

public void store(Object oKey, Object oValue);

public void storeAll(Map mapEntries);

從外部數據源的方法erase() 應該刪除指定的鍵。store()的方法應該更新數據源中指定的項目,如果它存在,或插入它,如果它目前並不存在。

CacheLoader /緩存存儲實現後,它可以通過連接的coherence-cache-config.xml文件

1.3查詢緩存

Coherence提供查詢緩存的數據的能力。分區的高速緩存,查詢索引和並行,這意味着,將服務器添加到一個分區的高速緩存不僅增加了總的吞吐量(每秒查詢),但也降低了延遲,查詢花費較少的用戶時間。要查詢針對NamedCache的,所有的對象應該實現一個共同的接口(或基類)。在任何字段中的對象可以被查詢,索引是可選的,用於提高性能。複製緩存,查詢本地執行,不使用索引。請參見第22章,查詢緩存中的數據的詳細信息。

要添加一個索引到NamedCache,你首先需要一個值提取(接受輸入一個值對象,並返回該對象的屬性)。盲目添加索引可以(重複指標被忽略)。索引可以添加在任何時間,之前或之後插入到緩存中的數據。

應該指出的是查詢只適用於高速緩存的數據。出於這個原因,查詢應該不會被使用,除非整個數據集已經被加載到高速緩存中,除非有特別的支持被添加到管理部分加載的集。

開發者可以選擇執行額外的自定義過濾器的查詢,從而利用查詢的並行行爲。特別是性能敏感的查詢,開發人員可以實現感知索引的過濾器,它可以訪問相干的內部索引結構。

連貫性包括一個內置的優化,適用的最佳順序的索引。由於集中查詢性質,優化是有效和高效。不需要維護。

1.4交易

Coherence提供各種交易方案。這些選項包括:基本數據併發使用ConcurrentMap接口EntryProcessorAPI完整的XA支持使用相干資源適配器使用交易框架API和原子事務,原子事務。 ,執行交易的詳細說明,請參見第27章。

1.5 HTTP會話管理

Coherence* Web是一個HTTP會話管理模塊支持廣泛的應用服務器。請參閱Oracle Coherence的用戶指南的Oracle Coherence* Web的更多信息的連貫*網站。

不需要使用連貫性會話管理應用程序的任何更改。相干*網絡使用的NearCache技術提供完全容錯的高速緩存,具有幾乎無限的可擴展性(幾百羣集節點沒有問題)。

1.6調用服務

Coherence調用服務可以部署計算代理集羣內的各個節點。這些代理可以是執行式(部署和異步聽)或查詢式(部署和同步聽)。 ,處理在高速緩存中的數據,使用的調用服務的更多信息,請參見第24章。
訪問調用服務通過的com.tangosol.net.InvocationService的接口,幷包括以下兩種方法:
1-1方法在InvocationService API

public void execute(Invocable task, Set setMembers, InvocationObserver observer);

public Map query(Invocable task, Set setMembers);


可以檢索從com.tangosol.net.CacheFactory類的一個實例服務。
連貫性實現的WorkManager API任務爲中心的處理。

1.7活動

所有的NamedCache實例Coherence實施com.tangosol.util.ObservableMap的接口,它允許附加緩存監聽器實現的選項(的com.tangosol.util.MapListener)。應當指出的是,應用程序可以觀察到作爲邏輯概念的事件,而不管導致該事件的計算機。可定製的基於服務器的過濾器和輕量級的事件,可以最大限度地減少網絡流量和處理。緩存聽衆遵循JavaBean的範式,並可以區分系統的緩存事件(例如,驅逐)和應用程序緩存的事件(例如,獲取/把操作)。

連續查詢功能提供的能力,保持客戶端的物化視圖。同樣,任何服務可以觀看的成員加入和離開,包括羣集服務和高速緩存和調用服務。

請參見第21章,使用高速緩存活動,使用​​事件的更詳細的信息。

1.8對象 關係映射集成

大多數ORM產品支持“L2”緩存插件的連貫性。這些解決方案緩存內的實體數據的連貫性,允許在多臺服務器上的應用程序共享緩存的數據。請參閱Oracle Coherence的集成指南Oracle Coherence的更多信息。

1.9 C + + /NET集成

Coherence提供支持跨平臺的客戶端(通過TCP / IP)。所有客戶端使用相同的線協議(服務器不區分客戶端平臺)。另外,還要注意有沒有在任何這些客戶的第三方組件(如嵌入式的JVM語言橋樑)。線協議支持事件飼料和相干過程中的緩存爲所有的客戶端平臺。請參閱Oracle Coherence的客戶端的完整說明,使用相干指南*擴展支持遠程C + +NET客戶端。

1.10管理和監視

連貫性提供了使用Java管理擴展(JMX)的管理和監控設施。使用JMX與連貫性的詳細信息,請參閱Oracle Coherence的管理指南。

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