※ 本記事は、Abhishek Bhaumikによる”Channels in OCI Queue enable messaging fairness, ephemeral destinations, and more“を翻訳したものです。

2023年9月15日


Oracle Cloud Infrastructure (OCI) Queueは、複数のコンカレント・プロデューサとメッセージのコンシューマで大量のデータを処理するように設計されたサーバーレスの非同期メッセージング・サービスです。複数のプロデューサとコンシューマが同じキュー内のメッセージを処理している場合、次の例のような問題が発生する可能性があります。: 

  • あるプロデューサからアグレッシブ・プロデューサまたは突然のボリューム・バーストが発生すると、アプリケーションのパフォーマンスに影響し、他のプロデューサからのメッセージの処理が大幅に遅延する可能性があります。

  • 特定のリクエスト/レスポンス・メッセージング・パターンにはエフェメラル宛先が必要です。エフェメラル宛先は、存続期間が短いキューであり、一時的にメッセージを処理するためのものです。これらのメッセージを一括で処理する際に、これらの存続期間の短いキューを作成および削除すると、管理オーバーヘッドが大幅に増加する可能性があります。

  • キューに複数のコンシューマがある場合、個々のコンシューマは、特定のタイプのメッセージのみまたは特定のプロデューサからのメッセージのみの使用に関心があり、各コンシューマ・タイプ専用の複数のキューを持つ複雑なソリューションを設計する必要があります。

新規: OCI Queue内のチャネル

これらの課題を克服するためのOCI Queueで新しい機能を発表: Queueチャネル。チャネルにより、キュー内のエフェメラル宛先が可能になり、メッセージ処理の公平性が向上し、メッセージ選択およびリクエスト/レスポンス・メッセージング・パターンが有効になります。

チャネルに公開されたメッセージは、キュー・レベルとチャネル・レベルの両方から消費できます。チャネルは明示的な作成または削除を必要としません。メッセージの公開中に、チャネルIDを指定することを選択できます。同じチャネルIDで作成されたすべてのメッセージは、同じチャネルにパブリッシュされます。チャネルはエフェメラルであり、特定のチャネルにメッセージがない場合、チャネルは自動的に削除されます。チャネルは親キューと同じ権限、暗号化方法および制限を共有しますが、キューはチャネル容量を構成でき、1つのチャネルがいつでも使用できるキュー全体の容量の最大量を制限できます。

メッセージ処理の公平性の有効化

複数のプロデューサが同じキューに生成されている場合、あるプロデューサからのメッセージ・ボリュームが突然急増すると、他のプロデューサからのメッセージの処理が大幅に遅延する可能性があります。アプリケーションがエンド・ユーザーのミドルウェアとして機能する場合があり、キュー・パー・エンド・ユーザー・パターンを使用します。この場合、アプリケーションは、より高いトラフィックを持つ顧客のためにメッセージ消費を偏りから保護する必要があります。これは、ノイジー・ネイバーの問題です。

次の図では、メッセージ・プロデューサ(P1)がメッセージを一括で生成し始めると、他のプロデューサ(P2またはP3)からのメッセージの処理が大幅に遅延する可能性があります。

A graphic depicting the process where message fairness is 0.

すべてのプロデューサからのメッセージを均等に消費し、メッセージ処理の公平性を確保するには、プロデューサ・タイプごとに個別のキューを保持し、メッセージを均等に消費するロード・バランシング・メカニズムを実装する必要があります。

A graphic depicting the process where message fairness is 1 with the help of a load balancer.

チャネルの導入により、プロデューサはメッセージを特定のチャネルに公開できるようになりました。コンシューマは、チャネルIDを指定せずにキューからのメッセージを消費すると、使用可能なメッセージがあるランダム・チャネルからメッセージが返されます。この分離は、公平性を高め、突然のボリューム・スパイクから保護するだけでなく、長いポーリングを使用してより効果的なデータ消費を実現できます。

A graphic depicting the process where message fairness is 2 with the help of channels.

メッセージ選択の有効化

リクエストにオプション・パラメータを含めて、チャネルIDと一致するパブリッシュされたメッセージを選択できます。OCI Queueは、IDに一致するチャネルの1つのみから使用可能なメッセージを返します。

複数のチャネルのIDがリクエストの選択と一致する場合、使用可能なメッセージがあるランダム・チャネルからメッセージが返されます。メッセージが特定のチャネルにパブリッシュされたが、消費リクエストにチャネルが含まれていない場合、メッセージはランダム・チャネルから、使用可能なメッセージとともに返されます。

リクエスト/レスポンス・パターンのエフェメラル・キューの有効化

リクエスト/レスポンスのエフェメラル・パターンは、よく確立された統合パターンです。これにより、送信側アプリケーションはリクエストを送信でき、受信側はレスポンスを送信側アプリケーションに正しく送信できます。通常、このパターンには、アプリケーションがレスポンスを送信するための短期間のキューまたはトピックが必要です。チャネルは、明示的なCreateQueueまたはDeleteQueue APIコールを行わずに、短期間で複数のチャネルを作成および削除できるシンプルなソリューションを提供します。

複数のアプリケーションは、送信側アプリケーションを一意に識別するために特定のチャネルIDパラメータを設定して、単一のリクエスト・キューにリクエストを送信できます。受信側アプリケーションは、リクエストを処理し、チャネルIDパラメータで返信を送信して、メッセージをパブリッシュした送信者を一意に識別できます。リクエストを送信したアプリケーションは、特定のチャネルIDでメッセージを受信し、返信を正しく処理できます。メッセージが正常に処理され、コンシューマが削除されると、処理するメッセージがなくなった場合、チャネルは自動的に削除されます。

A graphic depicting the request responsefor ephemeral queues.

OCI Queue・チャネルの開始

キューの作成およびチャネル容量の割当て

キューを作成または更新するときに、チャネルに対する割当て率を指定して、チャネルがいつでも使用できるキューの全体的な容量の最大量を制限できます。デフォルトでは、制限は100%に設定されています。つまり、チャネルはキュー全体の帯域幅を消費できます。50%に設定した場合、チャネルはキューの帯域幅の50%しか占有できません。

A screenshot of the Create Queue window showing the channel consumption percentage section circled in red.

特定のチャネルへのメッセージの送信

特定のチャネルにメッセージを送信できます。チャネルがまだ存在しない場合は、メッセージの送信中にチャネルIDを指定して別のチャネルを作成できます。チャネルIDが指定されていない場合、メッセージは親キューに送信されます。

A screenshot of the Send message to Channel Queue window.

チャネルのリスト

「チャネル」ページからチャネルのリストを表示します。

A screenshot of the Order Processing Queue page and associated channels.

チャネルからのメッセージのポーリング

「チャネル・リスト」ページから、ランダムまたは特定のチャネルからメッセージをポーリングします。

A screenshot of the Poll for channel messages window.

チャネル・メッセージのパージ

特定のチャネルの「アクション」メニューを使用して、特定のチャネルからメッセージをパージできます。

A screenshot of the Order processing queue page with the menu for polling and purging messages expanded.

OCI Queueのチャネルを今すぐ試してみてください!

OCI Queueを試すには、Oracle Cloud Free Tierアカウントにサインアップするか、アカウントにサインインしてください。

OCI Queueには、Oracle Cloudコンソールからアクセスできます。「開発者サービス」で「アプリケーション統合」を選択し、「キュー」をクリックします。Oracle Cloud Infrastructure Queueの詳細は、OCI Queueのドキュメントを参照してください。