2016-11-27 8 views
1

私はキューにGoogleのPub/Subサービスを使ってみましたが、実際のアプリケーションで何が良いのか分かりませんでした。Google Pub/Subの目的は何ですか?

Googleは

データ

グローバルリアルタイムかつ信頼性の高いメッセージングのためのサービスとストリーミング

だが、それは仕事のやり方は私には本当に奇妙であると述べています。それは、最大7日間の承認済みメッセージを保持しています。すでに加入していても、過去7日間のすべてのメッセージを再購読すれば、すでに確認済みの同じ加入者に再確認されます。 FIFOもありません。

私は実際にメッセージがどの加入者にも少なくとも1回配信されることが保証されている場合、このサービスをどのように使用すべきか理解していません。これは、冪等のアクションには使用できません。各サブスクライバは、既に受信済みのすべてのメッセージに関する情報を保存しなければならないため、複数回メッセージを処理しません。

+0

サブスクライバがすでに肯定応答したメッセージを再受信することは非常にまれです。これが定期的に行われている場合は、サポートチケットを開くことをお勧めします.GCP担当者が問題の原因を特定するのに役立ちます。 –

+0

実際それはまれではなく、むしろ正常です。そして、 "バグ"としてではなく、文書化された動作です。 Pubsubは配信を少なくとも1回は保証しますが、1回だけではありません。 –

答えて

0

Google Cloud Pub/Sub has lots otherデカップリングされたシステムがメッセージを送受信する必要があるさまざまなアプリケーションがあります。 overview pageには、ワークロード、ロギング、およびイベント通知の分散を含む多くのユースケースが用意されています。 Google Cloud Pub/Subは現在、FIFO保証を提供しておらず、メッセージを再配信できることは事実です。

ただし、配信保証が「少なくとも1回」であるという事実は、加入者が再加入したときに確認メッセージが再配信されることを意味するものではありません。拒否されたメッセージの再配信はまれなイベントです。これは通常、ackがネットワーキングの問題、マシンの障害、またはその他の例外的な状態のためにサービスに戻ってこなかったときにのみ発生します。これは、アプリがこのケースを処理できる必要があることを意味しますが、頻繁に発生することを意味するわけではありません。

異なるアプリケーションでは、メッセージの再配信で何が起こるかは異なる場合があります。概要ページにあるキャッシュの無効化などの場合、キャッシュ内のエントリを無効にする2つのイベントを取得するだけでは、余分な時間を再ロードする必要があるため、正確性の問題はありません。

ログや統計の目的でボタンのクリックやその他のイベントをトラッキングするような場合は、あまり重要でない情報の収集に影響を与える可能性が低いため、イベントが発生していないかどうかを確認する必要はありません。重複は問題ありません。

メッセージが正確に1回処理されることを保証する必要がある場合は、このような場合には加入者側で何らかのトラッキングが必要です。サブスクライバは、メッセージに応答して基礎となるデータベースにすでにアクセスして更新しており、そのストレージを介して重複イベントを検出できる可能性があります。

+0

もちろん、私はサブスクライバの拒否メッセージを追跡できます。問題は、Pubsubをキューとして使用し、従業員が一時的である(kubernetesジョブ)場合、キューに使用できる中央DBなしでこの情報を追跡する方法がないことです最初の場所。したがって、私の質問は立っている:PubSubの目的は何ですか? –

+0

あなたは非常に特定のユースケースを念頭に置いているように思えるので、そのユースケースで質問を更新することをお勧めします。パブリッシャとサブスクライバが緊密に結合されている場合、単一の中央データベースにアクセスでき、キューのスループットは比較的小さいため、Pub/Subは必ずしも必要な要件を満たすとは限りません。しかし、「実際のアプリケーションで何が良いのか分かりません」と言う大きな飛躍です。私は少なくとも一度の配達が問題ではない事例について言及した。 –

関連する問題