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

OCI Queue Service 技術概要

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

OCI Queue Service 技術概要

Avatar for oracle4engineer

oracle4engineer PRO

January 27, 2023
Tweet

More Decks by oracle4engineer

Other Decks in Technology

Transcript

  1. 非同期メッセージングをサーバレスに実現する、ハイパフォーマンス・メッセージキュー 2 Copyright © 2023, Oracle and/or its affiliates OCI

    Queue Service ▪ ユースケース • アプリケーションを分離し、疎結合なアーキテクチャを構築 • 信頼性の高いスケーラブルなメッセージ基盤の活用 ▪ 特徴 • フルマネージド、オートスケール • OCI Streaming を補完する適用領域 • オフセット カーソル 無し、メッセージ消費は逐次確認 • パーティション無し、需要に応じてオートスケール • at-least-once 配信、配信順序はベストエフォート • Dead Letter Queue (DLQ) の提供 (異常終了メッセージを退避) • キューメッセージの暗号化 • STOMPプロトコルをサポート ▪ 価格 最初の100万リクエストは無料、移行100万リクエストごとに¥30.8 * 1 リクエストのメッセージ容量が64KBを超える場合、64KBを1単位として複数のリクエストとして計算 ** 複数メッセージの同時取得は、メッセージ容量に基づいて計算 Container Engine For Kubernetes Containers Virtual Machine OCI Queue Service Functions Producer … etc. Container Engine For Kubernetes Containers Virtual Machine Functions Consumer … etc. • STOMP: Simple Text Orientated Messaging Protocol 軽量なメッセージングプロトコル regular dead letter
  2. コンテンツ(メッセージ) • 文字列形式のキュー内の要素 プロデューサ • キューにメッセージを送信するクライアント コンシューマ • キューからメッセージを受信するクライアント •

    コンシューマは、メッセージの受信後にキューからメッセージを削除可能 最大保存期間 • コンシューマによって削除されない場合の、メッセージがシステムによって自動的に削除されるまでキューがメッセージを 保持する期間 最大配信回数 • デッド レター キューに送信されるまでに、メッセージがコンシューマに配信され、更新または削除されていない回数 OCI Queue Service の概念 Copyright © 2023, Oracle and/or its affiliates 3
  3. メッセージの状態 公開中 • メッセージは、1つ以上のプロデューサによってキューに公開 • 各プロデューサにて保存期間を指定 • 保存期間が指定されていない場合、メッセージはキュー(サービスの単位)で定義された保存期間に応じる 処理中 •

    複数のコンシューマが1つのキューからメッセージを消費可能 • コンシューマ数はスケーリング可能 • メッセージは一度コンシューマに配信されると、表示タイムアウトに応じて他のコンシューマから見えなくなる 更新中 • メッセージの処理に予想よりも時間がかかる場合、コンシューマはメッセージの表示タイムアウトを延長可能 • 表示タイムアウトを延長すると、メッセージの削除権は維持され、他のコンシューマから見えない状態が続く 削除中 • コンシューマにメッセージが配信され処理された後は、別のコンシューマへの再配信を防ぐためにメッセージ削除が必要 OCI Queue Service の原則 Copyright © 2023, Oracle and/or its affiliates 4
  4. 基本的な処理の流れ ①プロデューサはメッセージをOCI Queueに公開 (PutMessage) ②コンシューマがQueue上の取得可能なメッセージを取得 (GetMessage) • 取得時のタイムアウトを指定可能(ポーリング・タイムアウト) • メッセージの最大取得数の指定が可能

    ※指定がない場合は20 • GetMessageのレスポンスからメッセージのReceipt(メッセージの識別子)が取得可能 • ReceiptはメッセージのUpdate/Deleteの際に利用する ③コンシューマが取得したメッセージを処理 • 処理中のメッセージを他のコンシューマから見えないようにすることができる(表示タイムアウト) • 処理中は表示タイムアウトの更新が可能(UpdateMessage) ④コンシューマがQueueに対して処理したメッセージの削除リクエスト(DeleteMessage) OCI Queue Service の原則 Producer OCI Queue Consumer ① ② ④ ③ Copyright © 2023, Oracle and/or its affiliates 5
  5. 2つのタイムアウト ポーリング・タイムアウト • コンシューマがメッセージの取得を待機する時間 • タイムアウトが経過して消費可能なメッセージがない 場合、リクエストは空のレスポンスを返す • ポーリング・タイムアウトを増やすと、コンシューマが キューにメッセージをリクエストする回数が減る

    • デフォルトは30秒 表示タイムアウト(メッセージロック) • 他のコンシューマに表示されない期間 • コンシューマは、別のコンシューマが同じメッセージを取 得できないように、メッセージをロック可能 • キュー・レベル/メッセージの消費または更新時に指定 することが可能 OCI Queue Service の概念 Queue Consumer GetMessage リクエスト 指定(設定)した時間、Consumerが ポーリング 消費可能な メッセージがあれば それを取得 Consumer タイムアウト時は 空のレスポンス を返却 Consumer Queue Consumer A GetMessage リクエスト 指定(設定)した時間、メッセージをロック メッセージロック 中はメッセージ が見えない Consumer B Copyright © 2023, Oracle and/or its affiliates 6
  6. メッセージ配信の仕組み (Put/Get/Update/Delete) Copyright © 2023, Oracle and/or its affiliates 7

    1. Producerは、デフォルトのメッセージ保持時間でメッセージをキューに送信。Producerは、キュー サービスがメッセージを受信して保存したという確認を受け取る。 2. Consumer A は、表示タイムアウト A 内に処理することになっているメッセージを受信。 3. Consumer B は、利用可能な唯一のメッセージがConsumer A によって既に消費されているため、何も受信しない。 4. Consumer A は表示タイムアウト A 内にメッセージを処理できなかったため、メッセージを更新して表示タイムアウトを延長。 5. Consumer B は再度メッセージを受信しようとするが、利用可能な唯一のメッセージがConsumer A によって消費および拡張されたため、受信できない。 6. 延長された表示タイムアウトが経過すると、メッセージが再び表示されるように。 7. Consumer B は 3 回目のメッセージの受信を試みる。Consumer B はメッセージを受信。これは、表示タイムアウト B 内に処理することになる。 8. Consumer A はメッセージを受信しようとするが、Consumer B がメッセージを消費したため、何も受信しない。Consumer A は、メッセージの表示タイムアウトを延長したり、メッセージを削除 したりすることができなくなる。 9. Consumer B はメッセージを正常に処理し、キューからメッセージを削除しようとする。Consumer B は、メッセージが完全に削除されたという確認を受け取り、このメッセージは他のConsumer に配信されることはない。
  7. 制限とスループット Queue • メッセージ: 128KB • ストレージ/キュー: 2GB Streaming •

    メッセージ: 1MB • ストレージ/Stream: 無制限(最大保持期間有り) OCI Queue と OCI Streaming の違い Copyright © 2023, Oracle and/or its affiliates 13 Producer Consumer OCI Queue - 1000 APIリクエスト/秒 - 10MB イングレス/秒 - 512KB PutMessage/ 秒 or 20メッセージ /秒 - 1000 APIリクエスト/秒 - 10MB エグレス/秒 - 2MB GetMessage/ 秒 or 20メッセージ /秒 Streaming Producer - 無制限リクエスト数 - 1MB 書込み/秒/パー ティション - 5リクエスト/秒/ Consumer Group - 50 Consumer Group/Stream Consumer Group
  8. 配信方式 Queue Streaming OCI Queue と OCI Streaming の違い Copyright

    © 2023, Oracle and/or its affiliates 14 Producer Consumer OCI Queue Streaming Producer Consumer Group 4 3 2 1 Consumer Consumer Consumer 4 3 2 1 3 2 1 1 2 3 Consumer Group 3 2 1 3 2 1