Как работать с последовательностью и параллелизмом в системе проектирования билетов на события - PullRequest
0 голосов
/ 17 октября 2018

Предположим, веб-сайт тикета на событие, где обрабатывать объем и параллелизм, тикеты распределяются на разных серверах и в базе данных.

Например, на «server1» осталось 10 билетов, а на «server2» осталось 5 билетов.Если в то же время «Пользователь1» (чей запрос пересылается на сервер1) отправляет запрос на бронирование 12 билетов, «Пользователь2» (чей запрос пересылается на сервер2) отправляет запрос на бронирование 3 билетов.«Пользователь3» (чей запрос пересылается на сервер2) отправляет запрос на бронирование 2 билетов.

Хотя в системе доступно 15 билетов, но сервер1 сообщит пользователю1, что 12 билетов недоступны, но пользователь2 и пользователь 3 всебыть в состоянии заказать их билеты.Это станет несправедливым для пользователя 1.

Есть идеи, как справиться с этой ситуацией?

1 Ответ

0 голосов
/ 17 октября 2018

Вы не можете сделать это с каждым сервером, имеющим собственный счетчик билетов.Вам понадобится либо центральная база данных, к которой каждый сервер может получить доступ к источнику правды, либо вам понадобится распределенная база данных с механизмом распределенной блокировки (что по своей сути - это то же самое, только с распределенным кешем для чтения).

Я использовал приличные менеджеры распределенных блокировок на основе Apache ZooKeeper и Redis, но вам, вероятно, следует провести собственное исследование, чтобы найти то, что соответствует вашим конкретным потребностям, но это хорошее место для начала.

...