Дизайн: Эффективное освобождение зарезервированного SEAT обратно в пул после истечения срока - PullRequest
0 голосов
/ 24 июня 2019

Рассмотрим приложение типа (Ticket Master или BookMyShow или любое другое приложение для бронирования места).

  • На основе выбранного города мы показываем все фильмы, которые показывают в этом городе.
  • В городе будет несколько кинозалов.
  • В каждом кинозале есть несколько экранов.

Оценка емкости: 6 миллиардов просмотров страниц в месяц и продажа 15 миллионов билетов в месяц.

Размер экрана может варьироваться от 1 000 до 100 000 мест.

Они предоставляют пользователю 5 минут времени для завершения платежа после резервирования места, выбранного пользователем. Если пользователь не сможет завершить платеж в течение указанного времени, место будет возвращено обратно в свободный пул.

Прежде чем пользователь будет перенаправлен на страницу оплаты, мы меняем статус мест, выбранных пользователем как «ЗАБРОНИРОВАН» в БД, и делаем запись в кеше для этого конкретного SHOWID (ключ в кеше).

Допустим, мы кэшировали все места "BOOKED and RESERVED" для более быстрого доступа в REDIS для каждого шоу вместо запроса к базе данных, как показано ниже.

{SHOWID : [{SEAT_ID, TimeInterval}, {SEAT_ID, TimeInterval}......]}

Если в любой момент времени пользователь не сможет произвести платеж в течение 5 минут. нам нужно сделать 2 вещи, чтобы освободить места обратно в свободный бассейн.

  • Удалите запись seatID из кэша для этого конкретного SHOWID, который он пытался забронировать.
  • Измените статус сидений обратно на «ДОСТУПНО» в БД.

Теперь проблема заключается в оценке емкости, как мы можем эффективно удалить все зарезервированные места обратно в свободный пул, если пользователь не платит в течение 5 минут за каждый сеанс во всех городах. Чтобы другие пользователи могли сразу увидеть статус этих мест как ДОСТУПНЫЙ для бронирования.

Поскольку для каждого ШОУ по всем городам в REDIS CACHE будет огромное количество ЗАБРОНИРОВАННЫХ / ЗАБРОНИРОВАННЫХ мест,

P.S .: Я читал об активном способе REDIS EXPIRING ключей. Но он случайным образом выбирает ключ для проверки срока действия и, если срок действия истекает, он удаляет запись. Но это может привести к тому, что статус некоторых мест по-прежнему будет отображаться как ЗАБРОНИРОВАН, даже если время истечения срока бронирования превышено до случайного выбора REDIS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...