Uber がリトライストームからどのように保護するか

2026/09/18 6:14

Uber がリトライストームからどのように保護するか

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

Uber は「Error Ownership」という名前の重要なインフラアップグレードを導入しました。これは、運用と信頼を損なう大規模なトラフィック急増(リトライストーム)を防ぐための文脈認識システムです。従来の無差別にリトライを実行する手法とは異なり、この新しいメカニズムは、サービス自身で発生したエラーなのか、単に依存サービスによって転送されたエラーなのかを区別します。エラーヘッダーを分析して故障の真の原因を特定することで、不要な連鎖を停止し、誤った症状として認識されたことに起因する不必要なカスケードを防ぎます。この革新は、複雑なアーキテクチャにおける標準的な 10% のリトライ予算が指数関数的なトラフィック増幅を抑制できなくなるという過去の制限に対処します。2025 年 11 月 18 日に導入予定であり、将来の障害の影響範囲を 20 ノードからわずか 3 ノードへと大幅に縮小すると予想されています(先行の観測では 25 から 3、平均では 20 から 2 への減少が確認されています)。結果として、Uber は最多で 950 万回もの虚偽リクエストをブロックでき、負荷を大幅に軽減しつつ、個別のカスタムコードなしに共有ミドルウェアを通じてすべてのサービスが自動的にこれらの保護を受け継ぐことができます。

本文

リトライ暴走(Retry Storms)からの解放:Uber が採用した「エラー所有権」アプローチ

はじめに

過去、リトライの暴走は業務運営とブランド信頼に多大な影響を与えてきました。従来の手法であるリトライ構成の微調整や予算緩和は手動設定を必要とし、深い依存関係チェーンやファナウトパターンによる影響増幅を可視化できませんでした。

  • 根本的な課題: 現在のリトライ挙動が文脈(コンテキスト)に感知していないため、発生タイミングを精密に制御できません。
  • 一律的なリスク: エラーと単純な伝播エラーを見分けることが難しく、条件付きではなく一律に適用されるアプローチは、中度〜重度の障害時には逆効果です。
  • ドミノ倒しの効果: 単一のサービス障害がトリガーとなり、上流依存サービス間のトラフィックが増幅され、スタック全体のインシデントにエスカレートします。

理論的には「下流のエラーコードを上流へ翻訳」するアプローチもありますが、Uber のような大規模なファナイン/ファナウトや頻繁な変更を伴う環境ではスケーリングしません。そこで開発されたのが**文脈感知型メカニズム「エラー所有権(Error Ownership)」**です。

背景:リトライの指数関数的増幅と解決策

コールチェーンにおけるリクエスト数の増幅

単純なコールチェーンにおいて、サービス D でエラーが発生し、各サービスが 1 回のリトライ構成を持っている場合、エラーは下流へ伝播するごとに指数関数的に増幅します。

ノード深さ (d)処理リクエスト数 (無制約の場合)
A0$ \eta $
B1$ 2 \times \eta $
C2$ 4 \times \eta $
D3$ 8 \times \eta $ (エラー発生点)
.........

これを単純化すると、ホップごとのリトライ数 $ R $ が一定の場合、処理リクエスト数は $ R^d \times \eta $ で表されます。

リトライ予算(Retry Budgets)の導入

各ホップで同じリトライ予算 $ B $ を設定することで増幅を抑制できます。新しい公式は以下のようになります。

$$ (1+B)^d \times \eta $$

例:リトライ予算を 10% に設定した場合

ノード深さ (d)処理リクエスト数
A0$ \eta $
B1$ 1.1 \times \eta $
C2$ 1.21 \times \eta $
D3$ 1.33 \times \eta $

このようにして、エラー発生点(ノード D)と上流(A, B)の間のリトライのみを制限すれば、下流サービスを過負荷にさせずに可用性を保証できます。

エラーの所有権(Error Ownership)

エラーは**「コールバック側(callee)」**で発生したことが重要です。

  • 症状: サービスが返すアウトバウンドエラー。
  • 原因: 下流からのインバウンドエラー。
  • 所有権: アウトバウンドで失敗せずともエラーを返した場合、そのサービスはエラーの「所有者」となり、リトライを制御する責任を持ちます。

計算による可用性向上 コールバック側での可用性低下が 10% 以内の場合、たった1 回のリトライでも呼出し側の観測される可用性を 99.9% から 99.9999991% まで引き上げることができます。これは「エラー所有権」の基礎であり、「高エラーレートの間、ランダム化されていないエラーに対して多くのリトライを行うことは利益にならない」という原則となります。

アーキテクチャ:エラー所有権の実装

解決策は**「エラー所有権」**を確立することです。サービス依存関係分析ソリューションを用い、インバウンド失敗とアウトバウンド失敗を相関させてエラー主張の有無を判断します。

エラー所有権付きのリトライ

呼出し側(Caller)は以下のロジックでリトライの是非を決定します。

  • 非協力的な環境: 下流サービスに分析ソリューションがない場合やコンテキスト伝播が欠落している場合、エラー主張ヘッダーが欠落することがあります。
  • 対応策: 下流からエラー主张が見当たらない最初のノードはエラーを引き下げ(unclaims)ることで、リトライ暴走の影響半径を制限します。

決定マトリクス:コールバックのエラー主張に応じたアクション

コールバックのエラー主張呼出し側がリトライすべきか?呼出し側から伝播されたエラー主張アクション
いいえはいN/ANA
はいはい欠落している引き下げる (Unclaim)
はいはい主張されている引き下げる (Unclaim)
はいいいえ主張されていないリトライ
  • 図 5 のシナリオ: エッジ A->B および B->C が fail-close(閉鎖型)の場合、ノード C で内部エラーが発生し主張された場合、ノード B は C をリトライすべきですが、失敗した場合はノード A に対して「主張されていない」というヘッダーで返す必要があります。これにより、ノード A は B のエラーを無視します。

サービス依存関係分析の重要性

下流呼び出しが失敗した場合と内部サーバーエラーが発生した場合が混在するシナリオ(図 7 のように両方が fail-open の場合)においても、サービス依存関係分析ソリューションはエラーを最初に下流に帰属させるように設計されています。

  • 正当なリトライ機会の逸失: サービス依存関係分析なしの場合、内部サーバーエラーであっても誤って引き下げられ、正当なリトライ機会を失う可能性があります。
  • 統計的裏付け: 6 ヶ月のデータ分析により、偶発的な失敗(両方が同時に失敗する確率)は約 2% です。最も最悪のケースでも、サービス依存関係分析ソリューションは fail-close の状況でインバウンド失敗とアウトバウンド失敗が相関している場合のみエラーを引き下げることができます。

「少なくとも一度のリトライ保証」

多くのサービスは fail-close アウトバウンドへのリトライが設定されていません。これを補完するために、下流からのエラーに対して**「リトライ基準を満たしたか」**を信号化するフラグを導入します。

  1. リトライミドルウェア: 下流のエラーを検知し、基準を満たしているかを計算・伝達。
  2. サービス依存関係分析ソリューション: このシグナルを活用し、インバウンドで fail-close 下流から返されたエラーを所有すべきかを決定。

これにより、コールチェーン上の少なくとも 1 つのサービスにリトライが構成されていれば、「少なくとも一度」の行動が可能となり、全体的な可用性低下を解消します(図 12)。

コンテキストドロップ処理

サービス内のコンテキストが破損した場合でも、エラー所有権は再試行可能なエラーを左側へシフトさせます。

  • 問題: コンテキストが壊れていると相関ができず、ノード C が D をリトライし続ける一方で、ノード B も C をリトライしようとします。
  • 解決: リトライ失敗時には「主張されていない」ヘッダーを付与することで、上流のノード A は B への再試行を行わないように制御されます。
  • 効果: これにより、最悪の場合に発生するリクエスト数を最大で32 倍削減できます。

本番環境における成果:Uber の事例

エラー所有権は現在、Uber のサービスメッシュ全体で実装・運用されています。これはユーザー面向きの API リクエストパスと深い依存関係チェーン全体で動作します。

2025 年 11 月 18 日のインシデント

Core Entity サービス(コールチェーン深さ 5 レベル)の基盤インフラトラブルにより高エラーレートが発生しました。単純なリトライ予算ではトラフィックが 46% から 135% に増大し、障害回復が遅延しましたが、エラー所有権が自動的に爆発半径(blast radius)を抑制しました。

抑制された影響:

  • 即時の停止: 劣化したサービスへの直近の呼出し側からの追加リトライ試行が停止されました(一部で最大 20 万件のリクエスト阻止)。
  • 上流への波及防止: ルートノードで集計した結果、驚くべき950 万回の虚偽のリクエストを止めることができました。

結論:劇的な改善と定量的効果

このアプローチは、劣化イベント中の総リクエスト量を劇的に削減しました。

メトリクス改善(エラー所有権启用後)

  • 最大リトライ暴走半径: 3まで低下(以前は 25)。
  • 平均値: 2まで低下(以前は 20)。

エラーを真正な解決責任者(サービス所有者)に限定することで、指数関数的なファナウトを防ぎました。これは単一ポイントの劣化によるカスケード障害からインフラを守りました。

謝辞

  • カバー写真は OpenAI の ChatGPT で生成されています。外部資産は使用されていません。
  • Uber Engineering の最新情報については、LinkedIn をフォローしてください。

同じ日のほかのニュース

一覧に戻る →

2026/09/18 5:36

Bend:CPU と GPU で証明により AI のミスをブロックする言語

## Japanese Translation: ## まとめ: Bend は、数学的証明をネイティブマシンコードに直接コンパイルすることで AI 生成のエラーを排除することを目的とした高性能プログラミング言語です。従来のランタイムチェックに依存する言語とは異なり、Bend は論理検証をコンパイル段階に統合し、速度を損なうことなく安全性を確保します。Python の構文の利便性と C レベルのパフォーマンス(1 コアでほぼ C と同じ速度、GPU では最大 100 倍高速)を統合し、CPU および GPU 双方での並列性を自動的に管理しつつ、スレッドやロックを必要とせず実行します。これは、アフィン依存型理論(BendTT)と専用の証明システムである `LAWS.bend` を組み合わせるユニークなアーキテクチャによって実現されています。これらのルールは人工知能エージェントが従う絶対的制約を定義し、一般的なバグが実行前に統合されることを数学的に防止します。Lean や Rocq に似る専門の型チェッカーである `PROOF.bend` が使用され、中規模なコードベースでは 1 秒未満でこれらの法の遵守を確認します。高度な証明アシスタントに着想をうけながら実行向けに最適化された Bend は、Linux および macOS 上でバックエンドタスク向けの安全かつ高速な AI 開発を可能にします。この技術を効果的に導入するためには、`curl -fsSL https://bend-lang.com/install.sh | sh` を使用してインストールし、`bend guide` コマンドを利用し、プロジェクトのドキュメント(例:`AGENTS.md`)に特定の検証指示を統合し、コードが宣言された法に準拠していることを確認するために `PROOF.bend` を実行する必要があります。主な機能には C 相当の速度、CUDA 並列性、Lean スタイルの証明、Python 構文が含まれます。プロジェクトが進化するにつれて、バグ報告を通じてその成長に貢献することをユーザーは推奨されます。

2026/09/18 6:13

bonsai 2 27B:サイズが 9 倍小さくても損失のない圧縮を実現

## 日本語翻訳: PrismML は、Qwen3.8 27B をベースとした現時点で最も高性能なモデルである Ternary Bonsai 2 27B をリリースしました。このモデルは、NVIDIA RTX 5090(最大 143 トークン/秒)や Apple M5 Max(46.8 トークン/秒)のようなコンシューマー向けハードウェアでの効率的なデプロイを目的として設計されています。モデルは{-1, 0, +1}の値を持つトライナリ重みと FP16 グループ別スケーリングを採用しており、フルプレシジョン版よりも 5.9GB のフットプリントで 9 倍以上小さく、かつ論理推論、数学、コーディング、指示に従うこと、ビジョン、エージェント型ツールの使用にわたる総合ベンチマークスコア(83.9 ポイント)において Qwen3.8 27B の 98.2% を達成しています。 262K トークンのコンテキストウィンドウとテキストおよび画像入力のネイティブサポートを備えた改良されたアーキテクチャに基づいた Ternary Bonsai 2 は、論理推論、コーディング、マルチモーダルワークフローにおいて強力なパフォーマンスを発揮しながら、通常誤差が累積しやすい領域でフルプレシジョンの能力を保持します。CUDA を通じて NVIDIA GPU や MLX を通じて Apple デバイス上で動作し、カスタムロービットカーネルを活用することで、小型モデルに比べエネルギー効率(RTX 4090 で 0.714 mWh/トークン)が優れており、運用コストを大幅に削減します。Apache 2.0 ライセンスの下でリリースされており、今日から完全な重みとホワイトペーパーが利用可能です。カリフォルニア工科大学の研究者らによって設立され、Khosla Ventures、Cerberus、Google の支援を受けた PrismML では、contact@prismml.com で連絡し、チーム協力によるモデルの適応化をサポートしています。

2026/09/18 1:25

ヒスター:閲覧したページや保存したファイルのためのプライベート検索エンジン

## Japanese Translation: Hister は、ユーザーのプライバシーをデフォルトで最優先する、訪問した Web ページおよびローカルファイルを対象とした、プライベートでローカルホストされた検索エンジンです。フルコンテンツをインデックス化し、必要不可欠なファビコンのみをダウンロードしますが、クラウドやテレメトリサービスにデータを送信することはありません。Hister は Linux、macOS、Windows、Docker、Nix 環境をシームレスにまたいで動作し、バイナリ(必要に応じて名義を変更)、Homebrew、Docker、または Nix を通じてインストールできます。プロジェクトは Go 1.26、npm、C コンパイラーの構築(`./manage.sh build`)を必要とし、AGPLv3 ライセンスの下で公開されています。Hister を使用するには、`./hister.exe listen`(Windows)または Linux/macOS における同等のコマンドを実行してローカルサーバーを開始し、ターミナルを開いたまま `http://127.0.0.1:4433` でインターフェースにアクセスします。Firefox または Chrome の拡張機能を通じてブラウザと統合して訪問したページを自動的に保存でき、Web インターフェース、TUI、コマンドライン、MCP を介した AI アシスタントを含む代替クライアントもサポートしています。高度な検索機能には、フィールドフィルタ、フレーズ、ワイルドカード、否定、エイリアス、結果の優先順位、および履歴またはディレクトリ用のインポートオプションが含まれ、設定された埋め込みエンドポイントによるオプショナルな意味検索も提供します。共有サーバー上での多ユーザー構成をサポートし、厳格なローカルデータ主権を遵守しています。開発者はビルド指示を `asciimoo/hister` リポジトリで確認でき、コミュニティサポートは Discord、IRCNet(`#hister`)、バグ報告用の GitHub issues、および `CONTRIBUTING.md` と `SECURITY.md` ドキュメントを通じて利用可能です。