サービスが落ちた時、みんなが一斉にリトライすると、小さな障害が全社規模のインシデントへ膨れ上がる。その「リトライストーム」をUberが抑え込んだ話です。
タイトル: How Uber Protects Against Retry Storms
URL:
下流サービスの障害時に上流の全サービスが同時にリトライしてトラフィックが指数関数的に増幅する「リトライストーム」を、「エラーの原因は誰か」を区別する仕組みで防ぐ取り組みです。
注目ポイント
🔍 エラーを「主張」するのは原因サービスだけ
下流呼び出しが成功したのに自サービスがエラーを返した場合だけ「エラーを主張」し、下流が原因なら「主張を取り下げる」。原因となっているサービスだけがリトライする設計です。
🔁 リトライ予算と伝播でさらに増幅を抑える
各ホップのリトライを一定割合に制限する「リトライ予算」で、増加を指数的ではなく乗法的に抑制。リトライが失敗すれば「主張されていない」状態を上流へ伝えてさらなる増幅を防ぎます。
📊 実際の障害で950万件のリクエストを阻止
2025年11月18日の障害では、この仕組みがなければトラフィックが46〜135%増加していたところ、実際には950万件の無駄なリクエストと直近呼び出し元の最大20万件の追加リクエストを阻止。全社的にもリトライストームの最大半径を25ホップから3ホップへ縮小しました。
サービスごとの手動チューニングなしに、共有インフラだけで障害の連鎖を自動的に止められる設計は、実運用への応用価値が高いと感じます。
#
信頼性エンジニアリング# #
分散システム#