provin

USE CASE 04

IoT・イベント処理・at-most-once 配送

処理できたのに
届かなかった。
その差を記録に残す

処理が終わったことと、次のシステムへ届いたことを別に記録し、配送途中の欠落をあとから判別する。

処理は成功。
でも、下流にデータがない

センサーデータの変換処理は正常に終わり、アプリケーションのログにも成功と残っている。ところが、次のサービスには結果が届いていない。

処理の成功だけを記録していると、どこで消えたのかは分からない。処理が出力を作ったことと、その出力を配送できたことを分けて見られる必要がある。

01 入力を受け取り 処理を実行 変換や判定が 正常に完了 02 処理完了を 記録 出力を生成した事実を 署名付きで残す 03 配送途中で データが欠落 次のサービスには 結果が届かない 04 未配送の区間を 切り分ける 処理成功と配送失敗を 別の状態として確認 01 入力を受け取り 処理を実行 変換や判定が 正常に完了 02 処理完了を 記録 出力を生成した事実を 署名付きで残す 03 配送途中で データが欠落 次のサービスには 結果が届かない 04 未配送の区間を 切り分ける 処理成功と配送失敗を 別の状態として確認
処理の成功と、その後の配送ロスを別の記録から判別する流れ

provinを入れる場所

処理の完了と、次の区間への送信を別の記録として残す。署名付きの emission log と、下流に残った配送記録を突き合わせることで、届かなかった区間を特定できるようにする。

確認できること

  • 処理そのものが完了したか確認する。
  • 次の区間への送信記録が残っているか確認する。
  • 「処理済み・未配送」の状態を、処理失敗と分けて追う。

公開E2Eでの確認

公開 E2E の losswindow で、emission log と下流の配送記録の突合により、配送ロスを特定できることを確認。

記録の読み方

provinは配送の状態を記録する。配送を exactly-once に変えるものではない。

データの受け渡しに、検証できる記録を置く

provinは、受信・検証・処理・署名・発行を同じデータフローの中で扱う。接続方法と現在の実装範囲は、アーキテクチャと技術仕様で確認できる。