Estudo de caso · Stack

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

A stack da Basecamp (37signals)

Abrir no montador

Biblioteca de interface

  • Hotwirehotwired.dev

    Monta a interface com Turbo e Stimulus, mandando HTML pronto do servidor.

    Por quê: Mandar HTML em vez de JSON mantém a montagem no servidor, abre rápido e deixa o desenvolvimento simples.

Hospedagem

  • Kamaldev.37signals.com

    Ferramenta feita em casa que publica os apps nos servidores da empresa.

    Por quê: Ela foi feita para a necessidade exata deles: espalhar um app por vários servidores atrás de um balanceador.

  • Kamal Proxydev.37signals.com

    Balanceador de carga na frente de apps como o Fizzy.

  • Dellworld.hey.com

    Servidores comprados pela empresa para rodar os apps depois de sair da AWS.

    Por quê: A economia prometida pela nuvem nunca veio e o time nunca encolheu, então ter as máquinas saiu mais barato.

  • Deftdev.37signals.com

    Aluga o espaço, a energia e a banda nos data centers onde ficam os servidores.

Banco de dados

  • MySQLdev.37signals.com

    Banco de dados padrão dos apps SaaS da empresa.

    Por quê: O time conhece bem, o desempenho é comprovado e os servidores de banco crescem separados dos de app.

  • SQLitedev.37signals.com

    Banco dos produtos ONCE que o cliente hospeda, com um arquivo por cliente.

Busca de dados

  • Solid Cachedev.37signals.com

    Cache guardado no banco para o Basecamp e o HEY, no lugar do Redis no Basecamp.

    Por quê: Ele dá um cache muito maior por uma fração do custo de caches em memória como o Redis.

  • Solid Queuedev.37signals.com

    Fila de tarefas guardada no banco para o HEY, no lugar do Resque e do Redis.

    Por quê: Eles queriam tarefas em segundo plano prontas de fábrica, sem cuidar das sete gems que o Resque exigia.

Framework de servidor

  • Ruby on Railsdev.37signals.com

    Framework por trás do Basecamp, do HEY e dos outros apps da empresa.

Arquivos

  • Pure Storagedev.37signals.com

    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.

Fontes:hotwired.dev dev.37signals.com

A conta da nuvem que puxou a saída

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.

Fontes:dev.37signals.com basecamp.com world.hey.com

Kamal: deploy sem Kubernetes

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.

Fontes:dev.37signals.com dev.37signals.com

O último passo: 10 PB fora do S3

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.

Fontes:world.hey.com dev.37signals.com

O banco de dados no lugar do Redis

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.

Fontes:dev.37signals.com dev.37signals.com dev.37signals.com

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.

  • Bootstrap
  • Cloudflare
  • Stimulus