oracle coherence勉強会

Post on 10-May-2015

9.481 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

ORACLE COHERENCE 勉強会

@making

Contents 概要説明

Oracle Coherence とは分散キャッシュを用いたアーキテクチャ例キャッシュの仕組み

ハンズオンCoherence インストールOracle Coherence にアクセスCoherence API を使用して Java からアクセスJava Beans のキャッシュキャッシュデータの検索・集計処理CohQL (Coherence Query Language)

概要説明

Oracle Coherence とは インメモリデータグリッド

複数サーバに渡る分散キャッシュ キャッシュ以外の機能

○ クエリ機能○ イベントリスナ機能○ データ処理のパラレル実行機能

Java ベース 実体は Java クラスライブラリ

○ coherence.jar があれば動く クライアントは Java/C++/.NET

利用目的 スケーラブルなシステム構築 DB ボトルネックの解消

類似製品 IBM WebSphere eXtreme Scale (IBM) Gemstone Gemfire (SpringSource) EhCache (Teracotta)

クライアント

Coherence データグリッド

データベースWEB

サービス

分散キャッシュ 複数の JVM でクラスタ形成

データを分散して配置 透過的なデータアクセス

クライアント

A B C

JVM

A

JVM

B

JVM

C

Map 型インタフェース java.util.Map を継承した key/value イン

タフェース

NamedCache cache =

CacheFactory.getCache("person"); Person p1 = (Person) cache.get(key1); cache.put(key2, p2);

データグリッドを用いる場合の基本的なアーキテクチャ 従来型 データグリッド

クライアント

AP サーバ AP サーバ

データベース永続化データ

個別データ

共通データ

個別データ

共通データ

クライアント

AP サーバ AP サーバ

データベース永続化データ

個別データ 個別データ

キャッシュサーバ キャッシュサーバ キャッシュサーバ

共通データ

基本的な適用パターン例1. 大量のマスタデータのキャッシュする2. 大量の HTTP セッションを扱う

パターン 1 :大量のマスタデータのキャッシュ 従来

AP サーバマスタデータ

データ読み込み

データベース

AP サーバマスタデータ

データ読み込み

起動時に全部読み込む

パターン 1 :大量のマスタデータのキャッシュ データグリッド

AP サーバマスタデータ

データ読み込み

データベース

AP サーバマスタデータ

データ読み込み

キャッシュサーバ キャッシュサーバマスタデータ

データ読み込み

必要な時に読み込む

起動時に全部読み込む

パターン 1 :大量のマスタデータのキャッシュ データグリッド

AP サーバマスタデータ

データ読み込み

データベース

AP サーバマスタデータ

データ読み込み

キャッシュサーバ キャッシュサーバマスタデータ

データ読み込みデータが増えたら…

キャッシュサーバ

パターン 1 :大量のマスタデータのキャッシュ データグリッド

AP サーバマスタデータ

データ読み込み

データベース

AP サーバマスタデータ

データ読み込み

キャッシュサーバ キャッシュサーバマスタデータ

データ読み込み

スケールアウトで容量増加

パターン 2 :大量の HTTP セッション

従来

メモリはスケールしない セッションレプリケーションがネックであ

まりスケールしない

AP サーバ

セッション管理

AP サーバ

セッション管理

レプリケーション

スケール小

パターン 2 :大量の HTTP セッション

データグリッド

AP サーバ AP サーバ

キャッシュサーバ キャッシュサーバマスタデータ

スケール大

パターン 2 :大量の HTTP セッション

データグリッド

AP サーバ AP サーバ

キャッシュサーバ キャッシュサーバ キャッシュサーバマスタデータ

スケール大

パターン 2 :大量の HTTP セッション

データグリッド

AP サーバ AP サーバ

キャッシュサーバ キャッシュサーバ キャッシュサーバマスタデータフェールオーバ

スケール大

Coherence が提供するキャッシュ方式

レプリケーションキャッシュ全てのキャッシュアイテムが全ノードに複製される

パーティションキャッシュ複数のノードに分散してキャッシュする

ニアキャッシュ ( 次回 )二層混成キャッシュ ( フロント:ローカルキャッ

シュ、バック:パーティションキャッシュ )

以降「 IT アーキテクト Vol.22 」の内容を改編して説明

レプリケーションキャッシュ 全てのキャッシュアイテムがグリッド内

のすべてのノードに複製される→ 書き込み性能は設定次第 ( レプリケーションの同期をとるか、非同期にするか ) アプリケーションと同一のプロセス内に

キャッシュ領域を作成→ 読み込みは遅延時間 0 なので速い

レプリケーションキャッシュの読み込み

キャッシュノード 1

アプリケーション

A B

C D

キャッシュノード 2

アプリケーション

A B

C D

キャッシュノード 3

アプリケーション

A B

C D

読み取りはプロセス内で完結

レプリケーションキャッシュの書き込み

キャッシュノード 1

アプリケーション

A B

C D

キャッシュノード 2

アプリケーション

A B

C D

キャッシュノード 3

アプリケーション

A B

C D

書き込みは他のノードへレプリケート

パーティションキャッシュ 各ノードに分散して保存 通常アプリケーションと別プロセス内に

キャッシュ領域を作成する 読み込みはあるノードからネットワーク経由

で行う 書き込みはプライマリデータとバックアップ

データをそれぞれ別のノードにネットワーク経由で行うバックアップ数は変更可能であるが 1 が推奨値

パーティションキャッシュの読み込み

キャッシュノード 1

アプリケーション アプリケーション

キャッシュノード 2 キャッシュノード 3

P

B

P

B

P

B

P… プライマリデータ、 B… バックアップデータ

A

B

CD

A

B

C D

読み取りは 1 往復のネットワークアクセス

パーティションキャッシュの書き込み

キャッシュノード 1

アプリケーション アプリケーション

キャッシュノード 2 キャッシュノード 3

P

B

P

B

P

B

P… プライマリデータ、 B… バックアップデータ

A

B

CD

A

B

C D

書き込みは 2 往復のネットワークアクセス

パーティションキャッシュのリカバリ

キャッシュノード 1

アプリケーション アプリケーション

キャッシュノード 2 キャッシュノード 3

P

B

P

B

P

B

P… プライマリデータ、 B… バックアップデータ

A

B

CD

A

B

C D

パーティションキャッシュのリカバリ

アプリケーション アプリケーション

キャッシュノード 2 キャッシュノード 3

P

B

P

B

P… プライマリデータ、 B… バックアップデータ

B

C

A

B

D

パーティションキャッシュのリカバリ

アプリケーション アプリケーション

キャッシュノード 2 キャッシュノード 3

P

B

P

B

P… プライマリデータ、 B… バックアップデータ

B

C

A

B

D

A D

バックアップがプライマリに昇格

パーティションキャッシュのリカバリ

アプリケーション アプリケーション

キャッシュノード 2 キャッシュノード 3

P

B

P

B

P… プライマリデータ、 B… バックアップデータ

B

CBA D

バックアップがプライマリに昇格

パーティションキャッシュのリカバリ

アプリケーション アプリケーション

キャッシュノード 2 キャッシュノード 3

P

B

P

B

P… プライマリデータ、 B… バックアップデータ

B

C

D

B

A

A D

C

プライマリからバックアップを作成

パーティションキャッシュのリカバリ

アプリケーション アプリケーション

キャッシュノード 2 キャッシュノード 3

P

B

P

B

P… プライマリデータ、 B… バックアップデータ

B

C

D

B

A

A D

C

パーティションキャッシュのノード追加

キャッシュノード 1

アプリケーション アプリケーション

キャッシュノード 2 キャッシュノード 3

P

B

P

B

P

B

P… プライマリデータ、 B… バックアップデータ

A

B

CD

A

B

C D

キャッシュノード 4

P

B

パーティションキャッシュのノード追加

キャッシュノード 1

アプリケーション アプリケーション

キャッシュノード 2 キャッシュノード 3

P

B

P

B

P

B

P… プライマリデータ、 B… バックアップデータ

A

B

CD

A

B

C D

キャッシュノード 4

P

B

D

B

再パーティショニング

パーティションキャッシュのノード追加

キャッシュノード 1

アプリケーション アプリケーション

キャッシュノード 2 キャッシュノード 3

P

B

P

B

P

B

P… プライマリデータ、 B… バックアップデータ

A C

A

B

C D

キャッシュノード 4

P

B

D

B

キャッシュ容量を追加できる

レプリケーションキャッシュとパーティションキャッシュの比較方式 書き込み 読み込み データサイズ 耐障害性

レプリケーション

全ノードに書き込む( 同期 / 非同期でレイテンシが変わる )

遅延時間 0 1 プロセスに割り当て可能な最大量( 2

~ 4GB )

高い ( 落ちたノードを無視するのみ )

パーティション

(1+ バックアップ数 ) 往復のネットワークアクセス

1 往復のネットワークアクセス

ノードの追加によって容量を拡張可能

バックアップからプライマリへ昇格し、新たなバックアップを別ノードに作成

ハンズオンではパーティションキャッシュを使用します

ハンズオン

資材 coherence-handson フォルダで

mvn eclipse:eclipse○ 要 maven 設定 (proxy, Eclipse のクラスパス変

数 M2_REPO)Eclipse からインポート

別テキストをベースに進める

Oracle Coherence インストール

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

「 Oracle Coherence for Java Version 3.6.1 」をクリックしてダウンロードして展開

展開したディレクトリを環境変数COHERENCE_HOME に設定

JAVA_HOME が未設定の場合は設定

キャッシュサーバー起動 %coherence_home%\bin\cache-

server.bat を実行

クラスタのメンバ情報

プライベートクラスタ作成 同一ネットワーク上で Coherence サーバを立ち

上げると、デフォルト設定で同じマルチキャストアドレスとポートを使用するので、同一クラスタに参加してしまう

( 回避策 1) マルチキャストアドレス / ポートを変更-Dtangosol.coherence.clusteraddress=224.0.0.7-Dtangosol.coherence.clusterport=33333

( 回避策 2)TTL を 0 にする-Dtangosol.coherence.ttl=0

↑の JVM 起動オプションを cache-server.batやcoherence.bat の java_opts に設定

設定ファイルで設定することも可能

今回は TTL=0 の設定を設定ファイルに記述 クラスパス上に tangosol-coherence-

override.xml を作成し、%coherence_home%\lib 上に置く。

cache-server.bat と coherence.bat のjavaコマンドの -cpを“%coherence_home%\lib;%coherence_home%\lib\coherence.jar” に変更

設定内容 tangosol-coherence-override.xml に以下

の設定を記述

<coherence> <cluster-config> <multicast-listener> <!-- TTL の設定 --> <time-to-live>0</time-to-live> <!-- 既存のクラスタの確認をあきらめ新しいクラスタを開始するまでの時間 --> <join-timeout-milliseconds>1000</join-timeout-milliseconds> </multicast-listener> </cluster-config></coherence> 

キャッシュサーバーをもう一度起動

設定ファイルが上書きされていることを確認

TTL=0 になっていることを確認

コマンドラインからデータグリッドにアクセス coherence.bat を実行

Map (?): cache test

Map (test): put 1 OneMap (test): get 1OneMap (test): put 2 TwoMap (test): list1 = One2 = Two

cache キャッシュに名前をつけて作成put キーと値のペアをキャッシュに

格納する。常にそのキーに対する直前の値が返却される。

get キャッシュからキーに対応する値を取得する。

list キャッシュの内容を表示するremove キャッシュからキーに対応する

値を削除する。

Java からデータグリッドにアクセス 新規の NamedCache を作成

java.util.Map を拡張しているので操作がわかりやすい

作成した NamedCache へオブジェ y九との put と get

簡単なサンプルpackage handson.coherence.lab3; import com.tangosol.net.CacheFactory;import com.tangosol.net.NamedCache; public class MyFirstSample {  public static void main(String[] args) { NamedCache cache = CacheFactory.getCache("mycache"); cache.put("Name", "Taro Yamada"); System.out.println("Value in cache is " + cache.get("Name")); } }

 

Java Beans のキャッシュ 2種類の方式

java.io.Serializable インタフェースを実装する方法

Portable Object Format(POF) を実装する方法

POF は C++/.NET 間でも利用可能な上、高速かつ低容量なシリアライゼーション機構ただし、実装がやや面倒かつ、 POF 構成ファ

イルへの登録が必要

Serializable と POF の比較例

シリアライズ時間(ms)

デシリアライズ時間 (ms)

サイズ (byte)

Java Serializable 2360 10078 867

POF 547 1234 186

Coherence を使う場合、 POF を用いるのが推奨されている

java.util.Serializable を実装する方法 hashCode/equals を実装すること

Eclipse で Alt+Shift+S -> H デフォルトコンストラクタを作成するこ

POF を実装する方法 com.tangosol.io.pof.PortableObject を実装するjava.util.Serializable の条件に加えてreadExternal(PofReader),

writeExternal(PofWriter) を実装 @Override public void readExternal(PofReader reader) throws IOException { id = reader.readInt(0); surname = reader.readString(1); firstname = reader.readString(2); address = reader.readString(3); age = reader.readInt(4); gender = reader.readString(5); }

@Override public void writeExternal(PofWriter writer) throws IOException { writer.writeInt(0, id); writer.writeString(1, surname); writer.writeString(2, firstname); writer.writeString(3, address); writer.writeInt(4, age); writer.writeString(5, gender); }

POF 構成ファイルの設定 間に合いませんでした m(_ _)m

口頭で説明します

検索集計処理 間に合いませんでした m(_ _)m

口頭で説明します

CohQL

間に合いませんでした m(_ _)m口頭で説明します

次回予定 キャッシュの構造 ( キャッシュトポロジ、

バッキングマップ ) キャッシュデータの更新検知 エントリプロセッサによる複数キャッシュ

データ同時並行処理 複合キーとデータアフィニティ インボケーションサービスによる非同期処

理 Spring連携 永続化層の実装 (JPA/SpringJDBC連携 )

参考書籍 IT アーキテクト Vol.22 Oracle Coherence入門 ( アスキー・メ

ディアワークス )

top related