SlideShare a Scribd company logo
Oracle Coherence勉強会2011/02/22 @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 WebSphereeXtremeScale (IBM)Gemstone Gemfire (SpringSource)EhCache (Teracotta)CoherenceデータグリッドWEBサービスデータベース
分散キャッシュ複数のJVMでクラスタ形成データを分散して配置透過的なデータアクセスクライアントBCAJVMJVMJVMABC
Map型インタフェースjava.util.Mapを継承したkey/valueインタフェースNamedCachecache = CacheFactory.getCache("person");Person p1 = (Person) cache.get(key1);cache.put(key2, p2);
データグリッドを用いる場合の基本的なアーキテクチャ従来型データグリッドクライアントクライアントAPサーバAPサーバAPサーバAPサーバ個別データ個別データ個別データ個別データ共通データ共通データキャッシュサーバキャッシュサーバキャッシュサーバ共通データデータベースデータベース永続化データ永続化データ
基本的な適用パターン例大量のマスタデータのキャッシュする大量の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キャッシュノード2キャッシュノード3アプリケーションアプリケーションアプリケーションABABABCDCDCD
レプリケーションキャッシュの書き込み書き込みは他のノードへレプリケートキャッシュノード1キャッシュノード2キャッシュノード3アプリケーションアプリケーションアプリケーションABABABCDCDCD
パーティションキャッシュ各ノードに分散して保存通常アプリケーションと別プロセス内にキャッシュ領域を作成する読み込みはあるノードからネットワーク経由で行う書き込みはプライマリデータとバックアップデータをそれぞれ別のノードにネットワーク経由で行うバックアップ数は変更可能であるが1が推奨値
パーティションキャッシュの読み込み読み取りは1往復のネットワークアクセスアプリケーションアプリケーションキャッシュノード1キャッシュノード2キャッシュノード3PPPACDBBACDBBBP…プライマリデータ、B…バックアップデータ
パーティションキャッシュの書き込み書き込みは2往復のネットワークアクセスアプリケーションアプリケーションキャッシュノード1キャッシュノード2キャッシュノード3PPPACDBBACDBBBP…プライマリデータ、B…バックアップデータ
パーティションキャッシュのリカバリアプリケーションアプリケーションキャッシュノード1キャッシュノード2キャッシュノード3PPPACDBBACDBBBP…プライマリデータ、B…バックアップデータ
パーティションキャッシュのリカバリアプリケーションアプリケーションキャッシュノード2キャッシュノード3PPCBBADBBP…プライマリデータ、B…バックアップデータ
パーティションキャッシュのリカバリアプリケーションアプリケーションキャッシュノード2キャッシュノード3PPバックアップがプライマリに昇格CBADBADBBP…プライマリデータ、B…バックアップデータ
パーティションキャッシュのリカバリアプリケーションアプリケーションキャッシュノード2キャッシュノード3PPバックアップがプライマリに昇格CBADBBBP…プライマリデータ、B…バックアップデータ
パーティションキャッシュのリカバリアプリケーションアプリケーションキャッシュノード2キャッシュノード3PPプライマリからバックアップを作成CBADCBDABBP…プライマリデータ、B…バックアップデータ
パーティションキャッシュのリカバリアプリケーションアプリケーションキャッシュノード2キャッシュノード3PPCBADCBDABBP…プライマリデータ、B…バックアップデータ
パーティションキャッシュのノード追加アプリケーションアプリケーションキャッシュノード1キャッシュノード2キャッシュノード3キャッシュノード4PPPPACDBBACDBBBBP…プライマリデータ、B…バックアップデータ
パーティションキャッシュのノード追加アプリケーションアプリケーション再パーティショニングキャッシュノード1キャッシュノード2キャッシュノード3キャッシュノード4PPPPDACDBBACDBBBBBP…プライマリデータ、B…バックアップデータ
パーティションキャッシュのノード追加キャッシュ容量を追加できるアプリケーションアプリケーションキャッシュノード1キャッシュノード2キャッシュノード3キャッシュノード4PPPPDACBACDBBBBBP…プライマリデータ、B…バックアップデータ
レプリケーションキャッシュとパーティションキャッシュの比較
ハンズオンではパーティションキャッシュを使用します
ハンズオン
資材coherence-handsonフォルダでmvneclipse: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 testMap (test): put 1 OneMap (test): get 1OneMap (test): put 2 TwoMap (test): list1 = One2 = Two
Javaからデータグリッドにアクセス新規のNamedCacheを作成java.util.Mapを拡張しているので操作がわかりやすい作成したNamedCacheへオブジェy九とのputとget
簡単なサンプルpackagehandson.coherence.lab3; importcom.tangosol.net.CacheFactory;importcom.tangosol.net.NamedCache; publicclassMyFirstSample { publicstaticvoid main(String[] args) {NamedCachecache = 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の比較例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)を実装@OverridepublicvoidreadExternal(PofReaderreader) throwsIOException {id = reader.readInt(0);surname = reader.readString(1);firstname = reader.readString(2);address = reader.readString(3);age = reader.readInt(4);gender = reader.readString(5);    }@OverridepublicvoidwriteExternal(PofWriterwriter) throwsIOException {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.22Oracle Coherence入門(アスキー・メディアワークス)

More Related Content

PDF
KafkaとAWS Kinesisの比較
PPTX
トランザクションの設計と進化
PPTX
HBase and HDFS: Understanding FileSystem Usage in HBase
PDF
Oracle GoldenGateでの資料採取(トラブル時に採取すべき資料)
PDF
忙しい人の5分で分かるDocker 2017年春Ver
PDF
GoldenGateテクニカルセミナー2「Oracle GoldenGate 新機能情報」(2016/5/11)
PDF
Serverless時代のJavaについて
PPTX
java.lang.OutOfMemoryError #渋谷java
KafkaとAWS Kinesisの比較
トランザクションの設計と進化
HBase and HDFS: Understanding FileSystem Usage in HBase
Oracle GoldenGateでの資料採取(トラブル時に採取すべき資料)
忙しい人の5分で分かるDocker 2017年春Ver
GoldenGateテクニカルセミナー2「Oracle GoldenGate 新機能情報」(2016/5/11)
Serverless時代のJavaについて
java.lang.OutOfMemoryError #渋谷java

What's hot (20)

PPTX
Coherenceを利用するときに気をつけること #OracleCoherence
PDF
Oracle GoldenGate入門
PDF
20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...
PDF
Active Directory 侵害と推奨対策
PPTX
Metaspace
PDF
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
PDF
NetflixにおけるPresto/Spark活用事例
PDF
Oracle GoldenGate Veridata概要
PDF
【Oracle Cloud ウェビナー】WebLogic Serverのご紹介
PDF
PostgreSQLバックアップの基本
PPTX
Oracle Data Masking and Subsettingのご紹介
PPTX
Kafka vs Pulsar @KafkaMeetup_20180316
PDF
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
PDF
Yahoo! JAPANにおけるApache Cassandraへの取り組み
PDF
オラクルのHPC/GPUソリューションご紹介(2021/08版)
PDF
噛み砕いてKafka Streams #kafkajp
PDF
【旧版】Oracle Gen 2 Exadata Cloud@Customer:サービス概要のご紹介 [2021年12月版]
PDF
Kyoto Tycoon Guide in Japanese
Coherenceを利用するときに気をつけること #OracleCoherence
Oracle GoldenGate入門
20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...
Active Directory 侵害と推奨対策
Metaspace
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
NetflixにおけるPresto/Spark活用事例
Oracle GoldenGate Veridata概要
【Oracle Cloud ウェビナー】WebLogic Serverのご紹介
PostgreSQLバックアップの基本
Oracle Data Masking and Subsettingのご紹介
Kafka vs Pulsar @KafkaMeetup_20180316
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Yahoo! JAPANにおけるApache Cassandraへの取り組み
オラクルのHPC/GPUソリューションご紹介(2021/08版)
噛み砕いてKafka Streams #kafkajp
【旧版】Oracle Gen 2 Exadata Cloud@Customer:サービス概要のご紹介 [2021年12月版]
Kyoto Tycoon Guide in Japanese
Ad

Viewers also liked (9)

PPTX
絵で見てわかる 某分散データストア
PDF
[D35] インメモリーデータベース徹底比較 by Komori
PDF
Introduction of Oracle Database Architecture
PDF
Maven基礎
PDF
クロスサイトリクエストフォージェリ(CSRF)とその対策
PDF
Javaアプリケーションサーバ 構築・運用の勘所
PDF
Javaのログ出力: 道具と考え方
PDF
Cassandraとh baseの比較して入門するno sql
PDF
困らない程度のJDK入門
絵で見てわかる 某分散データストア
[D35] インメモリーデータベース徹底比較 by Komori
Introduction of Oracle Database Architecture
Maven基礎
クロスサイトリクエストフォージェリ(CSRF)とその対策
Javaアプリケーションサーバ 構築・運用の勘所
Javaのログ出力: 道具と考え方
Cassandraとh baseの比較して入門するno sql
困らない程度のJDK入門
Ad

More from Toshiaki Maki (20)

PDF
From Spring Boot 2.2 to Spring Boot 2.3 #jsug
PDF
Concourse x Spinnaker #concourse_tokyo
PDF
Serverless with Spring Cloud Function, Knative and riff #SpringOneTour #s1t
PDF
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1
PDF
Spring Boot Actuator 2.0 & Micrometer #jjug_ccc #ccc_a1
PDF
Spring Boot Actuator 2.0 & Micrometer
PDF
Open Service Broker APIとKubernetes Service Catalog #k8sjp
PDF
Spring Cloud Function & Project riff #jsug
PDF
Introduction to Spring WebFlux #jsug #sf_a1
PDF
BOSH / CF Deployment in modern ways #cf_tokyo
PDF
Why PCF is the best platform for Spring Boot
PDF
Zipkin Components #zipkin_jp
PPTX
マイクロサービスに必要な技術要素はすべてSpring Cloudにある #DO07
PDF
Spring Framework 5.0による Reactive Web Application #JavaDayTokyo
PDF
実例で学ぶ、明日から使えるSpring Boot Tips #jsug
PDF
Spring ❤️ Kotlin #jjug
PDF
Event Driven Microservices with Spring Cloud Stream #jjug_ccc #ccc_ab3
PDF
Managing your Docker image continuously with Concourse CI
PDF
Data Microservices with Spring Cloud Stream, Task, and Data Flow #jsug #spri...
PDF
Short Lived Tasks in Cloud Foundry #cfdtokyo
From Spring Boot 2.2 to Spring Boot 2.3 #jsug
Concourse x Spinnaker #concourse_tokyo
Serverless with Spring Cloud Function, Knative and riff #SpringOneTour #s1t
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1
Spring Boot Actuator 2.0 & Micrometer #jjug_ccc #ccc_a1
Spring Boot Actuator 2.0 & Micrometer
Open Service Broker APIとKubernetes Service Catalog #k8sjp
Spring Cloud Function & Project riff #jsug
Introduction to Spring WebFlux #jsug #sf_a1
BOSH / CF Deployment in modern ways #cf_tokyo
Why PCF is the best platform for Spring Boot
Zipkin Components #zipkin_jp
マイクロサービスに必要な技術要素はすべてSpring Cloudにある #DO07
Spring Framework 5.0による Reactive Web Application #JavaDayTokyo
実例で学ぶ、明日から使えるSpring Boot Tips #jsug
Spring ❤️ Kotlin #jjug
Event Driven Microservices with Spring Cloud Stream #jjug_ccc #ccc_ab3
Managing your Docker image continuously with Concourse CI
Data Microservices with Spring Cloud Stream, Task, and Data Flow #jsug #spri...
Short Lived Tasks in Cloud Foundry #cfdtokyo

Oracle Coherence勉強会