コンテンツにスキップ

同期・非同期の設計方針が妥当で、業務要件を満たしているか?

Type: Structure
Category: イベント・非同期処理
Audience: 設計初心者 / 設計中のチーム / レビュワー


背景・概要

同期処理はリアルタイム性・一貫性を優先し、非同期処理はスケーラビリティや耐障害性を重視する

要件に応じた使い分けが設計品質に直結する


  • 決済や在庫引当など整合性必須の処理は同期で行う
  • メール送信や通知処理は非同期ジョブに切り出す
  • API はリクエスト完了後にレスポンスを返すが、裏でドメインイベントが発行されて処理が継続する(CQRSの一種)

よくある失敗例

  • ユーザーに非同期ジョブの完了を待たせ、UXを悪化させる
  • 非同期イベントの送信失敗時にリカバリが用意されていない
  • 非同期の副作用が後から発火して一貫性が保たれずエラーが起きる

FAQ

Q. 処理のどこまでを同期に含めるべき?

A. ユーザーが即時で結果を知る必要のある処理までに限定し、それ以外は非同期で遅延処理するのが無難

Q. 非同期処理でエラーが起きた場合、どこで検知する?

A. 処理結果を明示的に保存 or 通知する構造(ステータス管理、死活監視)を用意すべき。監視と再実行の設計は必須


関連観点