at most once, at least once, exactly once
最大で一度だけデータを送信すること
普通にデータ送信するロジックを実装すれば実現できる
ロジックの実装がシンプル
データが失われる可能性がある
補間可能なメトリクスなど、幾らか失っても許容できるデータに適している
最低でも一度以上データを送信すること
成功するまでリトライし続けることで実現できる
重複してデータを送信する可能性がある
分散システムは至る所でエラーになりうる。例えばA-B間で通信する際、Bがデータを受け取ってもB->Aの応答が失われたりタイムアウトすればエラーとなる。このときAがリトライするとBは二重でデータを受け取ることになる。
受信側で重複を扱えるデータに適している
そもそも重複を無視できるなら問題ない
重複しうる場合でも、例えばメッセージIDを添付しておき、そのIDで重複を検出するなど、工夫によって冪等にできるなら問題ない
正確に一度だけデータが送信されることの保証
理想的だが、実装が難しい