Voltar ao blog PaaS Brasil

Deploy com baixa latência no Brasil: por que a localização do servidor importa

Como a distância física entre servidor e usuário afeta a latência do seu app, e o que fazer para entregar respostas mais rápidas para quem acessa do Brasil.

7 min de leitura

Por Guara Cloud Editorial

Testado com Node.js 20 / Docker / curl / mtr

Se o servidor está em Virginia e o usuário em São Paulo, cada requisição HTTP percorre pelo menos 10.000 km de fibra óptica antes de voltar com a resposta. Isso significa de 150 a 250ms de latência de rede pura, antes de contar processamento, banco de dados, TLS handshake e tudo mais que acontece entre o clique e a renderização.

Colocar o servidor no Brasil não resolve todos os problemas de performance do seu app, mas elimina um gargalo que nenhuma otimização de código consegue corrigir: a velocidade da luz.

Resposta rápida

Para ter baixa latência com usuários brasileiros, rode a aplicação em servidores localizados no Brasil. A diferença de RTT entre um servidor em São Paulo e um em US-East (Virginia) fica entre 100 e 200ms a menos por requisição. Para APIs que fazem múltiplas chamadas externas, isso se traduz em reduções ainda maiores no tempo total de resposta.

Principais pontos

  • A latência de rede entre Brasil e US-East tipicamente varia de 150 a 250ms, enquanto entre dentro do Brasil fica entre 5 e 40ms.
  • Cada requisição do frontend para a API soma essa latência. Em páginas com 5 ou 6 chamadas sequenciais, o atraso acumula.
  • O handshake TLS adiciona mais 1 a 2 RTTs. Servidor próximo significa handshake mais rápido.
  • Para aplicações que dependem de bancos de dados, a latência entre app e banco é tão importante quanto a latência entre usuário e app.
  • CDN resolve assets estáticos, mas não ajuda com chamadas de API dinâmicas.

Quando a localização do servidor importa

Vale a pena se preocupar com isso quando:

  • Seu público principal é brasileiro ou latino-americano.
  • A aplicação faz muitas requisições síncronas entre frontend e backend (SPAs, dashboards em tempo real, formulários com validação server-side).
  • O app depende de um banco de dados relacional e as queries são sensíveis a latência.
  • Você já otimizou o código e o tempo de resposta ainda está alto por causa da rede.
  • O produto é um SaaS B2B onde cada segundo a mais de carregamento gera tickets no suporte.

Quando a localização não muda muito

Não precisa investir nisso quando:

  • O backend é puramente assíncrono (fila de jobs, processamento batch) e ninguém está esperando a resposta em tempo real.
  • O app já está atrás de uma CDN global e serve principalmente conteúdo estático ou edge-cached.
  • O público é global e está distribuído uniformemente entre continentes. Nesse caso, edge computing ou múltiplas regiões fazem mais sentido que uma única localização.
  • A principal causa de lentidão é processamento pesado no servidor (geração de relatórios, ML inference), não ida e volta na rede.

Como medir a latência real antes de decidir

Antes de migrar ou escolher plataforma, meça. Três comandos resolvem:

Ping para servidor em Virginia
ping -c 10 ec2.us-east-1.compute.amazonaws.com
Ping para servidor em São Paulo
ping -c 10 sp1.example.com
Medir tempo total de resposta HTTP
curl -o /dev/null -s -w 'DNS: %{time_namelookup}\nConnect: %{time_connect}\nTLS: %{time_appconnect}\nTTFB: %{time_starttransfer}\nTotal: %{time_total}\n' https://sua-api.com.br/health

O campo time_connect mostra o RTT puro (ida e volta TCP). O time_appconnect mostra quanto tempo o TLS levou. Se o TTFB (time to first byte) é alto mesmo com connect rápido, o problema está no processamento, não na rede.

Outro teste útil é o mtr, que mostra cada hop no caminho:

mtr --report --report-cycles 10 sua-api.com.br

Se os hops finais estão em Ashburn ou Miami, seu servidor está nos EUA. Se estão em São Paulo (prefixos de AS da NIC.br, Equinix SP, etc.), está no Brasil.

O efeito cascata da latência em aplicações modernas

Uma SPA típica com React ou Next.js faz algo assim ao carregar uma tela:

  1. GET /api/dashboard (latência de rede + processamento)
  2. GET /api/dashboard/charts (depois que a primeira resolveu, para saber quais charts carregar)
  3. GET /api/user/preferences (paralelo com a segunda, se você programou certo)
  4. GET /api/notifications (paralelo também)

Com servidor em Virginia, cada uma dessas requisições carrega 170ms de latência. Com 4 requisições em cascata parcial, são facilmente 400 a 500ms só de rede. Com servidor em São Paulo, a mesma sequência leva 30 a 60ms de rede.

Isso sem considerar WebSocket, Server-Sent Events, ou qualquer coisa que mantenha conexão aberta e dependa de latência baixa para parecer responsivo.

O banco de dados também precisa estar perto

Esse ponto é negligenciado com frequência. Se a API está em São Paulo mas o PostgreSQL está em US-East, cada query carrega a latência transatlântica. Uma operação com 3 queries sequenciais soma 3x o RTT entre os datacenters.

A regra é simples: banco e aplicação precisam estar na mesma região. De preferência na mesma rede privada, sem passar pela internet pública. Plataformas de deploy que oferecem banco gerenciado na mesma região eliminam esse problema de uma vez.

Na prática: deploy com latência baixa

Abaixo o fluxo para subir um serviço no Brasil usando a Guara Cloud (que roda em São Paulo, sobre infraestrutura Linode LKE):

Antes de começar

  • Aplicação containerizada com Docker
  • Conta na Guara Cloud
  • Banco de dados (se necessário) também hospedado no Brasil

Passo a passo para deploy no Brasil

  1. Criar o serviço na Guara Cloud e escolher deploy via GitHub ou imagem Docker
  2. Configurar a porta HTTP via variável de ambiente PORT
  3. Adicionar variáveis de ambiente (DATABASE_URL, segredos, tokens) pelo dashboard
  4. Se precisar de banco, criar o PostgreSQL pelo catálogo e apontar a connection string
  5. Fazer o deploy, validar o endpoint público e checar os logs
  6. Medir a latência com curl a partir de uma máquina no Brasil para confirmar o RTT

Depois do deploy, confirme que o TTFB para um endpoint simples (health check, por exemplo) está abaixo de 50ms quando medido de São Paulo. Se estiver acima de 100ms, algo está errado na configuração ou na rota de rede.

Latência não é tudo

Ter servidor no Brasil ajuda, mas não substitui o básico:

  • Queries N+1 no banco vão ser lentas independente da região.
  • Falta de índices no PostgreSQL adiciona centenas de ms por query.
  • Imagem Docker grande (1GB+) significa deploys lentos e cold starts demorados.
  • Sem connection pooling, o overhead de abrir conexão com o banco a cada requisição some qualquer ganho de latência.
  • Falta de cache para dados que mudam pouco (Redis ou in-memory) multiplica as chamadas desnecessárias ao banco.

A localização do servidor é o último ajuste, não o primeiro. Primeiro você arruma o código, depois o banco, depois a rede.

Troubleshooting

Problemas comuns de latência

Problema TTFB alto mesmo com servidor no Brasil (acima de 100ms para health check)
Solução Verificar se o banco de dados está na mesma região e se connection pooling está ativo. Queries lentas entre app e banco em regiões diferentes são a causa mais comum.
Problema Latência inconsistente, ora 20ms ora 300ms
Solução Possível congestionamento em link intercontinental. Rodar mtr e confirmar que o tráfego não está passando por Miami ou Virginia em horários de pico.
Problema Cold start demorado após deploy novo
Solução Imagem Docker pesada. Usar multi-stage build e imagem alpine como base. Meta: imagem final abaixo de 200MB.
Problema TLS handshake demorado no primeiro acesso
Solução Confirmar que o certificado é servido com a cadeia completa. Certificados sem intermediário forçam o browser a buscar a chain extra, adicionando requests ao tempo de conexão.

Qual a diferença de latência entre servidor no Brasil e nos EUA?

Tipicamente entre 130 e 220ms a menos por requisição quando o servidor está em São Paulo e o usuário também está no Brasil. O RTT intra-Brasil fica entre 5 e 40ms contra 150 a 250ms para US-East.

CDN resolve o problema de latência?

CDN resolve para assets estáticos (JS, CSS, imagens) e conteúdo em cache. Para chamadas de API dinâmicas que retornam dados diferentes para cada usuário, o servidor de origem precisa estar perto.

Como sei se meu servidor está no Brasil?

Use ping, traceroute ou mtr para o domínio da API. Se os hops finais mostram provedores brasileiros (Ascenty, Equinix SP, NIC.br) e não americanos (Equinix Ashburn, Digital Realty Miami), o servidor está no Brasil.

O banco de dados também precisa estar no Brasil?

Sim, idealmente. Se a API está em São Paulo mas o banco em Virginia, cada query entre app e banco carrega a latência intercontinental. Mantenha banco e aplicação na mesma região.

Faz diferença para SEO ter servidor no Brasil?

O Google considera velocidade de carregamento como fator de ranking. Servidor no Brasil pode melhorar o TTFB e o Core Web Vitals para usuários brasileiros, o que indiretamente ajuda no SEO local.

Deploy no Brasil com latência baixa

Infraestrutura em São Paulo, HTTPS automático, logs e cobrança em reais. Seus usuários a 5ms de distância.

Começar grátis