Como a 37signals roda o Basecamp e o HEY em Rails e em servidores próprios
A 37signals faz o Basecamp e o e-mail HEY com um time pequeno, e é a empresa por trás do Ruby on Rails. A stack é Rails com Hotwire e MySQL, publicada com a ferramenta própria Kamal em servidores da empresa, depois que ela saiu da AWS entre 2023 e 2025.
Copiar stackbasecamp.com Software de gestão de projetos e de e-mail (Basecamp e HEY) · Estados Unidos · fundada em 1999
Equipamentos FlashBlade com API compatível com S3 que substituíram o AWS S3 para cerca de 10 PB de arquivos.
Por quê: A memória flash custava quase o mesmo que discos comuns e era bem mais rápida, o que pesou na cópia gigante.
Como montaram
Rails, e HTML no lugar de JSON
O Basecamp e o HEY são apps em Ruby on Rails. Em vez de um app de página única pesado conversando com uma API JSON, a 37signals criou o Hotwire: o servidor manda o HTML pronto, o Turbo troca os pedaços da página e o Stimulus acrescenta um pouco de JavaScript onde precisa. O Hotwire nasceu para o HEY e hoje é código aberto.
A ideia é manter a montagem das telas no servidor, abrir rápido na primeira visita e deixar o desenvolvimento simples, sem perder a sensação de app de página única.
Em 2022, a 37signals gastou 3,2 milhões de dólares com a AWS. Só o S3 custou cerca de 908 mil dólares para uns 8 PB de arquivos, e a produção do HEY, com EKS, Aurora MySQL e ElastiCache, passou de 1 milhão. A empresa disse que a economia prometida pela nuvem nunca apareceu e o time nunca encolheu.
Em 2023 ela tirou da AWS o Basecamp, o HEY e mais cinco apps antigos e levou tudo para cerca de 700 mil dólares em servidores Dell, em data centers onde a Deft aluga o espaço, a energia e a banda. Ninguém foi contratado para isso. A conta de nuvem caiu para 1,3 milhão em 2024, e a empresa agora prevê mais de 10 milhões de dólares de economia em cinco anos.
Sair da nuvem exigia um jeito simples de mandar os apps para as próprias máquinas. A 37signals criou o Kamal, uma ferramenta de deploy para apps em máquinas virtuais ou servidores físicos. A versão 1 resolvia o caso deles, um app espalhado por vários servidores atrás de um balanceador, e a versão 2 também cuida de vários apps num servidor só.
O HEY foi o primeiro app no Kamal 2, com deploys mais rápidos e configuração mais simples. O Kamal Proxy, também feito em casa, hoje é o balanceador na frente de apps como o Fizzy.
Os arquivos eram a última coisa na AWS, perto de 1,5 milhão de dólares por ano. A 37signals instalou equipamentos da Pure Storage nos dois data centers principais, somando 18 PB e replicados a cerca de 1.600 km de distância, e a API compatível com S3 deixou a troca fácil do lado do app. A AWS dispensou a taxa de transferência de dados para uma saída completa.
A cópia de cerca de 10 PB, uns 5 bilhões de arquivos, terminou em menos de 10 dias. O time escolheu o FlashBlade, que usa memória flash, porque custava quase o mesmo que discos comuns e era bem mais rápido.
A 37signals vem levando para o banco SQL tarefas que antes precisavam de Redis. O Solid Cache guarda o cache do Basecamp em disco: a leitura é um pouco mais lenta que no Redis, mas o cache ficou 6 vezes maior, custa 80% menos e o tempo de resposta no percentil 95 caiu de 375 ms para 225 ms. O Solid Queue substituiu o Resque e o Redis nas tarefas em segundo plano do HEY.
O time também testou um banco SQLite por cliente no app novo, o Fizzy, e voltou para o MySQL, padrão da casa para apps SaaS, por conhecer bem, pela velocidade comprovada e por ter servidores de banco que crescem separados dos de app.