Uber's Failover Architecture: Reconciling Reliability and Efficiency in Hyperscale Microservice Infrastructure

Uber は、ビジネスの重要度に応じた差別化アーキテクチャを導入し、非クリティカルなサービスがクリティカルなサービスの予備容量を平時に共有し、ピーク時のフェイルオーバー時にのみ選択的に中断・復元される仕組み(UFA)を構築することで、2 倍の冗長構成から 1.3 倍へリソースを削減しつつ 99.97% の可用性を維持し、400 万コア中 100 万コア以上を削減することに成功しました。

Mayank Bansal, Milind Chabbi, Kenneth Bogh, Srikanth Prodduturi, Kevin Xu, Amit Kumar, David Bell, Ranjib Dey, Yufei Ren, Sachin Sharma, Juan Marcano, Shriniket Kale, Subhav Pradhan, Ivan Beschastnikh, Miguel Covarrubias, Chien-Chih Liao, Sandeep Koushik Sheshadri, Wen Luo, Kai Song, Ashish Samant, Sahil Rihan, Nimish Sheth, Uday Kiran Medisetty

公開日 Tue, 10 Ma
📖 1 分で読めます☕ さくっと読める

Each language version is independently generated for its own context, not a direct translation.

Uber の「UFA(Uber Failover Architecture)」という仕組みについて、難しい専門用語を使わず、身近な例え話を使って解説します。

🚕 結論:「無駄な予備車」を減らして、より賢く、安く、安全にする仕組み

この論文は、世界中で何百万人ものドライバーと乗客を支える巨大なシステム(Uber)が、**「いつも予備の車を大量に用意しすぎていた」という問題に気づき、それを「賢い使い分け」**に変えた話です。

その結果、100 万台以上の CPU(コンピューターの頭脳)を節約し、コストを大幅に下げつつ、サービスが止まるリスクも減らすことに成功しました。


1. 昔のやり方:「無駄な 2 倍の準備」

昔の Uber は、どんな小さなトラブルでもシステムが止まらないように、**「常に 2 倍の車(サーバー)」**を用意していました。

  • イメージ:
    東京と大阪にそれぞれ「本拠地」があります。もし東京のシステムが壊れても、大阪のシステムですべての注文を処理できるように、大阪には「東京の分+大阪の分」の車が常に待機していました。
  • 問題点:
    東京が壊れるなんて、1 年に 20 時間くらいしか起きません。つまり、1 年中、大阪の「予備の車」はほとんど動かず、ガソリン代(電気代)だけがかかっている状態でした。
    • 利用率:20%(車の 8 割は空っぽで止まっている)
    • コスト:非常に高い

2. 新しい仕組み(UFA):「賢い使い分けと非常用スペース」

Uber は、「本当に大規模な災害(システム全体が止まるようなこと)は滅多に起きない」というデータ分析に基づき、新しいルールを作りました。

A. サービスを「重要度」でランク付けする

すべてのサービスを同じ扱いにするのをやめました。

  • 重要サービス(T0, T1): 配車マッチングなど、止まったら大変なサービス。
  • 重要度低いサービス(T3〜T5): 内部ツールやテスト用など、少し止まっても大丈夫なサービス。

B. 「非常用スペース」を有効活用する

重要サービスのために用意していた「予備の車(非常用スペース)」を、普段は**「重要度の低いサービス」に貸し出します。**

  • 普段(安定時): 予備スペースを使って、低優先度のサービスも走らせています。これで車の利用率が 20% から 30% に上がります。
  • 非常時(システム障害): 重要度が低いサービスは、**「すみません、今から退いてください」**と即座に追い出します(プリエンプション)。
    • 重要サービスは、空いたスペースですぐに 2 倍の処理能力を発揮します。
    • 追い出された低優先度サービスは、後でクラウドの空きスペースや、別の場所(バッチ処理用のサーバー)に移動させて、1 時間以内に復活させます。

3. なぜこれが安全なのか?「依存関係の整理」

ここが最大のポイントです。
もし「重要サービス」が「低優先度サービス」に頼りすぎていたら、低優先度を追い出した瞬間に、重要サービスも止まってしまいます。これを**「依存関係の整理」**と呼びます。

  • 昔の問題: 重要な配車システムが、テスト用のツールに「エラーが出たら止まる」という依存関係を持っていた。
  • UFA の対策:
    • 自動検査: コードを自動でチェックし、「低優先度のサービスが止まっても、重要サービスは止まらないように(エラーを無視して進むように)」直すルールを作りました。
    • シミュレーション: 本番環境で実際に「低優先度を止めてみる」練習(ドリル)を何度も行い、システムが壊れないことを確認しました。

4. 具体的な成果:「100 万台の CPU 削減」

この仕組みを実際に導入した結果、以下のような素晴らしい成果が出ました。

  • コスト削減: 400 万台あった CPU のうち、100 万台以上を削減できました(不要な予備を整理したため)。
  • 効率アップ: 車の利用率が 20% から 30% に向上しました。
  • 安全性: 重要な配車サービスの可用性は、**99.97%**を維持(ほぼ止まらない)。
  • スピード: 実際にシステムが切り替わる際、必要な容量を8 分以内に確保できました。

5. 全体像を一言で言うと?

「いつも 2 倍の予備を用意して、大半は放置していた『無駄なコスト』を、低優先度の仕事に『臨時バイト』として使わせていた。
そして、いざという時は『バイト』を即座に解雇して、本職(重要サービス)に全力で働いてもらう。
そのために、バイトが辞めても本職が倒れないよう、事前に『依存関係』を整理した」

という、**「賢いリソース管理」**の成功物語です。


読者へのメッセージ

この論文は、単に「サーバーを減らした」という話ではありません。
「信頼性(止まらないこと)」と「効率性(安くすること)」は、実は両立できるということを、データと工夫で証明した画期的な事例です。
巨大なシステムを動かすには、単に「予備を多く持つ」だけでなく、「何が本当に重要で、何が犠牲にできるか」を冷静に判断し、自動化する仕組みを作ることが大切だと教えてくれます。