6
インフラレベルの非同期処理のつらみ
処理が分断されることで調査箇所が増える
アプリケーションレベル インフラレベル
Ex. 重い処理などでメインスレッドのブロッキングを防ぐためにバックグ
ラウンドスレッドで非同期に処理する
Ex. メッセージキューサービスを挟んで重い処理などを専用のサービス
に任せて非同期に処理する
Service B の処理が失敗した場合
Service B のアプリケーションがバグる
Service B のホストがバグる
→ Service B 内の話だから追跡しやすい
Slide 7
Slide 7 text
7
インフラレベルの非同期処理のつらみ
処理が分断されることで調査箇所が増える
アプリケーションレベル インフラレベル
Ex. 重い処理などでメインスレッドのブロッキングを防ぐためにバックグ
ラウンドスレッドで非同期に処理する
Ex. メッセージサービスを挟んで重い処理などを専用のサービスに任せ
て非同期に処理する
Service B の処理が失敗した場合
Service B のアプリケーションがバグる
Service B のホストがバグる
→ Service B 内の話だから追跡しやすい
Service B の入力がバグる
→ なぜこのようにバグったか追跡しづらい
Slide 8
Slide 8 text
8
インフラレベルの非同期処理のつらみ
処理が分断されることで調査箇所が増える
アプリケーションレベル インフラレベル
Ex. 重い処理などでメインスレッドのブロッキングを防ぐためにバックグ
ラウンドスレッドで非同期に処理する
Ex. メッセージサービスを挟んで重い処理などを専用のサービスに任せ
て非同期に処理する
Service B の処理が失敗した場合
Service B のアプリケーションがバグる
Service B のホストがバグる
→ Service B 内の話だから追跡しやすい
Service B の入力がバグる
→ なぜこのようにバグったか追跡しづらい
入力は Service A が送出しているから!
Slide 9
Slide 9 text
9
インフラレベルの非同期処理のつらみ
処理が分断されることで調査箇所が増える
アプリケーションレベル インフラレベル
Ex. 重い処理などでメインスレッドのブロッキングを防ぐためにバックグ
ラウンドスレッドで非同期に処理する
Ex. メッセージサービスを挟んで重い処理などを専用のサービスに任せ
て非同期に処理する
Service B の処理が失敗した場合
Service B のアプリケーションがバグる
Service B のホストがバグる
→ Service B 内の話だから追跡しやすい
Service B の入力がバグる
→ なぜこのようにバグったか追跡しづらい
入力は Service A が送出しているから!
(もしかしたらメッセージキューもバグるかも)
Slide 10
Slide 10 text
10
一連のトレースになっていると嬉しい、けど・・
コンテキストの欠如
いわずもがなですが、コンテキストが伝播することで
分散トレーシングが可能となる
Service A と Service B では PubSub などの
メッセージキューを介することでコンテキストが
伝播せずに損失してしまう・・・
コンテキスト伝播の流れ
これをどうにか解決したい!
Slide 11
Slide 11 text
11
直感的に思いつくのは・・
メッセージにコンテキストを含める
Service A がパブリッシュするメッセージに
コンテキストを含める
Service B がサブスクライブしてメッセージに含まれる
コンテキストを利用して生成したスパンを紐づける
オブザーバビリティツール上で非同期処理でも
一連のトレースとして観測することできる!
コンテキスト伝播の流れ
受け渡すメッセージに
コンテキストを含める
もっとスマートに解決したい!
CREDITS: This presentation template was created by Slidesgo, and includes icons
by Flaticon, and infographics & images by Freepik
Thanks!
21
@pHaya72
@t_hayashi