Comments 23
Автор умеет только UX + SEO
А с большими магазинами дела не имел
Да, согласен с вами. В основном до 1 млн SKU. Можно пару советов что посмотреть с точки зрения больших проектов?
Бэк вам надо посмотреть. И вообще техническую часть, а не только продуктовую.
Из большой статьи 2/3 текста написано про UX, часть про SEO, а про бэк в сущности ничего. Если вы занимались большими проектами то проблемы серверной части стали бы приоритетней.
В заголовке указана разработка. Но в тексте больше про продукт. И это не соответствует ожиданиям. А так как текста много то реакция - раздражение.
Второй раз перечитывать не буду, пишу по памяти, по эмоциям. Возможно, так акценты расставлены или статья скомпонована.
В последнее время прямо тут на хабре я минимум трижды натыкался на обсуждение вопроса «что делать, если 100 человек одновременно хотят положить в корзину товар, остаток которого на складе — 50».
Я бы с благодарностью почитал, как эту проблему решаете вы.
Если мы говорим не о тех решениях, а о продуктовых, то могу рассказать. В таких случаях мы смотрим на бизнес-процессы в компании. Готовы ли они брать заказы в очередь как предварительный заказ или нет, как быстро они пополняют остатки и так далее. По сути мы садимся и спрашиваем: у вас 50 товаров, в магазин зашли 100 покупателей - что делаем. получает ответ от бизнеса и просто этот сценарий реализуем в вебе. Так как все на js (могу не корректно написать, я не тех спец) то каждый клик в корзину мы отслеживаем без перезагрузки страницы и легко считаем первые 50 товаров в корзину а остальным выводим уведомление о том, что товар под заказ. + корзина имеет ограничение по сессии. Чтобы товар не блокировать на долго.
получает ответ от бизнеса и …
…дорисовываем всю сову.
легко считаем первые 50 товаров в корзину
Ясно, с серьёзной нагрузкой вы дела никогда не имели. Что и как вы легко посчитаете, когда 100 человек одновременно нажмут кнопку «в корзину».
Больше вопросов нет, ответ для домашней странички зоомагазина в Мытищах мне известен.
одновременно прям одновременно - да, таких кейсов у нас нет. Мы работали с крупными проектами, но такого там не было. А много в РФ таких проектов, где в одну миллисекунду 100 человек на один товар нажимает положить в корзину? и не раз в год ситуация, а ежедневно? Можете прислать пример, мне интересно посмотреть на такие кейсы и подумать, как они справляются и что делают.
много в РФ таких проектов
Не знаю, я не владею никакой статистикой по рынку РФ.
где в одну миллисекунду
Зачем в миллисекунду? Ну пусть в секунду. В базу всё равно ходить — не отказоустойчивое решение.
100 человек на один товар нажимает положить в корзину?
В этом нет совершенно ничего сверхестественного, я думаю, что на всех маркетплейсах (Авито, там, и типа того) эта проблема решена.
Ну и, кроме того, это же не обязательно должны быть люди и товары. Курс валюты для магазина, торгующего за несколько валют, — это штука, которая обновляется 10-12 раз в секунду, а если валют больше двух — то там комбинаторика.
Да, кстати, два человека одновременно тыкают в кнопку купить при остатке 1 — это та же проблема даже вне хайлоада.
Для самого-самого обычного е-кома (в чём собственно и рубится автор статьи), просто забор остатков чаще 1 раз в 12 часов - это уже проблема. А вы говорите о таких вещах, до которых они ну может лет через 10 дойдут.
а что для вас самый обычный e-comm? у нас есть много мелких проектов, есть проекты с 1 млн SKU. Да, проектов типо валдберис и ozoon нет, да такие проекты на аутсорсе и не делают. Я думаю 90% рынка e-com в СНГ в лучшем случае 1 раз в 12 часов обновляются. Конечно, самые крупные и топы - скорее всего сквозная интеграция и обновления идет в реальном времени. Но я пишу о том, над чем реально работаем, а не придуманные красивые проекты.
я бы решал так
100 покупателей тянут руки к продавцу и у него на столе 50 товаров
вариант 1) продавец в любом порядке берет деньги и выдает товар (или чек или пишет у себя в тетрадке или делает update в БД - неважно), через 50 итераций товар заканчивается и остальные получает ответ "товара нет". Из-за ненулевого времени блокировки записи о количестве товара 50-му придется немного подождать, но в общем то нормально.
вариант 1б) продавец склада может раскидать товар по 10 прилавкам чтобы на каждом товар выдавался быстрее, через 50 итераций товар заканчивается и остальные получает ответ "товара нет".
вариант 2) покупатели дают продавцу свой номер телефона и уходят (это подписки), а он им звонит (говорит код по которому можно получить - детали не важны). Если за время до таймаута на склад попал дополнительный товар, еще 50 штук, то все покупатели будут с товаром, просто некоторые чуть позже.
вариант 3) все 100 покупателей кладут в корзинку чек, но когда покупатели доходят до оплаты некоторые будут огорчены. Овербукинг. Видел такие решения
комбинации из этих вариантов - резервирование на короткое время, если товар не оплачен все это время, то товар остается в корзине, но резерв уже снимается и это можно увидеть в корзине
с корзинкой или без, с резервированием или без - вариантов с десяток в зависимости от выгод и рисков для бизнеса
Судя по моему опыту как пользователя, при добавлении в корзину остатки вообще никак не проверяют. Покупатель с этой корзиной может до совершения заказа вообще не дойти, или дойти через неделю, когда уже новую партию привезут. А уже в момент оформления заказа происходит запрос на сервер со всем содержимым корзины, и позиции, которые уже разобрали, помечаются как "нет в наличии".
Ситуации, когда товар закончился в момент между финальным обновлением корзины и совершением заказа, обычно решают в ручном режиме звонком менеджера неудачливому клиенту, и на сто человек такое, конечно, не масштабируется.
Amazon и Temu, как минимум, решают, более того — показывают активную плашку поверх товара с индикатором «Осталось в наличии: 8».
у нас на странице остатки подтягиваются динамически чтобы пользователи понимали, сколько товара есть. при этом в зависимости от остатков делаем разный процесс. например, когда товара много - пусть все покупают. когда мы понимаем, что остатки критические и могут быть накладки, мы после достижения порога переходим в режим - положи товар в корзину - менеджер подтверждает. конверсия может успасть, но за то никто не купить товар, которого уже нет.
менеджер подтверждает
Это не масштабируется, к сожалению.
Особенно, когда вы захотите предоставить API к вашему магазину («магазин» тут следует понимать в более широком смысле, как сервис с потенциально ограниченным ресурсом).
Платежные решения
Интеграция мобильных платежей (Apple Pay, Google Pay).
В РФ? Серьезно?
Разработка интернет-магазина с точки зрения SEO и UX. Полная структура, которую мы используем в проектах