Prática recomendada para gerenciar a simultaneidade em uma cesta em um site de comércio eletrônico


18

Qual é a melhor prática para gerenciar o caso em que dois clientes adicionam ao mesmo tempo um produto cujo estoque era apenas 1?

Deve haver uma verificação no código da cesta para evitar que um desses 2 clientes adicione o mesmo produto?

Ou essa verificação deve ser realizada na fase de pagamento para, por exemplo, fazer uma segunda consulta para confirmar que o produto em questão ainda está presente no estoque (meios ainda não comprados pelo cliente simultâneo)?


Alguns sites, como reservas de bilhetes de teatro, colocar uma retenção por tempo limitado sobre o item para você, enquanto o pedido está sendo processado
Brad Thomas

Respostas:


10

Não existe uma resposta perfeita para esta pergunta e tudo depende de detalhes.

Como primeira linha de defesa, eu tentaria evitar tais situações, simplesmente não vendendo artigos tão baixos quanto possível. Se isso for possível, pode depender da situação e do tipo de artigo que você deseja vender. Na empresa em que trabalho, os artigos são removidos principalmente do site antes que o estoque acabe. Mas estamos vendendo toda a venda e os poucos artigos restantes são vendidos pelo nosso pessoal de vendas como ofertas especiais. Isso pode não ser uma opção para pequenas lojas, especialmente ao vender artigos com preços altos.

A solução para fazer a verificação dupla ao adicionar algo à cesta não é muito boa. As pessoas colocam muito em cestas sem nunca fazer um pedido. Portanto, isso pode bloquear este artigo por um determinado período de tempo.

Portanto, na minha humilde opinião para pequenos trabalhos, a melhor maneira é fazer um cheque final antes do pagamento, quando o pedido é realmente realizado. Na pior das hipóteses, você deve informar ao cliente que está ficando sem estoque no momento (o que para pequenas lojas não acontece com tanta frequência).


boa captura - baixo em estoque e preços altos
rohanagarwal 24/09

5

Acho que a melhor prática é escolher qual das opções abaixo é mais apropriada para um caso de negócios específico :

  1. Bloqueio offline otimista

    ... resolve esse problema ( problema de conflito de sessão ) validando que as alterações prestes a serem confirmadas por uma sessão não entrem em conflito com as alterações de outra sessão. Uma validação pré-confirmação bem-sucedida é, de certo modo, obter um bloqueio indicando que não há problema em prosseguir com as alterações nos dados do registro. Desde que a validação e as atualizações ocorram em uma única transação do sistema, a transação comercial exibirá consistência ...

  2. Bloqueio offline pessimista
    ... evita conflitos, evitando-os por completo. Isso força uma transação comercial a adquirir um bloqueio em um dado antes de começar a usá-lo, de modo que, na maioria das vezes, quando você inicia uma transação comercial, pode ter certeza de que a concluirá sem ser devolvida pela concorrência ao controle...
"Enquanto o Bloqueio offline pessimista pressupõe que a chance de conflito de sessão é alta e, portanto, limita a simultaneidade do sistema, o Bloqueio offline otimista assume que a chance de conflito é baixa. A expectativa de que o conflito de sessão não seja provável permite que vários usuários trabalhem com o mesmo dados ao mesmo tempo. "


5

Este é um problema de pessoas , assim como um problema de banco de dados, o bloqueio do banco de dados é fácil!

Dado que um cliente nunca pode verificar ...

Você tem duas opções básicas:

  • Você reserva um item para o cliente por um tempo fixo, digamos (20 minutos) depois que ele foi adicionado à cesta - depois de ele ter que verificar novamente o nível do estoque ou recomeçar. Isso geralmente é usado para ingressar em eventos ou assentos de companhias aéreas.

  • Ou você diz algo como "xxx normal despachado em 24 horas", mas reserva o estoque no momento do checkout; nesse caso, você deve permitir que eles cancelem o pedido após o checkout, se alguns itens estiverem em estoque, mas não outros. (Os níveis de estoque verde, amarelo e vermelho também podem funcionar bem, ou algum site diz "estoque baixo" quando o valor é 1 ou 2)


2

Como sempre, depende de quais são suas necessidades. Se você é Amazon e vende 100.000.000 de itens por dia, a sobrecarga para verificação e bloqueio preventivo provavelmente é proibitiva, e o problema de um cliente por dia não receber o item, afinal, é insignificante. Se você lida com raros ícones religiosos antigos que são únicos e caros, o oposto provavelmente se aplica. Você mesmo deve saber onde seu caso de negócios está localizado nesse espectro.


2

No nosso caso, usamos a fila de mensagens para manipular pedidos e a configuramos de modo que ele processe apenas um trabalho por vez em sequência no mesmo produto, de forma FIFO.

A ressalva é que você está adicionando uma nova sobrecarga a todo o processamento de pedidos, o que atrasa um pouco as coisas.


você está limitando a fila a ser consumida por apenas um consumidor
rohanagarwal

1

A melhor prática, para o usuário, é obviamente garantir que a segunda adição falhe. Mas isso atrasará todo o site por causa do caso de 0,1%.

A solução tecnicamente mais eficiente, e a única a maximizar as vendas, é permitir que ela seja bem-sucedida e, em seguida, tente atender os dois pedidos mais tarde - apenas porque você não possui estoque no momento, não significa que não o encontre. em uma emergência. Se você não puder, alguém deve entrar em contato com o usuário que teve sorte e pedir desculpas. Mas foi exatamente isso que causou alvoroço antes do Natal deste ano (este não é o único artigo que apareceu, então peço desculpas à Best Buy, mas foi o primeiro que encontrei).

Seu trabalho é apresentar todas as opções para a empresa, com prós e contras, e deixá-las decidir com base em seus conselhos. Se eles podem pagar um pequeno golpe ocasional na reputação para maximizar as vendas, então é justo; se não puderem e o tráfego for tão baixo que você possa verificar atualizações duplas rapidamente, essa também será a decisão deles.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.