Najlepsze praktyki zarządzania współbieżnością w koszyku w witrynie e-commerce


19

Jaka jest najlepsza praktyka zarządzania przypadkiem, w którym dwóch klientów dodaje jednocześnie produkt, którego zapasy wynosiły tylko 1?

Czy konieczne jest sprawdzenie kodu koszyka, aby jeden z tych 2 klientów nie dodał tego samego produktu?

Czy też kontrola ta musi zostać przeprowadzona na etapie płatności, wykonując na przykład drugie zapytanie w celu potwierdzenia, że ​​dany produkt jest nadal dostępny w magazynie (oznacza, że ​​nie został jeszcze zakupiony przez współbieżnego klienta)?


Niektóre strony, takie jak rezerwacje biletów do teatru, ograniczają czas oczekiwania na dany przedmiot podczas przetwarzania zamówienia
Brad Thomas,

Odpowiedzi:


11

Nie ma idealnej odpowiedzi na to pytanie i wszystko zależy od szczegółów.

Jako pierwsza „linia obrony” starałbym się w ogóle unikać takich sytuacji, po prostu nie sprzedając tak niskich artykułów, jeśli to możliwe. Jeśli jest to możliwe, może zależeć od sytuacji i rodzaju artykułów, które chcesz sprzedać. W firmie, w której pracuję, artykuły są w większości usuwane ze strony internetowej, zanim wyczerpią się zapasy. Ale sprzedajemy całą sprzedaż, a kilka pozostałych artykułów jest sprzedawanych przez naszych sprzedawców jako oferty specjalne. Może to nie być rozwiązaniem dla małych sklepów, szczególnie przy sprzedaży artykułów drogich.

Rozwiązanie podwójnej kontroli podczas dodawania czegoś do koszyka nie jest zbyt dobre. Ludzie wkładają wiele do koszy, nigdy nie składając zamówienia. Może to zablokować ten artykuł na określony czas.

Tak więc, moim skromnym zdaniem, w przypadku drobnych prac najlepszym sposobem jest dokonanie ostatecznej kontroli tuż przed płatnością, kiedy zamówienie zostanie faktycznie złożone. W najgorszym przypadku musisz powiedzieć klientowi, że w tej chwili kończy Ci się zapas (co w przypadku małych sklepów nie zdarza się tak często).


niezły połów - niskie zapasy i wysokie ceny
rohanagarwal

5

Myślę, że najlepszą praktyką jest wybór, która z poniższych opcji jest bardziej odpowiednia dla konkretnego przypadku biznesowego :

  1. Optymistyczna blokada offline

    ... rozwiązuje ten problem ( problem konfliktu sesji ), sprawdzając, czy zmiany, które zostaną zatwierdzone przez jedną sesję, nie powodują konfliktu ze zmianami innej sesji. Pomyślna weryfikacja przed zatwierdzeniem w pewnym sensie polega na uzyskaniu blokady wskazującej, że można wprowadzać zmiany w danych rekordu. Dopóki sprawdzanie poprawności i aktualizacje odbywają się w ramach jednej transakcji systemowej, transakcja biznesowa będzie wyświetlać spójność ...

  2. Pesymistyczna blokada offline
    ... zapobiega konfliktom, całkowicie je unikając. Zmusza transakcję biznesową do uzyskania blokady na danych, zanim zacznie z niej korzystać, dzięki czemu przez większość czasu po rozpoczęciu transakcji biznesowej masz pewność, że ją zrealizujesz, nie odbijając się o współbieżność kontrola...
„Podczas gdy pesymistyczna blokada offline zakłada, że ​​prawdopodobieństwo konfliktu sesji jest wysoka, a zatem ogranicza współbieżność systemu, Optimistic Offline Lock zakłada, że ​​prawdopodobieństwo konfliktu jest niskie. Oczekiwanie, że konflikt sesji prawdopodobnie nie pozwoli wielu użytkownikom pracować z tym samym dane w tym samym czasie ”.


5

Jest to problem ludzi , a także problem bazy danych, blokowanie bazy danych jest łatwe!

Biorąc pod uwagę, że klient nigdy nie może sprawdzić…

Masz dwie podstawowe opcje:

  • Rezerwujesz produkt dla klienta na określony czas, powiedzmy (20 minut) po dodaniu go do koszyka - po tym czasie muszą ponownie sprawdzić stan magazynu lub zacząć od nowa. Jest to często używane do biletów na imprezy lub miejsca w liniach lotniczych.

  • Lub mówisz coś w stylu „xxx normalna wysyłka w ciągu 24 godzin”, ale rezerwuj zapasy, kiedy kasują, w takim przypadku musisz pozwolić im anulować zamówienie po kasie, jeśli niektóre produkty są w magazynie, ale nie inne. (Poziomy zapasów zielonego, żółtego, czerwonego również mogą dobrze działać, lub na niektórych stronach internetowych jest napisane „niski zapas”, gdy są mniejsze niż 1 lub 2)


2

Jak zawsze zależy to od twoich wymagań. Jeśli jesteś Amazonem i sprzedajesz 100 000 000 przedmiotów dziennie, narzut związany z zapobiegawczym sprawdzaniem i blokowaniem jest prawdopodobnie wygórowany, a problem, że jeden klient dziennie nie odbierze swojego przedmiotu jest znikomy. Jeśli masz do czynienia z rzadkimi zabytkowymi ikonami religijnymi, które są wyjątkowe i drogie, prawdopodobnie ma to coś przeciwnego. Sam musisz wiedzieć, gdzie znajduje się Twoja sprawa biznesowa w tym spektrum.


2

W naszym przypadku użyliśmy kolejki komunikatów do obsługi zamówień i skonfigurowaliśmy ją tak, aby przetwarzała tylko jedno zadanie w sekwencji na tym samym produkcie, w sposób FIFO.

Zastrzeżenie polega na tym, że dodajesz nowy narzut do całego procesu zamawiania, co nieco opóźnia.


ograniczasz kolejkę do konsumpcji tylko przez jednego konsumenta
rohanagarwal

1

Najlepszą praktyką dla użytkownika jest oczywiście upewnienie się, że drugie dodanie nie powiedzie się. Spowolni to jednak całą witrynę ze względu na 0,1%.

Najbardziej technicznie wydajnym rozwiązaniem, i tym, które maksymalizuje sprzedaż, jest pozwolenie na sukces, a następnie próba zrealizowania obu zamówień później - tylko dlatego, że nie masz teraz zapasów, nie znaczy, że nie możesz go znaleźć w nagłym wypadku. Jeśli nie możesz, to ktoś musi skontaktować się z użytkownikiem, który miał szczęście i przeprosił. Ale to właśnie doprowadziło do wrzawy przed Bożym Narodzeniem w tym roku (nie jest to jedyny artykuł, który się pojawił, więc przepraszam za Best Buy, ale to był pierwszy znaleziony).

Twoim zadaniem jest przedstawienie firmie wszystkich opcji, plusów i minusów, i pozwolenie im podjąć decyzję na podstawie twoich rad. Jeśli mogą sobie pozwolić na okazjonalne małe uderzenie w reputację w celu maksymalizacji sprzedaży, to wystarczy. jeśli nie mogą, a ruch jest tak niski, że można szybko sprawdzić podwójne aktualizacje, to jest to również ich połączenie.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.