Estudo de caso · Stack

Como o Airbnb saiu de um monólito em Rails para serviços em Kubernetes

O Airbnb começou como um único app em Ruby on Rails e, quando o time de engenharia passou de algumas centenas de pessoas, quebrou tudo em serviços em Java. Hoje roda na AWS e em Kubernetes, com o site em React e TypeScript, apps nativos para iOS e Android e ferramentas de dados que ele mesmo criou e abriu, como Airflow e Superset.
Copiar stackairbnb.com Marketplace de hospedagens e experiências · Estados Unidos · fundada em 2008

A stack da Airbnb

Abrir no montador

Linguagem

  • Javainfoq.com

    Linguagem principal dos serviços que substituíram o monólito.

    Por quê: As threads deixam os serviços tratar requisições em paralelo, o que o monólito em Ruby não conseguia.

  • TypeScriptmedium.com

    Linguagem oficial do código front-end web.

Biblioteca de interface

  • Reactmedium.com

    Monta a interface do airbnb.com, renderizada no servidor pelo Hypernova.

Hospedagem

  • AWSairbnb.tech

    Nuvem onde o Airbnb roda, incluindo volumes EBS para os bancos de dados.

  • Kubernetesairbnb.tech

    Clusters administrados pela própria empresa que rodam serviços, o Viaduct e até bancos distribuídos.

  • Istioairbnb.tech

    Malha de serviços que carrega dezenas de milhões de requisições por segundo no pico desde 2019.

Banco de dados

  • MySQLairbnb.tech

    Principal banco relacional, espalhado por centenas de clusters.

Framework de celular

  • Swiftairbnb.tech

    Linguagem do app nativo para iOS.

  • Kotlinairbnb.tech

    Linguagem do app nativo para Android e da API tipada do Viaduct.

Animação

  • Lottieairbnb.tech

    Biblioteca da casa que roda animações de alta qualidade nos apps nativos.

Build e runtime

  • Bazelairbnb.tech

    Sistema de build do monorepo de Java, Kotlin e Scala.

    Por quê: Os builds no Gradle tinham ficado lentos e instáveis, e o Bazel traz isolamento e cache remoto compartilhado para todos os repositórios.

Busca de dados

  • GraphQLairbnb.tech

    Base do Viaduct, a camada da casa que dá a todo time uma interface única para todos os dados.

  • Kafkaairbnb.tech

    Registro de replicação que garante as gravações no banco chave-valor do Airbnb.

    Por quê: A latência estável de milissegundos no p99 deu confiança para carregar as gravações durante as migrações.

  • Apache Airflowairflow.apache.org

    Agenda fluxos de dados como grafos de tarefas; foi criado no próprio Airbnb.

Framework de servidor

  • Ruby on Railsinfoq.com

    Framework do Monorail, o monólito original por trás do airbnb.com.

Análise de uso

  • Apache Supersetairbnb.tech

    App de BI que o Airbnb criou e abriu.

Como montaram

Monorail: quando o monólito virou o gargalo

Por anos o Airbnb rodou no Monorail, seu monólito em Ruby on Rails. Por volta de 2015, com mais de 200 engenheiros mandando cerca de 200 commits por dia, os deploys ficavam travados em média umas 15 horas por dia por causa de reversões. Um único banco compartilhado fazia uma mudança num canto quebrar outra coisa sem relação.

As filas de deploy levavam horas e ninguém sabia direito quem cuidava de quê. Nas palavras da engenheira Jessica Tai, os deploys do Monorail eram uma dor enorme que derrubava a produtividade do time.

Fontes:infoq.com

A mudança para serviços em Java

Então o Airbnb quebrou o Monorail em serviços. Java e Ruby eram permitidos, mas muitos serviços foram para Java porque as threads deixavam rodar requisições em paralelo, coisa que o monólito em Ruby não fazia. Cada serviço descrevia sua API em Thrift, que gerava os clientes em Java e Ruby e já trazia métricas e alertas padronizados.

Em 2018 já eram mais de 250 serviços e 1.000 endpoints no framework. O deploy caiu de horas para minutos, os deploys semanais subiram de 3.000 para 10.000 e a página de busca ficou cerca de 3 vezes mais rápida.

Fontes:infoq.com

Site em React e TypeScript, celular de volta ao nativo

No site, o Airbnb deixou as páginas montadas inteiras pelo Rails e passou para React, renderizado no servidor por um serviço próprio em Node, o Hypernova. Depois tornou o TypeScript a linguagem oficial do front-end web e criou o ts-migrate para converter milhões de linhas de uma vez.

No celular, o Airbnb apostou no React Native e anunciou em 2018 que ia abandoná-lo para focar no desenvolvimento nativo. Hoje os apps são escritos em Swift e Kotlin, com bibliotecas da casa como o Epoxy para montar telas e o Lottie para animações.

Fontes:medium.com medium.com medium.com airbnb.tech

AWS, Kubernetes e uma camada GraphQL sobre tudo

O Airbnb roda na AWS com clusters de Kubernetes que ele mesmo administra, e espalha até bancos distribuídos por três clusters, cada um numa zona diferente, para que um deploy ruim atinja só uma zona. O principal parque relacional é MySQL, centenas de clusters com milhões de consultas por segundo, que acabou de subir da versão 5.7 para a 8.0.

Para organizar a enorme quantidade de serviços, o Airbnb criou o Viaduct, uma camada GraphQL que dá a todo time um lugar só para ler qualquer dado. Hoje o enorme monorepo de Java, Kotlin e Scala é compilado com Bazel, depois de uma saída do Gradle que levou 4 anos e meio.

Fontes:airbnb.tech airbnb.tech airbnb.tech airbnb.tech

Ferramentas de dados que viraram padrão no mundo aberto

Várias ferramentas que outras empresas usam hoje saíram do time de dados do Airbnb. O Maxime Beauchemin começou o Airflow lá em outubro de 2014 para agendar fluxos de dados, e ele virou código aberto em 2015. O Superset, um app de BI, saiu do mesmo lugar.

Mais recentemente o Airbnb lançou o Chronon, uma plataforma que entrega dados para modelos de machine learning.

Fontes:airflow.apache.org airbnb.tech

Também detectado no site

Achado na página inicial com as regras abertas do Wappalyzer (HTML, scripts e cabeçalhos). Mostra o que roda no navegador, não o backend inteiro.

  • Akamai
  • Akamai Bot Manager
  • Arkose Labs
  • C3.js
  • Envoy
  • GeeTest
  • HSTS
  • HTTP/3
  • Klarna Checkout
  • Nginx
  • PayPal
  • Plaid
  • RequireJS
  • Ruby