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