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
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.
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.
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.
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.
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.