web-dev-qa-db-ja.com

1回限りの保証と1回以上の保証の違い

私は分散システムを研究していて、この古い質問に言及しています: stackoverflow link

完全に1回、最低1回、および最高1回の保証の違いを本当に理解できません。これらの概念をKafka、Flink、およびStormで読み、Cassandra。誰かがFlinkは1回だけの保証があるのでより良いと言いますが、Stormは少なくとも1回しかありません。

ワンスモードはレイテンシには優れていますが、同時にフォールトトレランスには劣ると理解しています。重複していない場合、ストリームをどのように回復できますか?そして、これが本当の問題であるなら、なぜ1回限りの保証が他の保証よりも優れていると考えられるのでしょうか。

誰かが私により良い定義を与えることができますか?

17
Akinn

以下の定義は Akka ドキュメントから引用されています

一度だけ配信

メカニズムに渡されるメッセージごとに、そのメッセージは0回または1回配信されます。よりカジュアルな言葉で言えば、メッセージが失われる可能性があることを意味します。

at-least-oncedelivery

メカニズムに渡されるメッセージごとに、少なくとも1つが成功するように、配信時に複数の試行が行われる可能性があることを意味します。繰り返しになりますが、これは、よりカジュアルな言い方をすると、メッセージが複製されても失われることはないことを意味します。

正確に1回配送

メカニズムに渡されるメッセージごとに、受信者に対して正確に1つの配信が行われることを意味します。メッセージは失われたり複製されたりすることはありません。

最初の方法は、送信側またはトランスポートメカニズムの状態を維持せずに、ファイアアンドフォーゲット方式で実行できるため、最も安価で、パフォーマンスが高く、実装オーバーヘッドが最小です。 2番目の方法では、トランスポート損失に対抗するために再試行が必要です。これは、送信側で状態を維持し、受信側で確認応答メカニズムを持つことを意味します。 3番目は最も高価であり、結果として最悪のパフォーマンスになります。これは、2番目に加えて、重複した配信を除外するために受信側で状態を維持する必要があるためです。

36
Amit Kumar

Flinkはこれらの用語を使用して、イベントがアプリケーションの状態に与える影響について説明します。毎日のウィンドウでタグApache-flinkを使用して、stackoverflowへの投稿をカウントしようとしているとします。私が正確に1回の保証で作業している場合、各投稿は正確に1回カウントされ、失敗があったとしても、分析は100%正確になりますそれを実現するには、方法と一部のデータを再処理する必要があります。 Flinkはこれをグローバルに一貫したスナップショットとストリーム再生の組み合わせで実現します。 少なくとも1回の場合、エラーが発生すると、一部の投稿が2回カウントされる可能性がありますが、すべての投稿がパイプラインによって分析されることが保証されます。また、を最大で1回使用すると、障害が発生した場合にスナップショットが作成されず、再生も行われません。

正確性とフォールトトレランスの点では1回だけが最適ですが、レイテンシが少し増えるという犠牲が伴います。

このテーマのより詳細な扱いについては、データアーティザンからのこのブログ投稿を参照してください- Apache Flink™による高スループット、低遅延、正確に1回のストリーム処理 -および Flinkの内部のドキュメント

3
David Anderson

ここ は読む価値のあるアグレッシブな記事です。

私はあなたの質問に答えようとします:

  • 大規模な分散システムでは、Exact-onceはフォールトトレラントではありません。これは、一部のシステムに障害が発生した場合、すべてのシステムが各メッセージについて合意することは不可能であるためです。あなたはexactを一度実装することができますが、それはあなた自身の費用のかかる調整でat at-least-onceの上になります。 TCPは、基礎となるIPプロトコルが信頼できない場合に信頼できるデータ転送をどのように保証するかを考えてください。
  • At-least-onceに加えて、exact-onceを実装することで、障害が発生した場合に重複が発生し(正確ではない場合)、重複排除が必要になります。
  • 高額な費用がかかるため、正確に1回は適切とは見なされませんが、少なくとも1回はほとんどの状況で十分です。
3
volatilevar

すべて(またはほとんど)のCloud Computing Patternsは簡潔に説明されています。私はあなたにそれを本当にお勧めします、見てみましょう: http://www.cloudcomputingpatterns.org

正確に1回の配信

多くの重要なシステムでは、重複メッセージは受け入れられません。メッセージングシステムは、重複する可能性のあるメッセージを自動的にフィルタリングすることにより、各メッセージが1回だけ配信されるようにします。

At-least-once Delivery

メッセージが失われたり、回復に時間がかかりすぎるような障害が発生した場合、メッセージは再送信され、少なくとも1回は確実に配信されます。

1
Ozkan