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

OCI Queue Service 技術概要

OCI Queue Service 技術概要

oracle4engineer
PRO

January 27, 2023
Tweet

More Decks by oracle4engineer

Other Decks in Technology

Transcript

  1. OCI Queue Service 技術概要
    日本オラクル株式会社
    Jan. 2023

    View Slide

  2. 非同期メッセージングをサーバレスに実現する、ハイパフォーマンス・メッセージキュー
    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

    View Slide

  3. コンテンツ(メッセージ)
    • 文字列形式のキュー内の要素
    プロデューサ
    • キューにメッセージを送信するクライアント
    コンシューマ
    • キューからメッセージを受信するクライアント
    • コンシューマは、メッセージの受信後にキューからメッセージを削除可能
    最大保存期間
    • コンシューマによって削除されない場合の、メッセージがシステムによって自動的に削除されるまでキューがメッセージを
    保持する期間
    最大配信回数
    • デッド レター キューに送信されるまでに、メッセージがコンシューマに配信され、更新または削除されていない回数
    OCI Queue Service の概念
    Copyright © 2023, Oracle and/or its affiliates
    3

    View Slide

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

    View Slide

  5. 基本的な処理の流れ
    ①プロデューサはメッセージを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

    View Slide

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

    View Slide

  7. メッセージ配信の仕組み (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
    に配信されることはない。

    View Slide

  8. プロデューサ - PutMessage
    SDKの利用
    Copyright © 2023, Oracle and/or its affiliates
    8

    View Slide

  9. コンシューマ – GetMessage
    SDKの利用
    Copyright © 2023, Oracle and/or its affiliates
    9

    View Slide

  10. コンシューマ - UpdateMessage
    SDKの利用
    Copyright © 2023, Oracle and/or its affiliates
    10

    View Slide

  11. コンシューマ – DeleteMessage
    SDKの利用
    Copyright © 2023, Oracle and/or its affiliates
    11

    View Slide

  12. • DLQのOCIDは となる
    • DLQのOCIDを利用して、通常のQueueと同様にGetMessage/DeleteMessageを行う
    デッド・レター・キュー (DLQ)の利用
    [QueueのOCID]-dlq
    Copyright © 2023, Oracle and/or its affiliates
    12

    View Slide

  13. 制限とスループット
    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

    View Slide

  14. 配信方式
    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

    3 2 1

    2
    3
    Consumer
    Group
    3 2 1
    3 2 1

    View Slide

  15. View Slide