stamatios
← Voltar ao feed
Guindastes robóticos reconstroem pilha de contêineres em um só mais leve, metáfora da reescrita do serviço da Checkly com agentes
Dev & Engenharia · Agentes

Checkly reescreve serviço Node.js em Go com Claude Code e zero incidentes

resumo de ~3 min

A Checkly reescreveu o Results Daemon, componente Node.js em JavaScript, para Go e deixou o Claude Code escrever o código. O serviço processa cerca de 92 milhões de mensagens por dia; segundo a empresa, a reescrita chegou à produção sem incidentes, com 70% menos pods e menor carga no banco. O sistema de tipos de Go também teria se mostrado mais adequado a agentes que JavaScript.

Problema e arnês

O daemon consome resultados do runner, grava em bancos, decide o desfecho da checagem, dispara alertas, agenda retries e publica atualizações WebSocket. Com o crescimento da Checkly e as checagens de uptime, o volume dobrou no último ano; o componente virou gargalo e acionava plantonistas com mais frequência. A decisão foi reescrevê-lo em Go com engenharia agêntica.

Antes que o agente escrevesse uma linha, a Checkly construiu um arnês de testes. O arnês trata o componente como caixa-preta e compara saídas determinísticas gravadas em arquivos "golden", gerados contra o legado, byte a byte. UUIDs e timestamps viram placeholders, mas ainda passam por checagem de tipo. Componentes ao redor são "fronteiras" administradas pelo arnês; PostgreSQL usa instância real, e filas SQS usam emulador próprio. Classes "oracle" conferem as saídas, com Playwright, Docker Compose e Toxiproxy como base.

Os testes dependem do resultado da checagem (Failed, Degraded ou Success) e da configuração no momento do recebimento, incluindo regras de retry e alerta. A cobertura vem da diversidade de entradas, resumida em (accountConfigs × groupConfigs × checkConfigs × resultOutcomes). Os dados vieram do data lake interno, com configurações e resultados das últimas 24 horas, carregados em ClickHouse. A meta de cobertura de código ficou entre 90% e 100%; relatórios foram devolvidos ao agente para apontar lacunas. A empresa ressalva que cobertura de código tende a não pegar casos de borda.

Reescrita e primeiro deploy

Um pré-requisito foi a migração anterior para um monorepo com Tilt. A Checkly acionou uma instância do Claude Code, usando Fable, para construir um serviço Go que consumisse filas, processasse mensagens e gravasse saídas, tendo o legado como referência. O critério de aceitação era passar no arnês. O agente rodou durante a noite e produziu cerca de 13 mil linhas de código, espelhando a arquitetura legada, dentro dos limites diários de uma assinatura de US$ 200. Uma tentativa anterior com Opus não atingiu o padrão e foi descartada. Após ajustes humanos, incluindo remoção de configuração gerada em tempo de execução e melhoria de observabilidade, o serviço foi para todos os ambientes menos produção.

O primeiro deploy revelou falhas de retry. A causa foi uma lacuna no arnês: a topologia local de filas não correspondia à produção. Localmente, retries iam para 3 filas conforme o tipo de checagem; em produção, o roteamento também depende de prioridade e tipo de hospedagem, totalizando 18 filas por região. O agente seguiu a topologia local. A Checkly alinhou o arnês à produção, removeu ramos exclusivos do local e refez o módulo de retry com supervisão humana. Um dia depois, o daemon processava contas internas, cerca de 3% da carga total.

Rollout e resultados

A migração de clientes foi feita em cohorts: contas gratuitas, pagas mensais e enterprise, com troca por feature flag e monitoramento de 24 a 48 horas após cada etapa. Os dois daemons rodaram em paralelo, e o CI passou o arnês contra ambos, bloqueando pull requests que falhassem em qualquer um. Bugs eram reproduzidos primeiro no arnês e corrigidos em seguida; a empresa afirma fechar cada caso em cerca de uma hora. Quase todos os problemas foram casos de borda não cobertos, e nenhum cliente notou a migração. Após uma semana, o workload legado foi desativado.

Nos resultados, a Checkly relata 60% menos sessões ativas médias no banco e cerca de 15% menos CPU de banco, com menos row locking e consultas mais performáticas via sqlc. A nova aplicação liberou cerca de 15 vCPU e 45 GB de memória, exigindo menos pods. A empresa conclui que o sistema de tipos de Go ajuda agentes e que o arnês permite entregar código escrito por agentes mais rápido, confiando na verificação para pegar regressões em vez de depender apenas de revisão manual.