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

O artigo apresenta a Arquitetura de Failover da Uber (UFA), uma solução que substitui o modelo de capacidade 2x por uma abordagem diferenciada baseada em criticidade, reduzindo o provisionamento de 2x para 1,3x e eliminando mais de um milhão de núcleos de CPU enquanto mantém uma disponibilidade de 99,97% através da preempção seletiva de serviços não críticos e da automação de salvaguardas.

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

Publicado Tue, 10 Ma
📖 4 min de leitura☕ Leitura rápida

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

Imagine que a Uber é como uma cidade gigante e movimentada, onde milhões de pessoas dependem de motoristas e entregadores para viver e se locomover. Para garantir que nada pare, a empresa construiu uma infraestrutura digital (seus "servidores") com uma regra muito conservadora: ter o dobro do necessário.

Era como se, para cada cidade, a Uber mantivesse duas frotas de carros idênticas: uma rodando o dia todo e outra parada, apenas esperando, pronta para entrar em ação se a primeira falhasse. Isso garantia segurança, mas era um desperdício enorme de dinheiro e energia, pois metade dos carros ficava ociosa 99% do tempo.

O artigo descreve como a Uber criou uma nova arquitetura, chamada UFA (Uber Failover Architecture), para resolver esse problema sem perder a segurança. Eles transformaram esse sistema de "segurança máxima e desperdício" em um sistema inteligente e eficiente.

Aqui está a explicação simplificada com analogias do dia a dia:

1. O Problema: O "Seguro Demais"

Antes, a Uber tratava todos os seus serviços da mesma forma. Desde o sistema que conecta você ao motorista (crítico) até ferramentas internas de teste (menos críticas), tudo tinha que ter o dobro de capacidade.

  • A Analogia: Imagine um hospital que, para garantir que nunca falte uma cama, constrói duas alas idênticas. Uma é usada pelos pacientes, e a outra fica vazia, com médicos e equipamentos parados, apenas em caso de emergência. Isso custa uma fortuna e deixa os recursos subutilizados.

2. A Solução: A "Fila de Prioridade" Inteligente

A grande descoberta da Uber foi que desastres reais (quando uma cidade inteira para) são extremamente raros. A maioria das falhas é pequena. Então, eles criaram um sistema de níveis de prioridade:

  • Serviços Críticos (Sempre Ativos): São como os bombeiros e ambulâncias. Eles têm garantias de que, se uma região cair, eles têm espaço reservado e imediato para continuar trabalhando.
  • Serviços Não Críticos (Oportunistas): São como os carros de aplicativo comuns ou entregas de comida. Eles podem usar o espaço "reservado" dos críticos enquanto tudo está normal.
    • A Analogia: Imagine que o espaço reservado para os bombeiros é um estacionamento vazio. Enquanto não há incêndio, carros comuns (serviços não críticos) podem estacionar lá de graça. Assim, o estacionamento não fica vazio.

3. O Momento da Crise: "Desalojamento Rápido"

O que acontece se o desastre acontecer de verdade e a região precisar ser evacuada?

  • O Processo: Assim que o sistema detecta uma falha grave, ele age como um gerente de hotel em uma emergência.
    1. Ele pede imediatamente para os carros comuns (serviços não críticos) saírem do estacionamento reservado.
    2. Esses carros são "desalojados" e enviados para uma área de espera (nuvem pública ou servidores de processamento de dados em lote) que aguenta uma pequena espera.
    3. O espaço liberado é imediatamente ocupado pelos bombeiros (serviços críticos), que agora têm todo o espaço necessário para lidar com o caos.
  • O Resultado: Os serviços críticos continuam funcionando sem interrupção. Os serviços não críticos sofrem uma pequena pausa (talvez 1 hora) para serem realocados, mas não param para sempre.

4. O Grande Desafio: "Não Quebrar a Cadeia"

Havia um risco: e se um serviço crítico dependesse de um serviço não crítico para funcionar? Se o não crítico fosse desligado, o crítico quebraria.

  • A Solução: A Uber criou uma "equipe de detetives" (ferramentas de análise automática) que vasculharam milhões de conexões entre seus sistemas. Eles encontraram e consertaram mais de 4.000 dependências perigosas.
  • A Analogia: Era como descobrir que o sistema de iluminação de um hospital dependia de um gerador de uma cafeteria. Eles tiveram que instalar geradores independentes para o hospital, garantindo que, se a cafeteria desligar, o hospital continue iluminado.

5. Os Resultados: Mais Eficiência, Mesma Segurança

Com essa nova arquitetura:

  • Economia: A Uber conseguiu eliminar 1 milhão de processadores (CPUs) de sua frota global. Isso é como desligar uma usina inteira de energia que estava sendo desperdiçada.
  • Uso: A utilização dos recursos subiu de 20% para 30%.
  • Segurança: A disponibilidade do serviço (o tempo em que o app funciona) permaneceu em 99,97%, mesmo durante falhas reais.

Resumo em uma Frase

A Uber aprendeu que, em vez de ter um "exército de reserva" parado e caro o tempo todo, eles podem usar um sistema inteligente onde serviços menos importantes ocupam o espaço de reserva durante o dia, e são rapidamente movidos para o lado quando a emergência acontece, garantindo que os serviços vitais nunca parem.

É a diferença entre ter um guarda-costas parado 24 horas por dia para proteger um cofre que só é aberto uma vez por ano, e ter um sistema de alarme e segurança que se ativa automaticamente apenas quando necessário, permitindo que o guarda-costas faça outras tarefas úteis durante o resto do tempo.