CSのTips一覧

ADKのJoinNodeへ入る分岐は出力と失敗時の扱いをそろえる

ADK 2.xのグラフで並列処理を合流させるときは、各分岐が何を返すかを決める。JoinNodeが待つ処理の完了と、業務上必要な情報がそろったことを分けて検証する。

用語

JoinNode
前段の並列処理を待ち、出力をまとめて後段へ渡すADKのノード。
ファンアウト
1つの処理から複数の並列処理へ分岐すること。
ファンイン
複数の処理結果を集めて次の処理へ進むこと。

図と例

設計の流れ(独自の例)

独立した照会へ分岐 → 各分岐が結果と状態を返す → JoinNodeで合流 → 必須の結果を検証

仮定の例:在庫照会と配送日照会を並列実行する。配送日が取得できなかったときは「最短配送」と補わず、配送日未確定として確認へ戻す。

実際のサービス・製品では

  • Google ADK 2.x

    ADKのグラフ資料はJoinNodeによる合流を説明し、合流へ入る前段のノードに出力が必要なことを注意点として示す。ここではADK 2.xのグラフを対象とする。

    資料を読む

解説

合流後の処理で必須の結果を検証する。完了順を入れ替えた場合、分岐が失敗した場合、出力がない場合をそれぞれ確認する。

ファンアウトは独立した処理を並列に始め、ファンインは結果を集めて次へ進む構成。ADKのJoinNodeは前段の処理を待って出力をまとめる。合流に入るノードが出力を返さない場合にも注意が要る。各分岐に出典と結果の状態を付け、失敗時に再試行するか、明示的な失敗結果を返すか、全体を停止するかを実装で決める。「取得できなかった」を空の正常結果に置き換えない。並列化の対象には互いの結果を入力に必要としない処理を選ぶ。

トレードオフ

独立した照会を並列実行する
得るもの:互いを待たずに照会を進められる
払うもの:合流時に不足・失敗・出典を検証する必要がある
照会を順番に実行する
得るもの:前の結果を次の入力に使いやすい
払うもの:独立した処理でも待ち時間が積み重なる

さらに学ぶ

チェック

在庫と配送日の照会を並列化したが、配送日は取得に失敗した。適切な合流処理は?

  1. 配送日を空にして配送可能と回答する
  2. 配送日未確定を明示し、必要な確認へ戻す
  3. 先に届いた在庫の結果だけで配送日を決める
解答と解説

配送日未確定を明示し、必要な確認へ戻す

JoinNodeで処理を合流できても、必須の配送日が確定したことにはならない。失敗状態を保ち、取得していない値を推測で補わない。

このTipを深掘りした記事