モダン・アプリケーション開発-メッセージング

メッセージング・ソリューションはアプリのコンポーネントを接続することで、信頼性の高いデータの交換、透過的なスケーリング、高レベルの可用性の実現を実現します。データ・プロデューサから処理を分離し、未処理のメッセージを効率的にバッファして、メッセージの耐久性、処理スケーラビリティおよびアプリケーション・レジリエンシを提供できます。

メッセージ指向のアプリケーションは、様々なアーキテクチャにまたがっています。コンポーネント間のデータ転送は、明確に定義された分散処理パイプラインとコンバージド処理パイプラインの一部である場合もあれば、コンポーネントが個別に進化する複数の独立したダウンストリーム・システムにメッセージをパブリッシュする場合もあります。最新のメッセージング・モデルには3つの共通があり、それぞれに共有アプリケーション要件と個別のアプリケーション要件があります。

イベント・ストリーミング

イベント・ストリーミング・アプリケーションは、リアルタイムで処理する必要がある大量かつ高速なデータ・ストリームを取り込みます。RAWデータを処理して、他のアプリケーション・コンポーネントで使用するか、監視のために使用するか、後で分析するために格納できるインサイトを抽出する必要があります。

maf- messaging- streaming.pngの説明が続きます
図maf- messaging- streaming.pngの説明

maf- messaging- streaming- oracle.zip

このイベント・ストリーミング・アプリケーションでは、Oracle Cloud Infrastructure StreamingまたはOracle Transactional Event Queues (TEQ)を基礎となるメッセージング・ソリューションとして使用し、Oracle Cloud Infrastructure Functionsをリアルタイム処理に使用し、Oracle Autonomous Databaseをバッキング・ストアとして使用します。

公開- 登録

パブリッシュ/サブスクライブまたはパブリッシュ/サブスクライブは、データ・プロデューサがデータを特定のトピックにパブリッシュする通信パターンで、これらのトピックをサブスクライブすることで、任意の数のダウンストリーム・コンシューマが消費できます。プロデューサとコンシューマ間の結合は非常に緩いため、消費者はアップストリームのプロデューサに影響を与えることなく独立して進化できます。

maf- messaging- publishers- subscribers.pngの説明が続きます
図maf- messaging- publishers- subscribers.pngの説明

maf- messaging- publishers- subscribers- oracle.zip

この例では、Oracle Cloud Infrastructure StreamingまたはOracle TEQを使用して、pub/subメッセージング・パターンを実装する方法を示します。

メッセージ・キューイング

メッセージ・キューイングを使用すると、アップストリーム・コンポーネントとダウンストリーム・コンポーネントが緊密に結合され、一緒にアプリケーション・ワークフローを実装する分散ステートフル処理が可能になります。メッセージング・ソリューションは、メッセージが消費される前に失われないように、1回以上の配信などのセマンティクスをサポートする必要があります。

maf- messaging- queging.pngの説明が続きます
図maf- messaging- queging.pngの説明

maf- messaging- queging- oracle.zip

次の例では、Oracle Cloud Infrastructure QueueまたはOracle TEQを使用してメッセージ・キューイングを実装する方法を示します。

設計方針

メッセージング・アプリケーションまたはプラットフォームを構築するには、次の設計原則を使用します。
  • REST APIを使用して通信する一連のサービスとしてアプリケーションを構築

    KafkaやJMSなどの業界標準のAPIを使用して、アプリケーションの相互運用性を実現し、ハイブリッド・メッセージングやマルチクラウド・メッセージング・アプリケーションをシームレスに構築します。Oracle Cloud Infrastructure (OCI) StreamingはKafka互換APIを提供し、Oracle Transaction Event Queues (TEQ)はKafka APIとJMS APIの両方をサポートしています。KafkaとJMSの両方がサード・パーティ製品で広くサポートされています。たとえば、Confluent Kafka JMSコネクタを使用して、Oracle TEQとKafka間でメッセージを転送できます。Oracle Container Engine for KubernetesクラスタにデプロイされたKafka Connectを使用して、サードパーティ製品に接続することもできます。Oracle Cloud Infrastructure Queueは、RESTful API定義(OpenAPI仕様を使用)を使用するか、業界標準のSTOMPプロトコルを使用してコールできます。

  • 管理対象サービスを使用して、アプリの開発と運用の複雑さを解消

    Oracle Autonomous Database (ADB)のOCIストリーミング、OCIキュー、Oracle TEQおよびアドバンスト・キューイング(AQ)機能などのインフラストラクチャ・メンテナンスおよびセキュリティ・パッチ適用が組み込まれた完全管理サービスを使用します。これらのサービスは、複数のアベイラビリティ・ドメインにわたる自動レプリケーションで高可用性が提供され、負荷の変化に対応したスケーリングの自動化をサポートしています。

  • アプリ層をステートレスに維持

    メッセージ・キュー内の位置などのメッセージ関連の状態は、アプリケーションまたはローカル・ファイル・システムに格納しないでください。保存すると、アプリケーション・インスタンスに障害が発生した場合にデータが失われる可能性があるためです。アプリケーションは処理のためにメッセージ・コンテンツをキャッシュできますが、メッセージ・ソリューションはすべてのメッセージ・データに対して唯一の正しい情報源を保持する必要があります。メッセージ・キュー内の位置などの関連メタデータをデータベースまたはオブジェクト・ストレージに格納して、メッセージの消失を回避し、べき等の操作を確保する必要があります。これにより、障害回復が容易になり、また、修正の損失なしにサービスをスケール・アップまたはスケール・ダウンしやすくなります。

  • 証書のエンドツーエンドの監視およびトレース

    アプリケーションの状態、パフォーマンスおよび操作状態を信頼的に理解できます。Oracle Cloud Observability and Management Platformのサービスのポートフォリオを使用して、データ・プロデューサとコンシューマからメッセージング・パイプライン自体まで、アプリケーション・スタックのすべてのレイヤーにわたる可視性と実用的なインサイトを取得します。キューの長さと処理時間を監視して、エラーとボトルネックを捕捉し、トピックをサブスクライブしているサービスの問題を検出します。

  • 自動化されたデータ・レプリケーションと障害回復による単一障害点の排除

    メッセージング・データを永続ストレージにバックアップして、規制およびコンプライアンスのニーズに対応します。障害時リカバリにはリージョン間バックアップを使用します。たとえば、OCIキューのメッセージ表示タイムアウトを使用して、冪等性をメッセージング・アプリケーションに組み込みます。プライマリ実行パイプラインをブロックせずに、リカバリ不能なエラーを別のストリーム、デッド・レター・キューまたは永続ストレージに書き込みます。

  • 自動多層防御アプローチを実装して、アプリケーションとそのデータを保護します

    認可されたユーザーのみがOCIストリームおよびキューからデータを作成、送信または受信できるように、Oracle Cloud Infrastructure Identity and Access Management (IAM)ポリシーを実装します。インターネットからのアクセスを制限するプライベート・エンドポイントおよびサービス・ゲートウェイを使用してメッセージング・エンドポイントへのアクセスを保護することで、最小到達性の原則を適用します。OCIストリーミング、OCIキュー、TEQのすぐに使用できる機能を使用して、保存中および転送中のデータを暗号化し、データの機密性を実現します。ただし、キー・ローテーションの所有権を増やす必要がある場合は、Oracle Cloud Infrastructure Vaultサービスを使用してマスター・キーを安全に管理します。

アーキテクチャ

次の図は、OCIストリーミングを使用してイベント・ストリーミングを実装する方法を示しています
maf-messaging.pngの説明が続きます
図maf-messaging.pngの説明

maf- messaging- oracle.zip

OCIストリーミングを使用してイベントストリーミングおよびpub/subメッセージング・パターンを実装し、Oracle Cloud Infrastructure Queueを使用してメッセージ・キューイングを実装します。Oracle Autonomous Databaseを使用して、処理されたイベント・データを永続化します。OCIファンクションは、ダウンストリーム・アプリケーション・コンポーネントによって消費されるか、データベースに永続化される前にイベント・データを処理するために使用できます。

アプリケーションおよびデータベースおよびメッセージング・サービスに対して専用サブネットを使用して、ネットワーク分離を実装します。プライベート・エンドポイントを使用してストリームへのアクセスを保護します。Oracle Cloud Infrastructure Identity and Access Management (IAM)ポリシーを使用して、キューへのアクセスを制限します

長期のメッセージ保持には、Oracle Cloud Infrastructure Object Storageを使用します。サービス・コネクタなどのサーバーレス・サービスを使用して、OCIストリーミングからオブジェクト・ストレージにデータをシームレスに移動し、オブジェクト・ストレージのリージョン間バックアップを有効にしてマルチリージョン・バックアップを実現します。ストリーム間でデータを非同期にレプリケートするために、フォルト・トレラントなOracle Container Engine for Kubernetes (OKE)環境にデプロイされたKafka MirrorMaker 2.0を使用して、リージョン間のディザスタ・リカバリ戦略を実装します。この設定により、リカバリ時間目標(RTO)およびリカバリ・ポイント目標(RPO)分が可能になります。リモートVCNピアリングを使用して、データ転送中のレイテンシを最小限に抑えます。

デッド・レター・キューを使用して、問題のあるメッセージを分離します。デッド・レター・キューは、キューを作成すると自動的に作成されます。デッド・レター・キューは、障害が発生したメッセージによってプライマリ実行パイプラインがブロックされることを回避するのに役立ちます。デッド・レター・キュー内のメッセージを分析して、失敗した理由を判断できます。

処理されたメッセージのオフセット(Object Storageなど)を外部ストレージに格納することで、アプリケーションに冪等性を組み込みます。外部ストアを問い合せて重複を検出および破棄します。簡単にリカバリできるエラーを分類し、メッセージをリプレイできるようにします。

このアーキテクチャでは、次のサービスおよびテクノロジを使用します。

  • ストリーミング

    Oracle Cloud Infrastructure Streamingは、リアルタイムで消費と処理が可能な連続した大量のデータ・ストリームを収集するための、完全に管理されたスケーラブルで耐久性の高いストレージ・ソリューションを提供します。ストリーミングを使用すると、アプリケーション・ログ、運用テレメトリ、Webクリック・ストリーム・データなどの大量のデータを取り込んだり、パブリッシュ/サブスクライブ・メッセージング・モデルでデータが継続的かつ連続的に生成および処理される他のユースケースのために利用することができます。

  • キュー

    Oracle Cloud Infrastructure Queueは、少なくとも1回の処理、トラッキング、クライアント分離の保証など、複雑な管理タスクを処理しながらメッセージを処理するスケーラブルなシステムを提供します。この集中管理されたサービスでは、メッセージの順序付けおよび処理状態も管理されるため、ステートレス・クライアント・プロセスはカーソル追跡をオフロードできます。

  • 関数

    Oracle Cloud Infrastructure Functionsは、完全に管理されたマルチテナントで、スケーラビリティに優れたオンデマンドのFunctions-as-a-Service (FaaS)プラットフォームです。Fn Projectオープン・ソース・エンジンを搭載しています。ファンクションを使用すると、コードをデプロイし、それを直接コールするか、イベントに応答してトリガーできます。Oracle Functionsでは、Oracle Cloud Infrastructure RegistryでホストされているDockerコンテナが使用されます。

  • サービス・コネクタ

    Oracle Cloud Infrastructure Service Connector Hubは、OCIのサービス間のデータ移動を編成するクラウド・メッセージ・バス・プラットフォームです。これを使用して、Oracle Cloud Infrastructureのサービス間でデータを移動できます。データは、サービス・コネクタを使用して移動されます。サービス・コネクタは、移動するデータ、データで実行するタスク、および指定されたタスクが完了したときにデータを配信する必要があるターゲット・サービスを含むソース・サービスを指定します。

    Oracle Cloud Infrastructure Service Connector Hubを使用すると、SIEMシステム用のロギング集計フレームワークを迅速に作成できます。オプションのタスクは、ソースまたはログ・フィルタ・タスクからのデータを処理してソースからログ・データをフィルタする機能タスクです。

データベース中心の代替アーキテクチャ

このアーキテクチャでは、トランザクション・イベント・キュー(TEQ)を使用して、最新のアプリケーションにメッセージング・パターンを実装します。TEQは、Oracle Autonomous Databaseの組込み機能です。

maf- messaging- alternate.pngの説明が続きます
図maf- messaging- alternate.pngの説明

maf- messaging- alternate- oracle.zip

このアーキテクチャは、外部ストリーミング・サービスやキューイング・サービスを利用する必要性を排除し、一般的なマイクロサービス・パターンを簡素化するトランザクション・メッセージング機能を提供します。

TEQは、データおよびメッセージ処理をスケーラブルなインフラストラクチャに結合し、ライフ・サイクル管理、セキュリティおよびディザスタ・リカバリを簡素化し、高いパフォーマンスを提供します。TEQでは、ストリーミング、キューイング、pub/subなどの一般的なメッセージング・パターンがサポートされています。TEQを使用してメッセージングおよびデータベース操作にわたってトランザクションを実装し、トランザクション送信ボックスや、追加コードがほとんどまたはまったくない1回のみのメッセージングなどのメッセージング・パターンを簡単に実装できます。Oracle TEQは、データベースで実行されているアプリケーションに対して1回のみのメッセージを提供します。つまり、重複メッセージをチェックしたり、アプリケーション・レベルでべき等なコンシューマを構築するために、メッセージIDを保持する必要はありません。TEQは、イベント処理で典型的な小さなメッセージと、ビジネス・ワークフローに関連する大きなペイロードの両方をサポートし、セキュアなイベント・メッシュとして機能することもできます。

外部ストリーミング・サービスやキューイング・サービスをなくすことで、状態管理が簡素化されます。イベントおよびメッセージは、アプリケーションで使用されているものと同じデータベースに格納されます。これにより、イベント、メッセージおよびアプリケーションの変更間で一貫性を容易に達成し、維持できます。ポイントインタイム・リカバリまたはディザスタ・リカバリが必要な障害がある場合、すべての(イベント、メッセージおよびアプリケーション・データ)が一貫性のある状態に自動的にリカバリされます。

TEQは、Autonomous Databaseの高可用性からメリットを得ています。TEQのメッセージング・データは、Autonomous Data Guardを使用して、ADBのクロス・リージョン・レプリケーションによって自動的にバックアップおよび保護されます。Oracle Real Application ClustersおよびOracle Active Data Guardを使用して、可用性の高い方法でOracle TEQをデプロイできます。どちらもOracle Autonomous Databaseの組込み機能です。Oracle Real Application Clustersはリージョン内で可用性を提供し、Oracle Active Data Guardはリージョン間ディザスタ・リカバリ保護を提供します。

このアーキテクチャは、アプリケーションが次のいずれかを実行する場合に使用します。

  • メッセージ・キューを実装し、トランザクション・アウトボックスなどのセマンティクスが必要
  • データベースとメッセージング基板を個別にスケーリングする必要はありません。

このアーキテクチャでは、次のサービスおよびテクノロジを使用します。

  • トランザクション・イベント・キュー(TEQ)およびアドバンスト・キューイング(AQ)

    トランザクション・イベント・キュー(TEQ)およびアドバンスト・キューイング(AQ)は、Oracle Databaseと統合された堅牢で多機能なメッセージ・キューイング・システムです。トランザクション・イベント・キュー(TEQ)は、キューごとに複数のイベント・ストリームを持つ、高パフォーマンスのパーティション化されたインメモリー実装です。アドバンスト・キューイング(AQ)は、ワークフローの簡単なユース・ケースに適しています。これらの機能は、Oracle Databaseを利用してメッセージを永続化し、高いスループットとスケーラビリティを提供します。

  • 関数

    Oracle Cloud Infrastructure Functionsは、完全に管理されたマルチテナントで、スケーラビリティに優れたオンデマンドのFunctions-as-a-Service (FaaS)プラットフォームです。Fn Projectオープン・ソース・エンジンを搭載しています。ファンクションを使用すると、コードをデプロイし、それを直接コールするか、イベントに応答してトリガーできます。Oracle Functionsでは、Oracle Cloud Infrastructure RegistryでホストされているDockerコンテナが使用されます。

推奨されないアーキテクチャ

  • モノリシック・メッセージおよびサービス・バス・アプリケーション

    RabbitMQなどのメッセージング・ソリューションでは、オープン標準およびAPIを介して他のコンポーネントとの統合をサポートできます。ただし、これらのソリューションには多大なSME管理作業が必要であり、自己管理の複雑なトポロジを使用せずに分散冗長性と高可用性を提供できない場合があります。

  • 自己管理型クラウドまたはオンプレミス環境でのKafkaクラスタ

    このソリューションは、拡張性と高可用性を提供しますが、専門分野に深い知識と広範なSME運用管理のオーバーヘッドを必要とします。生産までのリード・タイムと総所有コスト(TCO)が高いリスクにより、このオプションを選択する前に慎重に検討してください。

注意事項

メッセージング設計パターンを実装する場合は、これらの実装オプションを検討します。

アプリケーション要件に基づいて適切なメッセージング・プラットフォームを選択

基本のプラットフォームとサービスは、同様に表示され、共通の機能を共有できます。ただし、各プラットフォームには固有の機能および強みがあり、アプリケーションの要件に合せて適切に調整できます。次に例を示します。

  • アプリケーションでメッセージ・リプレイおよびパブサブ機能を提供するリアルタイムの高スループット・メッセージング・プラットフォームが必要な場合、OCIストリーミングまたはトランザクション・イベント・キューを使用します。
  • スケーラブルで信頼性の高いポイントツーポイント・バッファでデータを非同期的に移動する必要がある場合は、トランザクション・イベント・キューを使用します。
  • サービス・コネクタ・ハブ(SCH)を使用して、インフラストラクチャ・リソースとの統合を有効にします。
  • Oracle Autonomous Databaseと統合されたメッセージングで新しいマイクロサービスを設計する場合は、データベースでトランザクション・イベント・キュー(TEQ)を使用します。

パブリック・ケース・スタディ

Oracle Streamingベースのアーキテクチャ

Tango Eyeは、監視ビデオを小売業界の実用的なインサイトに変換します。

  • Oracle Cloud Infrastructure (OCI) Streaming 様々なマイクロサービスのための低メンテナンスのパブリッシュ/サブスクライブ・メッセージング・システムとして保守します。 
  • Oracle Cloud Infrastructure Functionsは、エンジニアリングの監視なしでサーバーレス・ジョブを実行します。
  • Oracle Cloud Infrastructure Object Storageのライフサイクル・ポリシーは、Tango EyeのAIベースのアナリティクスの価値を減らすことなく、データを自動的にアーカイブおよびパージしてコストを削減します。

Oracle TEQベースのアーキテクチャ

FedExでは、Oracle E-Business SuiteとOracle TEQで構築されたビジネス・イベント・マネージャを使用して、毎日1550万件のパッケージを売掛金管理できます。

  • FedExは、Exadata Cloud Serviceを使用してE-Business SuiteをOracle Cloud Infrastructure Object Storageに移行しました。E-Business Suiteのワークフローとビジネス・イベント・システムは、Oracle Advanced Queuing (AQ)メッセージングで完全に作成されます。
  • Oracle AQは使いやすく、ワークフロー・オーケストレーションに適しています。高スループット・イベントの場合、Oracle TEQは、キュー当たりの複数のイベント・ストリームと、apache Kafkaと相互運用される高パフォーマンスのドロップイン置換です。

変更ログ

このログには、重要な変更がリストされます。

謝辞

Authors: Harshad Kasture, Randall Barnes, Matthias Brantner

Contributors: Hassan Ajan, James Emerson, Parvez Syed Mohamed, Sajan Parihar, Wei Hu, Sreya Dutta, Joshua Stanley