Estamos sofrendo um ataque DDoS, mas não estamos fazendo nada
- Há semanas alguém vem tentando realizar um ataque DDoS.
- Estão despejando milhões de requisições no servidor para tentar baixar um arquivo de configuração milhões de vezes.
- Só nos últimos 5 dias, tentaram fazer o download mais de 800 mil vezes, e o arquivo de configuração tem cerca de 200MB por download.
- A maior parte do tráfego vem da UE, especialmente da Alemanha e do Reino Unido.
- O ataque continua em andamento no momento em que este post está sendo escrito.
O que estamos fazendo nesta situação urgente
- Não bloqueamos os endereços IP do atacante.
- Usamos Cloudflare, mas não ativamos o modo "Under Attack".
- A CPU do servidor fica quase ociosa durante a maior parte do tempo, mesmo sob ataque.
- Em geral, não estamos fazendo quase nada.
Por que isso?
- O serviço consegue processar dezenas de bilhões de requisições por mês sem problemas e sem custo alto.
- Temos cerca de 8 serviços de API e bancos de dados, e mesmo sem cache conseguimos lidar com dezenas de bilhões de requisições por mês.
- Temos Cloudflare e largura de banda ilimitada.
Como isso é possível?
- O design do app TablePlus é simples, e essa filosofia também se aplica aos serviços de backend, que são mantidos no mínimo necessário.
- Não usamos serviços de terceiros como Vercel ou Netlify. Em vez disso, usamos servidores web sem limitações.
- No passado, a arquitetura monolítica virava gargalo por causa de VPS/processadores fracos, mas hoje VPSs potentes conseguem processar dezenas de bilhões de requisições por mês em uma única instância.
- Por isso, construímos serviços monolíticos para cada app. É fácil de implantar e manter.
Vamos falar sobre monolitos
- Há uma tendência de tornar tudo complexo, mas isso não é um problema até que haja pressão ou limitações.
- Escolhemos monolitos porque detestamos complexidade. Integramos em um único serviço tudo o que o app precisa.
- O deploy é simples. Só é necessário um único arquivo de configuração, build e deploy.
- Como há menos dependências, fica mais fácil debugar e identificar gargalos.
Um único framework web em Go ou Rust, se bem implementado, consegue lidar com dezenas de bilhões de requisições por mês
- Escolhemos frameworks de alto desempenho.
- Indexamos o banco de dados para reduzir o tempo de busca à medida que o conjunto de dados cresce.
- Separamos o banco de dados principal do banco de logs/uso para que problemas de desempenho não afetem o negócio principal.
- Usamos um proxy reverso robusto, como o Nginx, para processar e distribuir requisições ao núcleo da API.
- Colocamos tudo atrás do Cloudflare e configuramos corretamente.
- Usamos um CDN com proteção contra DDoS.
- Não colocamos arquivos grandes para download em VPS sem CDN ou cache.
Vamos falar sobre deploy
- Na TablePlus, simplificamos o processo de deploy o máximo possível.
- Não usamos Docker, Kubernetes nem containers, e não precisamos de configuração de ambiente.
- Usamos binários. Eles podem ser copiados e executados como processos em servidores Linux.
- Escolhemos Go e Rust. São linguagens de alto desempenho e conseguem gerar arquivos binários para deploy.
Atualização
- A Vercel entrou em contato e disse que tem recursos que podem proteger o site nesse tipo de situação.
- Com controle de gastos, é possível definir um limite de despesas, e também há um modo de desafio contra ataques, semelhante ao modo "Under Attack" da CF.
Opinião do GN⁺
- Este artigo destaca a importância de uma infraestrutura robusta e de uma estratégia de deploy simplificada para manter a operação estável do serviço, mesmo diante de ataques DDoS.
- A arquitetura monolítica mostra vantagens em reduzir complexidade, simplificar o deploy e favorecer a otimização de desempenho.
- O uso eficaz de serviços em nuvem e CDN para ganhar resiliência contra ataques DDoS pode servir como um bom exemplo para outras empresas.
- Essa abordagem também oferece insights sobre como montar uma infraestrutura com boa relação custo-benefício, especialmente para startups em estágio inicial e pequenas e médias empresas.
- No entanto, como a abordagem monolítica não é adequada para todos os sistemas ou aplicações, é importante escolher a arquitetura de acordo com as necessidades e o contexto de cada caso.
1 comentários
Opiniões no Hacker News
Resumo do primeiro comentário:
Resumo do segundo comentário:
Resumo do terceiro comentário:
Resumo do quarto comentário:
Resumo do quinto comentário:
Resumo do sexto comentário:
Resumo do sétimo comentário:
Resumo do oitavo comentário:
Resumo do nono comentário:
Resumo do décimo comentário: