Le best practice per gestire la concorrenza in un paniere in un sito di e-commerce

17

Qual è la migliore pratica per gestire il caso in cui due clienti aggiungono nello stesso tempo un prodotto il cui stock era solo 1?

Deve esserci un controllo nel codice del carrello per evitare che uno di questi 2 clienti aggiunga lo stesso prodotto?

O questo controllo deve essere effettuato nella fase di pagamento, ad esempio effettuando una seconda query per confermare che il prodotto in questione è ancora presente in magazzino (significa che non è stato acquistato ancora dal cliente concorrente)?

    
posta Mik378 08.02.2012 - 12:51
fonte

6 risposte

9

Non esiste una risposta perfetta per questa domanda e tutto dipende dai dettagli.

Come prima "linea di difesa" tenterei di evitare tali situazioni, semplicemente non vendendo articoli che fossero bassi se possibile. Se questo è possibile, può dipendere dalla situazione e dal tipo di articoli che vuoi vendere. In azienda lavoro, gli articoli sono per lo più rimossi dal sito Web prima che finisca il magazzino. Ma stiamo vendendo intere vendite e gli articoli rimanenti sono venduti dai nostri venditori come offerte speciali. Questo potrebbe non essere un'opzione per i negozi di piccole dimensioni, soprattutto quando si vendono articoli costosi.

La soluzione per eseguire il doppio controllo quando si aggiunge qualcosa al carrello non è molto buona. Le persone mettono molto in canestri senza mai effettuare un ordine. Quindi questo potrebbe bloccare questo articolo per un certo periodo di tempo.

Quindi, a mio modesto parere per piccoli lavori, il modo migliore è quello di fare un controllo finale prima del pagamento, quando l'ordine viene effettivamente effettuato. Nel peggiore dei casi devi dire al cliente che sei a corto di azioni in questo momento (cosa per i piccoli negozi non succederà spesso).

    
risposta data 08.02.2012 - 13:04
fonte
5

Penso che la migliore pratica sia scegliere quale delle seguenti opzioni è più appropriata per un particolare caso aziendale :

  1. Blocco offline ottimista

    ...solves this problem (problem of session conflict) by validating that the changes about to be committed by one session don't conflict with the changes of another session. A successful pre-commit validation is, in a sense, obtaining a lock indicating it's okay to go ahead with the changes to the record data. So long as the validation and the updates occur within a single system transaction the business transaction will display consistency...

  2.   
  3. Blocco offline pessimistico
      ... previene i conflitti evitandoli del tutto. Costringe una transazione commerciale ad acquisire un blocco su una parte di dati prima che inizi a usarla, in modo che, la maggior parte delle volte, una volta che inizi una transazione commerciale, puoi essere certo che lo completerai senza essere rimbalzato dalla concorrenza controllo ...
  4.   
  "Mentre il blocco offline pessimistico presuppone che la possibilità di conflitto di sessione sia elevata e quindi limiti la concorrenza del sistema, Optimized Offline Lock presuppone che la possibilità di conflitto sia bassa. L'aspettativa che il conflitto di sessione non sia probabile consente a più utenti di lavorare con lo stesso dati allo stesso tempo. "     
risposta data 08.02.2012 - 13:38
fonte
5

Questo è un problema persone , così come un problema con il database, il blocco del database è facile!

Dato che un cliente non può mai verificare ...

Hai due opzioni di base:

  • Si prenota un articolo per il cliente per un tempo di correzione (20 minuti) dopo averlo aggiunto al cestino - dopo che avranno dovuto farlo ricontrollare il livello delle scorte o ricominciare. Questo è spesso usato per biglietto per eventi o posti aerei.

  • O dici qualcosa come "xxx normale spedito in 24 ore", ma prenota il magazzino quando fanno il checkout, in questo caso devi permetterlo loro per cancellare l'ordine dopo il checkout se alcuni articoli sono disponibili ma non altri. (I livelli di scorte verdi, gialli, rossi possono anche funzionare bene, o alcuni siti web dicono "scorte basse" quando sono scese a 1 o 2)

risposta data 08.02.2012 - 15:47
fonte
2

Come sempre, dipende da quali sono le tue esigenze. Se si è Amazon e si vendono 100.000.000 di articoli al giorno, il sovraccarico per il controllo preventivo e il blocco è probabilmente proibitivo e il problema di un cliente al giorno che non ottiene il proprio articolo è trascurabile. Si tratta di rare icone religiose antiche che sono uniche e costose, probabilmente si applica il contrario. Tu stesso devi sapere dove si trova il tuo business case su quello spettro.

    
risposta data 08.02.2012 - 13:02
fonte
1

La migliore pratica, per l'utente, è ovviamente quella di assicurarsi che il secondo add non riesca. Ma questo rallenterà l'intero sito per il caso dello 0,1%.

La soluzione più efficiente dal punto di vista tecnico e quella di massimizzare le vendite, è quella di consentire il successo e quindi cercare di soddisfare entrambi gli ordini in seguito, solo perché non hai azioni in questo momento, non significa che tu possa ' lo trovo in caso di emergenza. Se non puoi, allora qualcuno deve contattare l'utente che è stato fortunato e scusa. Ma questo è esattamente ciò che ha portato a scalpore prima di Natale quest'anno (questo non è l'unico articolo apparso, quindi scuse a Best Buy ma è stato il primo che ho trovato).

Il tuo compito è presentare tutte le opzioni al business, con pro e contro e lasciarle decidere in base ai tuoi consigli. Se possono permettersi occasionalmente un piccolo successo nella reputazione per massimizzare le vendite, allora è abbastanza giusto; se non riescono a farlo e il traffico è così basso da poter controllare rapidamente il doppio aggiornamento, allora è anche la loro chiamata.

    
risposta data 08.02.2012 - 13:09
fonte
1

Nel nostro caso, abbiamo usato la coda dei messaggi per gestire gli ordini e l'abbiamo configurata in modo tale che elabori un solo lavoro alla volta in sequenza sullo stesso prodotto, in modo FIFO.

L'avvertenza è che stai aggiungendo un nuovo sovraccarico all'intero processo di ordinamento che ritarda un po 'le cose.

    
risposta data 20.12.2016 - 14:52
fonte

Leggi altre domande sui tag