Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

Chihiro Ito
January 21, 2023

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

Chihiro Ito

January 21, 2023
Tweet

More Decks by Chihiro Ito

Other Decks in Technology

Transcript

  1. 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
  2. 目次 • 概要 • 性能 • 可用性 • 統合 •

    その他 • 適用例 • リンク
  3. データグリッドとは アプリケーションとインフラストラクチャの両面でさまざまなメリット • KVSのようにデータを格納 • さまざまなデータ型を扱える • データの寿命を設定 • データの変更を検出

    • データのある場所で分散処理 • 他のデータストアとの連携が容易 • よく使うデータをアプリ側で自動的にキャッシュ • キーを使用しない問い合わせによるアクセス • さまざまな言語をサポート • 全ノードに対して読み書き • 要件に合わせてスケールアウト(インも) • 要件に合わせたデプロイ戦略 • データを自動で複製・分散 • リージョンを跨いだ構成 • 全ての経路の暗号化 • クラウドやコンテナだけではなくオンプレでも稼働 • さまざまなデファクトと統合 • 充実した運用ツール群 アプリケーション視点 インフラストラクチャ視点
  4. よく使われる用途 データグリッドは世界中の多くの業界で稼働中 松井証券株式会社 [Red Hat JBoss Data Gridで次世代トレーディング環境を実現] アプリケーション Data

    Grid データグリッドは • IoT • モバイルアプリケーション • 広告やゲームなどのユーザ情報 • セッション情報のような一時的なデータ • ECサイトのカート • 負荷の高いアプリケーション処理のキャッシュ などの用途で、通信事業者や金融機関をはじめ さまざまな企業で使用されています。
  5. Put : データの格納は、キー(Key)に値(Value)を関連付けて格納 Get : データの取得は、キー(Key)に関連付けられている値(Value)を取得 キーも値も複数の要素から構成される型を構成可能。キーと値の組み合わせをMap同様にエントリと呼ぶ データの格納先となるRDBMSでの表のようなデータの集まりを、データグリットではキャッシュと呼ぶ データは Key-Value-Store

    と同じようにキーと値として格納 データの格納方法 Javadoc : Interface Cache<K, V> 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@...” } アプリケーション ユーザ情報キャッシュ
  6. Javaオブジェクトの中で コレクションを使用し、 1つのキーに対して複数の オブジェクトを格納可能 扱えるデータ型 単純な文字列から複雑なオブジェクトまでさまざまなデータ型をサポート キャッシュのエンコードとマーシャリング : Data Grid

    キャッシュのエンコードと Java オブジェクトのマーシャリング 任意のテキスト・数値・バイナ リをサポート 格納するデータを定義したクラ スにアノテーションを付与する ことでprotobuf形式として格 納。HTTPセッションも格納可 能 Javaオブジェクト コレクション スカラ型 XMLやJSONドキュメントなど 複雑な構造を文字列として格 納 ドキュメント型 Value
  7. データグリッドのクラスタ 全てのノードが読み書き可能 Data Grid キャッシュの設定 : Data Grid キャッシュ Data

    Grid キャッシュの設定 : クラスター化されたキャッシュ 読み書き可能 ノード1 読み書き可能 ノードN 読み書き可能 ノード3 読み書き可能 ノード2 クラスタ 複数のノードでクラスタを構成し、全てのノードが読み書き可能 書き込みが唯一できるプライマリノードや、読み取り専用のレプリカノードという考えはない
  8. データの配置 データを自動で配置し、偏りの調整は不要 ※正確にはキーの値から各ノードが持つセグメントが算出されます Hot Rod Java クライアントガイド : クライアントのインテリジェンス Data

    Grid キャッシュの設定 : クラスター化されたキャッシュ Data Grid キャッシュの設定 : キャッシュモード A データグリッドのクライアントは、キーから格納先となるノードをハッシュ計算により算出※ 負荷を分散するためにシャーディングなどで、開発者がデータの配置を意識する必要はない B C D クラスタ
  9. 分散並列処理 3つの方式により任意の処理をノード上で実行し、データの移動を伴わない高速な処理が可能※ ※組み込みモードとクライアント/サーバモードでできる事が異なるため注意が必要です。 Data Grid Server ガイド : 第13章 Data

    Grid Server でのスクリプトおよびタスクの実行 1つ以上のキーの集合に 対し、それらのキーを持つノー ド上で処理を実行 キーを意識 データに対する処理は 集計・分析処理などReduce処 理も実行可能 Map Reduce データを使わず、全てのノード または任意のノード上で処理 を実行 データを意識しない 全てのデータに対して処理を 実行。読み込んだデータをフィ ルタリングし、該当するデータ のみを処理可能 全てのデータ Key Key Data Data Data 方式1 方式2 方式3
  10. アプリケーションを高速化 アプリケーションの設定によるデータアクセスの処理量の向上とレスポンス時間を短縮 Hot Rod Java クライアントガイド : 3.6. ニアキャッシュ 普通のアプリ

    高速化済みの アプリ Data Grid 読み込みの多い処理ではデータグリッドへのネットワークアク セスが減るため遅延が低下。それにより処理量を向上し、ア プリケーションの処理効率の向上によりコストを最適化。 仕組み:データグリッドが保持するデータのうちアプリケーショ ンが最近使用したデータをアプリケーションが保持。同データ へのアクセスはデータグリッドへ通信せずに使用可能。 このデータ集合の有無はアプリケーションの設定のみで完結 し、そのデータの追加・排除は自動的に行われ、アプリケー ションコードの変更やサーバの変更は不要
  11. データストアとの連携 データがキャッシュになければデータストアから自動取得とデータ更新後はすぐに反映 デプロイメントのプランニングおよびサイジングガイド : インラインキャッシュ デプロイメントのプランニングおよびサイジングガイド : サイドキャッシュ 全てのデータをキャッシュする のではなく、データストアの中

    でよく使われるデータだけを キャッシュすることで、性能とコ ストを最適化 使うものだけをキャッシュ データストアの障害発生時に、 キャッシュにあるよく使われる データだけで システムを継続 障害時も稼働可能 可用性の高いキャッシュ上の データを更新すると、データス トアまで同期/非同期で反映 更新データを反映 キャッシュにデータがあれば キャッシュから取得、なければ データストアから取得という実 装は不要 データ有無で処理分け不要 よく使うデータ 全データ 自動取得 自動反映 更新 障害 アクセス 可能 連携
  12. キャッシュサイズの自動制御 アクセスされないデータを自動的に排除することで性能とコストを最適化 Data Grid キャッシュの設定 : エビクションと有効期限 Data Grid キャッシュの設定

    : パッシベーション 排除データを永続化 排除されるデータをRDBMSや ストレージなど他のデータスト アへ格納することで性能やコ ストを最適化 前回のアクセスから一定期間 経過した最近使われていない データを自動的にキャッシュか ら排除し、キャッシュのサイズ を一定に保ち、性能とコストを 最適化 データに寿命を設定すること で、データのライフサイクルを 任意に管理 使われないデータを排除 データを自動削除 キャッシュ (3つまで) キャッシュ (10分後に削除) データの最大個数や使用メモ リの最大量を設定することで キャッシュがヒープを使い切る ことを抑制 メモリ枯渇を抑制
  13. 動作環境とサポート クラウド(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をサポー ト。他のコンテナプラットフォー ム上は限定的なサポート※ コンテナ
  14. データグリッドのクラスタ 性能と可用性の要件に合わせ、柔軟にノードを配置 デプロイメントのプランニングおよびサイジングガイド : 1.1. Data Grid デプロイメントモデル Data Grid

    キャッシュの設定 : サーバーヒント 異なるAZで異なるラック上に配置 単一ラック上に配置 ネットワーク速度は速い AZが単一障害点 同一AZ内で異なるラック上に配置 ネットワーク速度は十分な速度 サーバの観点では単一障害点がない ネットワーク速度は最速 ラックが単一障害点 AZ2@東京 Rack Rack AZ1@東京 Rack Rack AZ Rack Rack Rack Rack AZ Rack クラスタ クラスタ クラスタ
  15. クラスタ データの冗長化 アプリケーションが意識することなくデータを自動的に複製 Data Grid キャッシュの設定 : クラスター化されたキャッシュ Data Grid

    キャッシュの設定 : キャッシュモード Data Grid キャッシュの設定 : サーバーヒント A クライアントがデータを書き込み A データグリッドが他のノードへ複製 クライアントがデータを書き込むと、データグリッドはそのデー タを他のノードへ複製。 同期複製では、複製後にクライアントへ処理を返す。 非同期複製は最初のノードにデータを書いた後に、すぐにク ライアントへ処理を返し、それとは非同期に複製 複製先の優先順位は異なるサイト、異なるラック、異なるマシ ンおよびノードの順 複製の数や同期・非同期で複製するかを変更可能
  16. 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に無影響。データ管 理用のメタデータはヒープを使 用。 オフヒープ ノード内部の保 持方法 データ全体の保 持方法
  17. 統合 さまざまなデファクトスタンダードとの統合 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
  18. 管理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を通じてデータ グリッドを管理
  19. データ変更の検出 キャッシュ単位でデータの変更を検出して、任意の処理を実行可能※ Data Grid 開発者ガイド : リスナーおよび通知 任意の処理を実行 通知を受けたアプリケーションは、 リアルタイムな集計や分析など任意の処

    理を実行 データ変更の配信 Kafkaなどのキューへデータを連携するこ とで様々な処理へデータ変更を配信 様々な変更を検出 作成、更新、削除、有効期限切れなどの イベントを検知 検知 変更 通知 アプリ 通知 キュー アプリ
  20. 問い合わせと索引 キーによるアクセスではなく、SQLに似た問い合わせ言語によってデータを取得 Data Grid キャッシュのクエリー : Data Grid キャッシュ内のデータをクエリーする 統計情報

    使われた索引の確認や処理 時間などの情報を提供。 これによりユーザは性能を チューニング可能 JPQLのサブセットである言語 を使用。ページ対応やパラ メータ、全文検索も対応 アノテーションやAPIを 用いて設定、格納先は ファイルかヒープを選択 問い合わせ 索引 問い合わせの結果を監視、結 果に変更があると通知して任 意の処理を実行可能 結果の変更通知
  21. セキュリティ 全ての経路の暗号化と、アクセス制御 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による通信の暗号 化と証明書認証を用いたクラ スタを構築 サーバ間暗号化
  22. 料金 1つの指標だけのシンプルな料金体系によるサブスクリプション 1コア当たりの金額はRed Hatの担当営業へご連絡下さい。 Red Hat Data Gridのサブスクリプションは、より包括的なRed Hat Application

    Foundationsというサブスクリプションに含まれています。 ※構成によってはクラウドプロバイダがリージョン間の通信費などを請求するかもしれません。 稼働しているサーバのCPUコ ア数もしくはコンテナに割り当 てているCPU数の和で料金が 決まります。 高クロック数のCPUを推奨 CPUコア数 データ転送量が増えても 料金は変化しない※ データ転送量 リクエスト数が増えても 料金は変化しない リクエスト数 メモリサイズの大小で料金は 変わりません。1つのCPU当 たりに大きなメモリを推奨 メモリサイズ
  23. 高度な適応例 データグリッドに対応済みアプリケーションと未対応アプリケーションの共存 CDC 対応してない アプリ 対応したアプリ 反映アプリ 1つのDBは複数のアプリケーションから利用されることがあり ます。その場合、データグリッド化は複数のアプリケーションを 同時に変更する必要があります。しかし、それは困難です。そ

    のため、複数のアプリケーションがデータグリッドとDBをそれ ぞれ更新する期間が生まれます。連携機能によってキャッ シュ上のデータの変更はDBに反映されます。しかし、DB上の データを更新しても、そのデータが既にキャッシュされている 場合にはキャッシュに反映されません。この問題は、DB上の データ変更をキャッシュへ橋渡しをすることで解決します。反 映するアプリではDBの変更を反映することに加え、同時に更 新されていた場合の適用ルールを実装します。 連携
  24. 参考資料 1 Interface Cache<K, V> 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 セキュリティーガイド
  25. 参考資料 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 キャッシュの設定
  26. 参考資料 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 セキュリティーガイド