Imagine que você tenha um serviço que é literalmente uma blackbox (você não consegue alterar nada nele) que só aguenta 200 requests por vez? Como você resolveria isso?
Este problema surgiu enquanto estava conversando com um amigo, no qual ele relatou que já viu um serviço desta forma escrito em uma lang particularmente bem antiga.
No caso, para abordar o problema, fiz o mock em Fastify como na imagem anterior.
Daí, quando executo o script abaixo (ele manda 10 mil requests de uma vez), o server simplesmente não consegue responser muitas das requests.
Neste caso, a solução aqui é simples.
Como você já sabe um limite conhecido que o seu server target consegue aguentar, você coloca um Proxy reverso na frente para regular a backpressure de requests dentro de um número razoável. Neste caso, fiz rapidamente em node mesmo.
O resultado é que, este Proxy Reverso só vai mandar 180 requisições de cada vez para que o servidor alvo processe, evitando esses crashs, mas atenção: isso é um paliativo, visto que como ele deixa as requests em idle até o server estar disponível, consequentemente a última requisição demorará mais a ser processada.
Repo com código: https://github.com/EronAlves1996/backpressure-monorepo
Top comments (0)