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. Red Hatが
    ひっそりと開発している
    OSSデータストア

    View Slide

  2. 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

    View Slide

  3. View Slide

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

    View Slide

  5. 概要

    View Slide

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

    View Slide

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

    View Slide

  8. 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 : “[email protected]” }
    suzuki { name: “鈴木”, mail : “[email protected]” }
    sato { name: “佐藤”, mail : “[email protected]” }
    … …
    put
    key : tanaka
    value : {name : “田中”, mail : “[email protected]” }
    get
    key : tanaka
    {name : “田中”, mail : “[email protected]” }
    アプリケーション
    ユーザ情報キャッシュ

    View Slide

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

    Javaオブジェクト コレクション
    スカラ型
    XMLやJSONドキュメントなど
    複雑な構造を文字列として格

    ドキュメント型
    Value

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  16. 可用性

    View Slide

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

    View Slide

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

    View Slide

  19. 動作環境とサポート
    クラウド(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をサポー
    ト。他のコンテナプラットフォー
    ム上は限定的なサポート※
    コンテナ

    View Slide

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

    View Slide

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

    View Slide

  22. 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に無影響。データ管
    理用のメタデータはヒープを使
    用。
    オフヒープ
    ノード内部の保
    持方法
    データ全体の保
    持方法

    View Slide

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

    View Slide

  24. 統合

    View Slide

  25. 統合
    さまざまなデファクトスタンダードとの統合
    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

    View Slide

  26. 管理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を通じてデータ
    グリッドを管理

    View Slide

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

    View Slide

  28. その他

    View Slide

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

    View Slide

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

    View Slide

  31. セキュリティ
    全ての経路の暗号化と、アクセス制御
    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による通信の暗号
    化と証明書認証を用いたクラ
    スタを構築
    サーバ間暗号化

    View Slide

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

    View Slide

  33. 適応例

    View Slide

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

    View Slide

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

    View Slide

  36. リンク

    View Slide

  37. 参考資料 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 セキュリティーガイド

    View Slide

  38. 参考資料 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 キャッシュの設定

    View Slide

  39. 参考資料 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 セキュリティーガイド

    View Slide