На сайте есть api с помощью которого можно покупать товар, каждый пользователь может одновременно покупать около 200 товаров в секунду и появляется такая проблема, допустим разные пользователи суммарно сделали 1000 запросов за секунду на покупку одного и того же вида товара, как мне выдать каждому уникальный товар? Пытался использовать lockforupdate, но из за него при 200 запросах уже время ожидания было около 10 секунд или более
Алексей Уколов, у меня допустим есть товар, ну игра csgo, я допустим продаю к ней ключи, к api идёт 1000 запросов в секунду на покупку этого товара, как мне быстро выдать заказ, так ещё и уникальный, что бы один и тот же ключ от игры не получили по ошибке другие
Sanes, При использовании lockForUpdate нет, товар всегда попадал в одни руки, но с учётом того что при 200 покупок в секунду задержки на получение были около 10 секунд(ожидается более 1000 покупок в секунду). Как я понял lockForUpdate блокирует чтение из за чего и складывается очередь на получение строки и появляется очередь
JebKel, товар у вас называется ключ, а не номер ключа. Номер ключа потом привяжете, при обработке заказа в очереди.
Если вдруг так произойдет, что немного больше закажут, что вряд ли. С возвратом средств на баланс проблем у вас нет. Баланс в этом плане удобно.
Кладите товар в корзину без привязки к ключу. Контролируйте только количество.
Потом по очереди рассылайте или привязывайте к заказу ключи. Соответственно после оплаты. Обработка очереди это не долго.
Ну почему же, не миллионные конечно, просто каждый пользователь может покупать N кол-во ключей в секунду, ну к примеру 200, но это только 1 пользователь, а таких пользователей много
да, в данный момент есть проект в продакшене, который не справляется вообще с нагрузкой, там стоит ограничение на 350 запросов в секунду, много пользователей потеряли из за того, что с нагрузкой не справляется вовсе