Wenn Sie sich ein Unternehmen wie Amazon (oder eine andere große E-Commerce-Webanwendung) vorstellen, das einen Online-Shop in großem Umfang betreibt und nur eine begrenzte Menge physischer Artikel in seinen Lagern hat, wie können sie dies optimieren, sodass es keine gibt? Single Bottleneck? Natürlich müssen sie eine Reihe von Datenbanken mit Replikation und viele Server haben, die die Last unabhängig handhaben. Wenn jedoch mehrere Benutzer von unterschiedlichen Servern bedient werden und beide versuchen, denselben Artikel in ihren Warenkorb zu legen, für den nur noch einer übrig ist, muss es eine "Wahrheitsquelle" für die für diesen Artikel verbleibende Menge geben. Würde dies nicht bedeuten, dass mindestens alle Benutzer, die auf Produktinformationen für einen einzelnen Artikel zugreifen, dieselbe Datenbank seriell abfragen müssen?
Ich würde gerne verstehen, wie Sie mit Distributed Computing ein so großes Geschäft betreiben und keinen großen Engpass in einer einzelnen Datenbank mit Inventarinformationen verursachen können.
quelle
Antworten:
Nicht wirklich. Dies ist kein Problem, das eine 100% perfekte technische Lösung erfordert, da beide Fehlerfälle eine Geschäftslösung haben, die nicht sehr teuer ist:
Tatsächlich habe ich den zweiten Fall vor kurzem selbst erlebt, daher ist das nicht hypothetisch: Das passiert und wie Amazon damit umgeht.
Es ist ein Konzept, das oft angewendet wird, wenn Sie ein Problem haben, das theoretisch sehr schwer zu lösen ist (sei es in Bezug auf Leistung, Optimierung oder was auch immer): Sie können oft mit einer Lösung leben, die für die meisten Fälle wirklich gut funktioniert und das manchmal akzeptieren schlägt fehl, solange Sie die aufgetretenen Fehler erkennen und behandeln können.
quelle
Eine Kombination aus
Es gibt keine Magie, nur immer komplexere Situationen. Genau wie DNS ist es maßstabsgetreu.
Die "einzelne Version der Wahrheit" ist Teil solcher Systeme. Das Generieren eines neuen Schlüssels wird zu einer komplexeren Operation, als nur die nächste Nummer in der Sequenz zu generieren. Zum Beispiel existieren andere Sequenzen. Dies ist die Art von Komplexität, die verteilte Datenbanksysteme bewältigen können, indem sie mehrere Vorgänge an und von Komponenten ausführen, wenn sie neue Objekte erstellen, diese anderen zur Verfügung stellen und sicherstellen, dass Sequenzen eindeutig sind, wenn sie benötigt werden, zusammengesetzte Schlüssel usw .
quelle
Ich habe das Problem "Letzter Artikel auf Lager" folgendermaßen gelöst:
Aktualisieren Sie täglich alle Lagerbestände und kennzeichnen Sie Produkte entsprechend den Schwellenwerten als hoch, niedrig, auf Bestellung oder außerhalb der Lagerbestandskategorien.
Offensichtlich ist es der "geringe Lagerbestand" Artikel, die problematisch sind
Prüfen Sie nicht den Lagerbestand. Bestellen Sie einfach
Warnen Sie den Benutzer beim Durchsuchen von "Letzte verbleibende!". Wenn sie zahlen müssen, überprüfen Sie den Lagerbestand und verringern Sie ihn. Wenn es nicht mehr auf Lager ist, aktualisieren Sie den Artikelstatus.
Auf diese Weise gelangen Sie nur in die Datenbank für Artikel mit geringem Lagerbestand, und dies nur, wenn der Kunde den Kaufprozess noch nicht abgeschlossen hat. Die Kosten sind, dass einige Kunden ihren Kauf nicht abschließen können.
In den meisten Fällen bedeutet "Nicht vorrätig" jedoch, dass Sie auf eine weitere Lieferung warten. Sie möchten die Bestellung also trotzdem annehmen und möglicherweise nur eine Warnung anzeigen oder die Lieferoptionen einschränken. Diese Kunden sind also nicht verloren.
In Zeiten mit hoher Auslastung, wie zum Beispiel beim Verkauf, können Sie sogar die Lagerprüfung deaktivieren und Kunden später eine E-Mail senden: "Es tut uns leid, wir haben kein X mehr, möchten Sie Y".
Grundsätzlich wird das Ziel einer E-Commerce-Plattform niemals aus der Datenbank gelesen. Servieren Sie immer zwischengespeicherte Seiten und erledigen Sie alles clientseitig.
quelle
In diesem Video behandelt Martin Fowler NoSQL-Datenbanken:
https://www.youtube.com/watch?v=qI_g07C_Q5I
Einer der Punkte (irgendwo da drin) ist, dass Orte wie Amazon lieber 99% der Leute bei Laune halten, wenn sie ihre Bestellung annehmen, ohne "sicher" überprüfen zu können, ob sie tatsächlich verfügbar ist, und vielleicht einen sehr kleinen Prozentsatz irritieren, wenn sie haben zu sagen "Entschuldigung, sieht aus, als hätte dich jemand geschlagen."
Das heißt, es gibt keine wirkliche Handhabung für das von Ihnen beschriebene Szenario, nur, dass Amazon den Zweifel ausnutzt, der auf dem zuletzt erfolgreich gelesenen Inventar basiert, und wenn eine gleichzeitige Transaktion dazwischen gerutscht ist - oopsie.
(Übrigens, das ist ein großartiges Video, wenn Sie neugierig auf NoSQL sind.)
quelle