ADKのJoinNodeへ入る分岐は出力と失敗時の扱いをそろえる
ADK 2.xのグラフで並列処理を合流させるときは、各分岐が何を返すかを決める。JoinNodeが待つ処理の完了と、業務上必要な情報がそろったことを分けて検証する。
用語
- JoinNode
- 前段の並列処理を待ち、出力をまとめて後段へ渡すADKのノード。
- ファンアウト
- 1つの処理から複数の並列処理へ分岐すること。
- ファンイン
- 複数の処理結果を集めて次の処理へ進むこと。
図と例
独立した照会へ分岐 → 各分岐が結果と状態を返す → JoinNodeで合流 → 必須の結果を検証
仮定の例:在庫照会と配送日照会を並列実行する。配送日が取得できなかったときは「最短配送」と補わず、配送日未確定として確認へ戻す。
実際のサービス・製品では
Google ADK 2.x
ADKのグラフ資料はJoinNodeによる合流を説明し、合流へ入る前段のノードに出力が必要なことを注意点として示す。ここではADK 2.xのグラフを対象とする。
資料を読む
解説
合流後の処理で必須の結果を検証する。完了順を入れ替えた場合、分岐が失敗した場合、出力がない場合をそれぞれ確認する。
ファンアウトは独立した処理を並列に始め、ファンインは結果を集めて次へ進む構成。ADKのJoinNodeは前段の処理を待って出力をまとめる。合流に入るノードが出力を返さない場合にも注意が要る。各分岐に出典と結果の状態を付け、失敗時に再試行するか、明示的な失敗結果を返すか、全体を停止するかを実装で決める。「取得できなかった」を空の正常結果に置き換えない。並列化の対象には互いの結果を入力に必要としない処理を選ぶ。
トレードオフ
- 独立した照会を並列実行する
- 得るもの:互いを待たずに照会を進められる
- 払うもの:合流時に不足・失敗・出典を検証する必要がある
- 照会を順番に実行する
- 得るもの:前の結果を次の入力に使いやすい
- 払うもの:独立した処理でも待ち時間が積み重なる
さらに学ぶ
チェック
在庫と配送日の照会を並列化したが、配送日は取得に失敗した。適切な合流処理は?
- 配送日を空にして配送可能と回答する
- 配送日未確定を明示し、必要な確認へ戻す
- 先に届いた在庫の結果だけで配送日を決める
解答と解説
配送日未確定を明示し、必要な確認へ戻す
JoinNodeで処理を合流できても、必須の配送日が確定したことにはならない。失敗状態を保ち、取得していない値を推測で補わない。