a piada da "fila virtual" e sistemas resilientes

semanas atrás estava pensando sobre como usar "fila virtual" em ecommerces, sites de vendas, eventos online etc virou piada p/ muitos desenvolvedores

para alguns parece incompetência um site não aguentar uma Black Friday, mas...
se pensarmos bem, se trata de uma forma honesta de lidar com um problema complexo e de grande escala.

explico....

uma Black Friday acontece 1x por ano e requer bastante esforço e *meses de preparo* dos times envolvidos para lidar com uma demanda dessa maginitude.
provavelmente ter uma infra elastica ajuda demais aqui, mas não dá pra reduzir a solução apenas ao poder dos provedores de nuvens.

crescer seu sistema de forma elastica e escalável significa que sistemas terceiros (provedores de pagamento?) tem que crescer na mesma proporção.
independente se o gargalo é um sistema terceiro ou banco de dados ou outro recurso de infra, é exatamente ai onde reside boa parte da complexidade.

aumentar o número de máquinas não resolve.

E agora?
o sistema pode continuar aceitando as requisições até ver no que dá, não aguentar mais, colapsar e simplesmente crashar

qnd um sistema está sobrecarregado (system overload) ele não tem muitas opções sem o poder elástico das nuvens

falando em opções...
quando um sistema não consegue mais lidar com a demanda ele tem 2 opções:

1. dropar as requisições (load shedding);

2. bloquear/desacelerar as requisições (backpressure);

dependendo do negócio ou feature fazer load shedding é fora de cogitação.

perder uma venda? no way!
o que nos resta é backpressure.

que significa desacelerar a entrada (input do usuário ou sistema) para que nosso sistema tenha condições de continuar funcionando e processando as requisições em pendentes.

para isso podemos rejeitar as requisições com status 503 ou enfileirar
retornar 503 ("too busy") iria deixar o usuário muito puto e provavelmente o faria desistir da compra após algumas retentativas

a idéia aqui é deixar o usuário ciente da sobrecarga (sinaliza-lo) para que ele decida se vai retentar após X tempo ou desistir de vez
usuáiro desistir? no way!

ao olhar para isso fica mais "aceitável" fazer backpressure *enfileirando* os usuários com a tal da "fila virtual"

poderia enfileirar no lado servidor? claro, mas as vezes não é possível ou este é o problema no fim das contas
oq estou querendo dizer é q implementar "fila virtual" pode siginificar q tem-se um time que reconhece sua deficiência e conhece os limites do sistema

conhecer os limites do seu sistema é o que nos permite desenhar sistemas que degradam de forma graciosa (graceful degradation)
enfim...

a tal da "fila virtual" no fim das contas é uma forma honesta de desenhar um sistema resiliente o suficiente para suportar uma Black Friday para não colapsar e crashar por inteiro

além doq, uma fila virtual não é das piores coisas qnd vc quer comprar aquele PS5, né?

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Maharaja of the Legacies

Maharaja of the Legacies Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!

Follow Us on Twitter!

:(