Bewährtes Verfahren zum Verwalten der Parallelität in einem Warenkorb auf einer E-Commerce-Website

18

Was ist die beste Vorgehensweise, um den Fall zu handhaben, dass zwei Kunden gleichzeitig ein Produkt hinzufügen, dessen Lagerbestand nur 1 betrug?

Muss der Warenkorbcode überprüft werden, um zu verhindern, dass einer dieser beiden Kunden dasselbe Produkt hinzufügt?

Oder muss diese Prüfung in der Zahlungsphase durchgeführt werden, indem beispielsweise eine zweite Abfrage durchgeführt wird, um zu bestätigen, dass das betreffende Produkt noch auf Lager ist (dh vom gleichzeitigen Kunden noch nicht gekauft)?

Mik378
quelle
Einige Websites, wie z. B. Theaterkartenreservierungen, halten den Artikel für einen begrenzten Zeitraum für Sie bereit, während die Bestellung bearbeitet wird
Brad Thomas,

Antworten:

10

Es gibt keine perfekte Antwort auf diese Frage und alles hängt von Details ab.

Als erste "Verteidigungslinie" würde ich versuchen, solche Situationen überhaupt zu vermeiden, indem ich Artikel, die so niedrig wie möglich sind, einfach nicht verkaufe. Ob dies möglich ist, hängt möglicherweise von der Situation und der Art der Artikel ab, die Sie verkaufen möchten. In der Firma, in der ich arbeite, werden Artikel meistens von der Website entfernt, bevor wir nicht mehr auf Lager sind. Aber wir verkaufen den gesamten Verkauf und die wenigen verbleibenden Artikel werden von unseren Verkäufern als Sonderangebote verkauft. Dies ist möglicherweise keine Option für kleine Geschäfte, insbesondere beim Verkauf von hochpreisigen Artikeln.

Die Lösung für die doppelte Überprüfung, wenn etwas in den Warenkorb gelegt wird, ist nicht sehr gut. Die Leute legen viel in Körbe, ohne jemals eine Bestellung aufzugeben. Dies kann diesen Artikel für einen bestimmten Zeitraum blockieren.

Meiner bescheidenen Meinung nach bei kleinen Aufträgen ist es daher am besten, unmittelbar vor der Zahlung, wenn die Bestellung tatsächlich aufgegeben wird, eine Endkontrolle durchzuführen. Im schlimmsten Fall müssen Sie Ihrem Kunden mitteilen, dass Sie gerade nicht mehr auf Lager sind (was bei kleinen Läden nicht so häufig vorkommt).

thorsten müller
quelle
netter Fang - niedrige Lagerbestände und hohe Preise
rohanagarwal
5

Ich denke, die beste Vorgehensweise besteht darin, auszuwählen, welche der folgenden Optionen für einen bestimmten Geschäftsfall besser geeignet ist :

  1. Optimistische Offline-Sperre

    ... löst dieses Problem ( Problem des Sitzungskonflikts ), indem überprüft wird, ob die Änderungen, die von einer Sitzung übernommen werden sollen, nicht mit den Änderungen einer anderen Sitzung in Konflikt stehen. Eine erfolgreiche Pre-Commit-Validierung besteht in gewisser Weise darin, eine Sperre zu erhalten, die angibt, dass die Änderungen an den Datensatzdaten in Ordnung sind. Solange die Validierung und die Aktualisierung innerhalb einer einzigen Systemtransaktion erfolgen, zeigt die Geschäftstransaktion Konsistenz ...

  2. Pessimistische Offline-Sperre
    ... verhindert Konflikte, indem sie vollständig vermieden werden. Es erzwingt, dass eine Geschäftstransaktion eine Sperre für ein Datenelement erhält, bevor es verwendet wird, sodass Sie die meiste Zeit, wenn Sie eine Geschäftstransaktion beginnen, ziemlich sicher sein können, dass Sie sie abschließen, ohne von der Parallelität zurückgewiesen zu werden Steuerung...
"Während Pessimistic Offline Lock davon ausgeht, dass die Wahrscheinlichkeit eines Sitzungskonflikts hoch ist und daher die Parallelität des Systems begrenzt, geht Optimistic Offline Lock davon aus, dass die Wahrscheinlichkeit eines Konflikts gering ist. Die Erwartung, dass ein Sitzungskonflikt wahrscheinlich nicht dazu führt, dass mehrere Benutzer mit demselben arbeiten." Daten zur gleichen Zeit. "

Mücke
quelle
5

Dies ist sowohl ein Personen- als auch ein Datenbankproblem. Das Sperren der Datenbank ist ein Kinderspiel!

Da ein Kunde niemals auschecken darf ...

Sie haben zwei grundlegende Möglichkeiten:

  • Sie reservieren einen Artikel für den Kunden für eine feste Zeitspanne (20 Minuten), nachdem er ihn in den Warenkorb gelegt hat - nachdem er den Lagerbestand erneut überprüft oder neu gestartet hat. Dies wird häufig verwendet, um Tickets für Veranstaltungen oder Sitzplätze von Fluggesellschaften zu kaufen.

  • Oder Sie sagen etwas wie "xxx normal innerhalb von 24 Stunden versandt", behalten sich aber den Lagerbestand vor, wenn sie auschecken. In diesem Fall müssen Sie ihnen gestatten, die Bestellung nach dem Auschecken zu stornieren, wenn einige Artikel auf Lager sind, andere jedoch nicht. (Grüne, gelbe und rote Lagerbestände können ebenfalls gut funktionieren, oder auf einigen Websites wird "geringer Lagerbestand" angegeben, wenn der Lagerbestand auf 1 oder 2 gesunken ist.)

Ian
quelle
2

Wie immer kommt es auf Ihre Anforderungen an. Wenn Sie Amazon sind und 100.000.000 Artikel pro Tag verkaufen, ist der Aufwand für die vorbeugende Prüfung und Sperrung wahrscheinlich unerschwinglich, und das Problem, dass ein Kunde pro Tag seinen Artikel nicht erhält, ist vernachlässigbar. Wenn es sich um seltene antike religiöse Ikonen handelt, die einzigartig und teuer sind, gilt wahrscheinlich das Gegenteil. Sie müssen selbst wissen, wo sich Ihr Business Case in diesem Spektrum befindet.

Kilian Foth
quelle
2

In unserem Fall haben wir die Nachrichtenwarteschlange zum Verarbeiten von Aufträgen verwendet und so konfiguriert, dass jeweils nur ein Auftrag nacheinander auf demselben Produkt in FIFO-Weise verarbeitet wird.

Die Einschränkung ist, dass Sie der gesamten Bestellabwicklung einen neuen Overhead hinzufügen, der die Dinge etwas verzögert.

Korayem
quelle
Sie begrenzen die Warteschlange, die von nur einem Verbraucher konsumiert werden soll
rohanagarwal
1

Die beste Vorgehensweise für den Benutzer besteht offensichtlich darin, sicherzustellen, dass das zweite Hinzufügen fehlschlägt. Dies wird jedoch Ihre gesamte Website im Interesse des 0,1% -Falls verlangsamen.

Die technisch effizienteste und umsatzmaximierende Lösung besteht darin, sie zum Erfolg zu führen und dann zu versuchen, beide Aufträge später zu erfüllen - nur weil Sie gerade keinen Lagerbestand haben, heißt das nicht, dass Sie ihn nicht finden können In einem Notfall. Wenn Sie dies nicht können, muss sich jemand an den glücklichen Benutzer wenden und sich entschuldigen. Aber genau das hat in diesem Jahr vor Weihnachten zu Aufruhr geführt (dies ist nicht der einzige Artikel, der erschienen ist, also entschuldige mich bei Best Buy, aber es war der erste, den ich gefunden habe).

Ihre Aufgabe ist es , dem Unternehmen alle Optionen mit Vor- und Nachteilen vorzustellen und sie auf der Grundlage Ihrer Empfehlungen entscheiden zu lassen. Wenn sie es sich leisten können, den Ruf von Zeit zu Zeit zu verbessern, um den Umsatz zu maximieren, dann ist das fair genug. Wenn dies nicht möglich ist und der Datenverkehr so ​​gering ist, dass Sie schnell nach doppelten Aktualisierungen suchen können, ist dies auch ihre Aufgabe.

pdr
quelle