Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implementar Rate-Limit #639

Closed
filipedeschamps opened this issue Aug 11, 2022 · 3 comments
Closed

Implementar Rate-Limit #639

filipedeschamps opened this issue Aug 11, 2022 · 3 comments
Labels
back Envolve modificações no backend

Comments

@filipedeschamps
Copy link
Owner

filipedeschamps commented Aug 11, 2022

Contexto

A Vercel fornece automaticamente proteção contra DDoS nos recursos estáticos, porém ela não pode fornecer isso para as APIs por não conhecer as regras de negócio do seu serviço. E quando se fala em DDoS, quase que automaticamente se pensa em Cloudflare, porém quanto mais eu pesquisei sobre colocar o Cloudflare na frente da Vercel, mais reclamações eu encontrei sobre os recursos mais avançados do Next.js, como ISR, stale-while-revalidate e invalidação de cache dos estáticos. Caso queira se dar o trabalho de pesquisar e encontrar algo que funcione sem atrito para todos os recursos do framework, por favor responda essa issue, porque seria uma maravilha controlar tudo pelo Cloudflare.

Então uma alternativa é colocar as Edge Middleware na frente e por lá fazer o controle das requisições. Este é um recurso que distribui computação/processamento na borda (na CDN) e lá conseguimos fazer a verificação da quantidade de requests que estão acontecendo por ip. Mas para isso não gerar uma latência grande entre onde está o state e o processamento dele, o state também precisa ser distribuído globalmente e pelo que vi muita gente recomenda utilizar o Upstash, pois lá é possível criar uma instância de Redis distribuída globalmente.

Então na execução desse rate limiting, vamos configurar um limite geral de requisições contra a API, e um limite específico e muito mais baixo para certos caminhos, como por exemplo fazer um POST contra a rota /api/v1/sessions.

Execução

@filipedeschamps
Copy link
Owner Author

@aprendendofelipe no passado eu tinha mandado essa dúvida pro suporte do Upstash, e responderam dois dias atrás, olha que curioso:

image

Pelo que entendi então, a escrita não funciona global, somente a leitura.

@aprendendofelipe
Copy link
Collaborator

No banco global tanto a escrita quanto a leitura ocorrem na réplica mais próxima. No caso da gravação, instantes após já ocorre a replicação. Acontece que isso não agrega nada para a implementação de um rate-limit, então é só um custo desnecessário.

@filipedeschamps
Copy link
Owner Author

Rate limit implementado em todas as rotas 🤝

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
back Envolve modificações no backend
Projects
None yet
Development

No branches or pull requests

2 participants