Slide 1

Slide 1 text

Red Hatが ひっそりと開発している OSSデータストア

Slide 2

Slide 2 text

Source: Insert source data here Insert source data here Insert source data here OPTIONAL SECTION MARKER OR TITLE 伊藤ちひろ (Chihiro Ito) OpenJDK Committer (JFR, SA) Java Platform Advocate @ Red Hat Twitter : @chiroito 自己紹介 Profile 2

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

目次 ● 概要 ● 性能 ● 可用性 ● 統合 ● その他 ● 適用例 ● リンク

Slide 5

Slide 5 text

概要

Slide 6

Slide 6 text

データグリッドとは アプリケーションとインフラストラクチャの両面でさまざまなメリット ● KVSのようにデータを格納 ● さまざまなデータ型を扱える ● データの寿命を設定 ● データの変更を検出 ● データのある場所で分散処理 ● 他のデータストアとの連携が容易 ● よく使うデータをアプリ側で自動的にキャッシュ ● キーを使用しない問い合わせによるアクセス ● さまざまな言語をサポート ● 全ノードに対して読み書き ● 要件に合わせてスケールアウト(インも) ● 要件に合わせたデプロイ戦略 ● データを自動で複製・分散 ● リージョンを跨いだ構成 ● 全ての経路の暗号化 ● クラウドやコンテナだけではなくオンプレでも稼働 ● さまざまなデファクトと統合 ● 充実した運用ツール群 アプリケーション視点 インフラストラクチャ視点

Slide 7

Slide 7 text

よく使われる用途 データグリッドは世界中の多くの業界で稼働中 松井証券株式会社 [Red Hat JBoss Data Gridで次世代トレーディング環境を実現] アプリケーション Data Grid データグリッドは ● IoT ● モバイルアプリケーション ● 広告やゲームなどのユーザ情報 ● セッション情報のような一時的なデータ ● ECサイトのカート ● 負荷の高いアプリケーション処理のキャッシュ などの用途で、通信事業者や金融機関をはじめ さまざまな企業で使用されています。

Slide 8

Slide 8 text

Put : データの格納は、キー(Key)に値(Value)を関連付けて格納 Get : データの取得は、キー(Key)に関連付けられている値(Value)を取得 キーも値も複数の要素から構成される型を構成可能。キーと値の組み合わせをMap同様にエントリと呼ぶ データの格納先となるRDBMSでの表のようなデータの集まりを、データグリットではキャッシュと呼ぶ データは Key-Value-Store と同じようにキーと値として格納 データの格納方法 Javadoc : Interface Cache Hot Rod Java クライアントガイド : RemoteCache API Data Grid 開発者ガイド : キャッシュ API Key Value tanaka { name: “田中”, mail : “tanaka@...” } suzuki { name: “鈴木”, mail : “suzuki@...” } sato { name: “佐藤”, mail : “sato@...” } … … put key : tanaka value : {name : “田中”, mail : “tanaka@...” } get key : tanaka {name : “田中”, mail : “tanaka@...” } アプリケーション ユーザ情報キャッシュ

Slide 9

Slide 9 text

Javaオブジェクトの中で コレクションを使用し、 1つのキーに対して複数の オブジェクトを格納可能 扱えるデータ型 単純な文字列から複雑なオブジェクトまでさまざまなデータ型をサポート キャッシュのエンコードとマーシャリング : Data Grid キャッシュのエンコードと Java オブジェクトのマーシャリング 任意のテキスト・数値・バイナ リをサポート 格納するデータを定義したクラ スにアノテーションを付与する ことでprotobuf形式として格 納。HTTPセッションも格納可 能 Javaオブジェクト コレクション スカラ型 XMLやJSONドキュメントなど 複雑な構造を文字列として格 納 ドキュメント型 Value

Slide 10

Slide 10 text

性能面で大きなメリット 性能

Slide 11

Slide 11 text

データグリッドのクラスタ 全てのノードが読み書き可能 Data Grid キャッシュの設定 : Data Grid キャッシュ Data Grid キャッシュの設定 : クラスター化されたキャッシュ 読み書き可能 ノード1 読み書き可能 ノードN 読み書き可能 ノード3 読み書き可能 ノード2 クラスタ 複数のノードでクラスタを構成し、全てのノードが読み書き可能 書き込みが唯一できるプライマリノードや、読み取り専用のレプリカノードという考えはない

Slide 12

Slide 12 text

データグリッドのクラスタ サービスを停止することなく性能や可用性の需要に合わせた伸縮性の高いリソース展開 ※複製数が1以上でも、1ノードではネットワークを介したデータの複製が行われないため、性能を検証する場合は複製数+1プロセス以上を異なる物理サーバに載せることを推奨します。 デプロイメントのプランニングおよびサイジングガイド 2*Nノード 2ノード 2倍の処理能力 2倍の格納量 4ノード N倍の処理能力 N倍の格納量 複製数=1では2ノードが性能の 基準。割り当てたCPUが処理能力とな り、割り当てたメモリによるデータが格 納量となる※

Slide 13

Slide 13 text

データの配置 データを自動で配置し、偏りの調整は不要 ※正確にはキーの値から各ノードが持つセグメントが算出されます Hot Rod Java クライアントガイド : クライアントのインテリジェンス Data Grid キャッシュの設定 : クラスター化されたキャッシュ Data Grid キャッシュの設定 : キャッシュモード A データグリッドのクライアントは、キーから格納先となるノードをハッシュ計算により算出※ 負荷を分散するためにシャーディングなどで、開発者がデータの配置を意識する必要はない B C D クラスタ

Slide 14

Slide 14 text

分散並列処理 3つの方式により任意の処理をノード上で実行し、データの移動を伴わない高速な処理が可能※ ※組み込みモードとクライアント/サーバモードでできる事が異なるため注意が必要です。 Data Grid Server ガイド : 第13章 Data Grid Server でのスクリプトおよびタスクの実行 1つ以上のキーの集合に 対し、それらのキーを持つノー ド上で処理を実行 キーを意識 データに対する処理は 集計・分析処理などReduce処 理も実行可能 Map Reduce データを使わず、全てのノード または任意のノード上で処理 を実行 データを意識しない 全てのデータに対して処理を 実行。読み込んだデータをフィ ルタリングし、該当するデータ のみを処理可能 全てのデータ Key Key Data Data Data 方式1 方式2 方式3

Slide 15

Slide 15 text

アプリケーションを高速化 アプリケーションの設定によるデータアクセスの処理量の向上とレスポンス時間を短縮 Hot Rod Java クライアントガイド : 3.6. ニアキャッシュ 普通のアプリ 高速化済みの アプリ Data Grid 読み込みの多い処理ではデータグリッドへのネットワークアク セスが減るため遅延が低下。それにより処理量を向上し、ア プリケーションの処理効率の向上によりコストを最適化。 仕組み:データグリッドが保持するデータのうちアプリケーショ ンが最近使用したデータをアプリケーションが保持。同データ へのアクセスはデータグリッドへ通信せずに使用可能。 このデータ集合の有無はアプリケーションの設定のみで完結 し、そのデータの追加・排除は自動的に行われ、アプリケー ションコードの変更やサーバの変更は不要

Slide 16

Slide 16 text

可用性

Slide 17

Slide 17 text

データストアとの連携 データがキャッシュになければデータストアから自動取得とデータ更新後はすぐに反映 デプロイメントのプランニングおよびサイジングガイド : インラインキャッシュ デプロイメントのプランニングおよびサイジングガイド : サイドキャッシュ 全てのデータをキャッシュする のではなく、データストアの中 でよく使われるデータだけを キャッシュすることで、性能とコ ストを最適化 使うものだけをキャッシュ データストアの障害発生時に、 キャッシュにあるよく使われる データだけで システムを継続 障害時も稼働可能 可用性の高いキャッシュ上の データを更新すると、データス トアまで同期/非同期で反映 更新データを反映 キャッシュにデータがあれば キャッシュから取得、なければ データストアから取得という実 装は不要 データ有無で処理分け不要 よく使うデータ 全データ 自動取得 自動反映 更新 障害 アクセス 可能 連携

Slide 18

Slide 18 text

キャッシュサイズの自動制御 アクセスされないデータを自動的に排除することで性能とコストを最適化 Data Grid キャッシュの設定 : エビクションと有効期限 Data Grid キャッシュの設定 : パッシベーション 排除データを永続化 排除されるデータをRDBMSや ストレージなど他のデータスト アへ格納することで性能やコ ストを最適化 前回のアクセスから一定期間 経過した最近使われていない データを自動的にキャッシュか ら排除し、キャッシュのサイズ を一定に保ち、性能とコストを 最適化 データに寿命を設定すること で、データのライフサイクルを 任意に管理 使われないデータを排除 データを自動削除 キャッシュ (3つまで) キャッシュ (10分後に削除) データの最大個数や使用メモ リの最大量を設定することで キャッシュがヒープを使い切る ことを抑制 メモリ枯渇を抑制

Slide 19

Slide 19 text

動作環境とサポート クラウド(PaaS/IaaS)やコンテナに限らず、どこでも構築・稼働※ ※動作させる環境によってはCommercially Reasonable Supportになります。Red Hatによるサポートはこちらをごらん下さい:https://access.redhat.com/ja/articles/6140932 デプロイメントのプランニングおよびサイジングガイド : 1.1. Data Grid デプロイメントモデル 各社クラウドベンダーが提供し ているOpenShift Container PlatformとIaaS(仮想マシンを 参照)を サポート。他のサービスは限 定的なサポート※ クラウド 仮想サーバで動作するRHEL およびWindowsとOpenJDK およびOracle JDKの組み合 わせをサポート 仮想マシン 物理サーバで動作するRHEL およびWindowsとOpenJDK およびOracle JDKの組み合 わせをサポート オンプレミス PodmanやOpenShift Container Platformをサポー ト。他のコンテナプラットフォー ム上は限定的なサポート※ コンテナ

Slide 20

Slide 20 text

データグリッドのクラスタ 性能と可用性の要件に合わせ、柔軟にノードを配置 デプロイメントのプランニングおよびサイジングガイド : 1.1. Data Grid デプロイメントモデル Data Grid キャッシュの設定 : サーバーヒント 異なるAZで異なるラック上に配置 単一ラック上に配置 ネットワーク速度は速い AZが単一障害点 同一AZ内で異なるラック上に配置 ネットワーク速度は十分な速度 サーバの観点では単一障害点がない ネットワーク速度は最速 ラックが単一障害点 AZ2@東京 Rack Rack AZ1@東京 Rack Rack AZ Rack Rack Rack Rack AZ Rack クラスタ クラスタ クラスタ

Slide 21

Slide 21 text

クラスタ データの冗長化 アプリケーションが意識することなくデータを自動的に複製 Data Grid キャッシュの設定 : クラスター化されたキャッシュ Data Grid キャッシュの設定 : キャッシュモード Data Grid キャッシュの設定 : サーバーヒント A クライアントがデータを書き込み A データグリッドが他のノードへ複製 クライアントがデータを書き込むと、データグリッドはそのデー タを他のノードへ複製。 同期複製では、複製後にクライアントへ処理を返す。 非同期複製は最初のノードにデータを書いた後に、すぐにク ライアントへ処理を返し、それとは非同期に複製 複製先の優先順位は異なるサイト、異なるラック、異なるマシ ンおよびノードの順 複製の数や同期・非同期で複製するかを変更可能

Slide 22

Slide 22 text

DGは良く使用する一部の データのみを保持し、残りの データはDGがアクセスできる ブロックストレージへ格納。 NFS/SMBは不可※ データの保持の仕方 可用性や性能、コストの要求に合わせて柔軟にデータを保持 ※ファイルシステムに必要とする機能の一部が実装されていないため、使用できません。 Data Grid キャッシュの設定 : JVM メモリー使用量の設定 Data Grid キャッシュの設定 : 6.8. ファイルベースのキャッシュストア Data Grid キャッシュの設定 : 6.10. SQL キャッシュストア デプロイメントのプランニングおよびサイジングガイド : インラインキャッシュ Data Grid キャッシュの設定 : Configuring persistent storage データはJavaオブジェクト同様 にJavaのヒープに格納 Javaヒープ ファイル連携 DGは良く使用する一部の データのみを保持し、残りの データはRDBMSへ格納 DB連携 データはJavaのヒープ外のメ モリに格納され、データ量の増 加はGCに無影響。データ管 理用のメタデータはヒープを使 用。 オフヒープ ノード内部の保 持方法 データ全体の保 持方法

Slide 23

Slide 23 text

グローバルに展開されたキャッシュ 地理的に分散したデータセンタや異なるクラウドプロバイダで 動作するクラスタ間でデータを複製。全てのリージョンでデー タを読み書き可能。これにより、可用性が大いに向上し、遠隔 地のユーザは最寄りのリージョンへアクセスできるため、ユー ザが感じる遅延が低下 リージョンA リージョンB リージョンC 異なるリージョンだけではなく、別のクラウドプロバイダにも展開 Data Grid クロスサイトレプリケーション : Data Grid クラスター間のデータのバックアップ

Slide 24

Slide 24 text

統合

Slide 25

Slide 25 text

統合 さまざまなデファクトスタンダードとの統合 JBoss EAP 開発ガイド : リモート Red Hat Data Grid での Web セッションデータの格納 Data Grid 開発者ガイド : Red Hat JBoss Web Server から Red Hat Data Grid への HTTP セッションの外部化 Data Grid Spring Boot スターター : SpringBoot プロジェクトでの Data Grid の使用 SpringでのData Gridの使用 : Spring アプリケーションにデータグリッドを追加する Data Grid Operator ガイド : OpenShift での Data Grid クラスターの作成 Monitoring Data Grid services Quarkus, JBoss EAP, Wildfly, JWS, Tomcat, Springと統合。 一部では設定のみでJavaの HTTPセッションを格納可能 Java フレームワーク クラスタの状態やメトリクスを PrometheusやGrafanaで監 視し、可視化するための機能 を提供 Prometheus & Grafana OperatorがCapability Level 4 で提供、基本的なインストー ルから、シームレスなアップグ レードなど全てのライフサイク ルを自動で制御され、分析に 必要な機能も提供 Kubernetes インストールやキャッシュを作成 を自動化。現在は技術プレ ビュー Ansible

Slide 26

Slide 26 text

管理UI さまざまな方法によってクラスタやキャッシュの構成を管理 Data Grid REST API : Data Grid RESTAPI を設定して操作する Using the Data Grid Command Line Interface : Data Grid CLI を使用してリモートキャッシュにアクセスして管理する Data Grid Server ガイド : 12.2. Data Grid コンソールを使用したキャッシュの作成 Web Console CLI お好みのOSのコマンドラインツールから コマンドラインインターフェースを通じて データグリッドを管理 お好みのブラウザからWebコンソールを 通じてデータグリッドを管理 REST API お好みのREST APIクライアントやアプリ ケーションからREST APIを通じてデータ グリッドを管理

Slide 27

Slide 27 text

クライアントライブラリ さまざまな言語で性能を最大限に発揮するライブラリを提供 ※Infinispanがクライアントライブラリを提供していますが、Red Hat Data Gridのサブスクリプションのサポート範囲外です Java Javascript Ruby※ Python※ .NET C++

Slide 28

Slide 28 text

その他

Slide 29

Slide 29 text

データ変更の検出 キャッシュ単位でデータの変更を検出して、任意の処理を実行可能※ Data Grid 開発者ガイド : リスナーおよび通知 任意の処理を実行 通知を受けたアプリケーションは、 リアルタイムな集計や分析など任意の処 理を実行 データ変更の配信 Kafkaなどのキューへデータを連携するこ とで様々な処理へデータ変更を配信 様々な変更を検出 作成、更新、削除、有効期限切れなどの イベントを検知 検知 変更 通知 アプリ 通知 キュー アプリ

Slide 30

Slide 30 text

問い合わせと索引 キーによるアクセスではなく、SQLに似た問い合わせ言語によってデータを取得 Data Grid キャッシュのクエリー : Data Grid キャッシュ内のデータをクエリーする 統計情報 使われた索引の確認や処理 時間などの情報を提供。 これによりユーザは性能を チューニング可能 JPQLのサブセットである言語 を使用。ページ対応やパラ メータ、全文検索も対応 アノテーションやAPIを 用いて設定、格納先は ファイルかヒープを選択 問い合わせ 索引 問い合わせの結果を監視、結 果に変更があると通知して任 意の処理を実行可能 結果の変更通知

Slide 31

Slide 31 text

セキュリティ 全ての経路の暗号化と、アクセス制御 Hot Rod Java クライアントガイド : Hot Rod クライアント暗号化の設定 Data Grid セキュリティーガイド : Data Grid セキュリティーの有効化および設定 Setting up cross-site replication : Securing cross-site connections Data Grid Server ガイド : クラスタートランスポートの暗号化 Data Grid Server ガイド : TLS/SSL 暗号化の設定 ロールベースアクセス制御 キャシュアクセスやリソースと のやりとりに必要な権限を持 つユーザのみに制限 SSL/TLS暗号化を実施し、 Hot Rodクライアントに証明書 を提示して、信頼と安全な接 続を確立 サーバ感暗号化同様 SSL/TLS証明書を交換して暗 号化 クライアント暗号化 リージョン間暗号化 SSL/TLSによる通信の暗号 化と証明書認証を用いたクラ スタを構築 サーバ間暗号化

Slide 32

Slide 32 text

料金 1つの指標だけのシンプルな料金体系によるサブスクリプション 1コア当たりの金額はRed Hatの担当営業へご連絡下さい。 Red Hat Data Gridのサブスクリプションは、より包括的なRed Hat Application Foundationsというサブスクリプションに含まれています。 ※構成によってはクラウドプロバイダがリージョン間の通信費などを請求するかもしれません。 稼働しているサーバのCPUコ ア数もしくはコンテナに割り当 てているCPU数の和で料金が 決まります。 高クロック数のCPUを推奨 CPUコア数 データ転送量が増えても 料金は変化しない※ データ転送量 リクエスト数が増えても 料金は変化しない リクエスト数 メモリサイズの大小で料金は 変わりません。1つのCPU当 たりに大きなメモリを推奨 メモリサイズ

Slide 33

Slide 33 text

適応例

Slide 34

Slide 34 text

高度な適応例 データグリッドに対応済みアプリケーションと未対応アプリケーションの共存 CDC 対応してない アプリ 対応したアプリ 反映アプリ 1つのDBは複数のアプリケーションから利用されることがあり ます。その場合、データグリッド化は複数のアプリケーションを 同時に変更する必要があります。しかし、それは困難です。そ のため、複数のアプリケーションがデータグリッドとDBをそれ ぞれ更新する期間が生まれます。連携機能によってキャッ シュ上のデータの変更はDBに反映されます。しかし、DB上の データを更新しても、そのデータが既にキャッシュされている 場合にはキャッシュに反映されません。この問題は、DB上の データ変更をキャッシュへ橋渡しをすることで解決します。反 映するアプリではDBの変更を反映することに加え、同時に更 新されていた場合の適用ルールを実装します。 連携

Slide 35

Slide 35 text

高度な適応例 複数のリージョンで高速かつ可用性の高い環境構築 複数のリージョンにアプリケーションを展開するとエンドユーザは物理的に近いリージョンにアクセスできます。これに より、通信の遅延を大幅に削減し、良いユーザ体験を得られます。 データグリッドは、各リージョンに展開しリージョン間でデータを複製できます。これにより、ユーザが移動した場合や、 リージョンに障害が発生した場合にも別リージョンで対応可能になり、可用性が向上します。 東京 大阪 データを同期 アプリ アプリ 東日本から アクセス 西日本からア クセス

Slide 36

Slide 36 text

リンク

Slide 37

Slide 37 text

参考資料 1 Interface Cache 3.1. キャッシュ API 3.3. リスナーおよび通知 第14章 Red Hat JBoss Web Server から Red Hat Data Grid への HTTP セッションの外部化 Data Grid 開発者ガイド Data Grid キャッシュのエンコードと Java オブジェクトのマー シャリング キャッシュのエンコードとマーシャリング 1.2. クライアントのインテリジェンス 3.4. Hot Rod クライアントの暗号化の設定 3.6. ニアキャッシュ 4.1. RemoteCache API Hot Rod Java クライアントガイド Javadoc Data Grid セキュリティーの有効化および設定 Securing cross-site connections Setting up cross-site replication Data Grid セキュリティーガイド

Slide 38

Slide 38 text

参考資料 2 Data Grid のデプロイメントのプランニングおよびサイジング 1.1. Data Grid デプロイメントモデル 1.2. インラインキャッシュ 1.3. サイドキャッシュ デプロイメントのプランニングおよびサイジン グガイド 第6章 TLS/SSL 暗号化の設定 11.8. クラスタートランスポートの暗号化 12.2. Data Grid コンソールを使用したキャッシュの作成 第13章 Data Grid Server でのスクリプトおよびタスクの実行 Data Grid Server ガイド 第1章 Data Grid キャッシュ 1.3. キャッシュモード 第2章 クラスター化されたキャッシュ 2.2.5. サーバーヒント 第5章 JVM メモリー使用量の設定 5.2. エビクションと有効期限 第6章 Configuring persistent storage 6.1. パッシベーション 6.8. ファイルベースのキャッシュストア 6.10. SQL キャッシュストア Data Grid キャッシュの設定

Slide 39

Slide 39 text

参考資料 3 6.7.1. リモート Red Hat Data Grid での Web セッションデータ の格納 SpringBoot プロジェクトでの Data Grid の使用 Data Grid Spring Boot スターター OpenShift での Data Grid クラスターの作成 Data Grid Operator ガイド Data Grid クラスター間のデータのバックアップ Data Grid クロスサイトレプリケーション JBoss EAP 開発ガイド Spring アプリケーションにデータグリッドを追加する Spring での Data Grid の使用 Monitoring Data Grid services Monitoring Data Grid services Data Grid RESTAPI を設定して操作する Data Grid REST API Data Grid CLI を使用してリモートキャッシュにアクセスして管 理する Using the Data Grid Command Line Interface Data Grid キャッシュ内のデータをクエリーする Data Grid キャッシュのクエリー Data Grid セキュリティーの有効化および設定 Data Grid セキュリティーガイド