Как системы авиакомпаний обеспечивают согласованность? - PullRequest
0 голосов
/ 18 октября 2019

Я не смог найти пост под похожими вопросами при создании этого сообщения, поэтому извиняюсь, если он обсуждался.

Я пытаюсь обернуть голову, как Expedia, Travelocity и другие туристические сайты работают за кулисами. для бронирования авиабилетов. Я понимаю, что они, вероятно, просто используют API от авиакомпаний - тот же вопрос применим, если два клиента покупают билеты непосредственно у какой-либо авиакомпании вместо сайта путешествия, такого как Expedia.

Допустим, пользователь A переходит в Travelocity и пользователь Bедет в Экспедию. Оба клиента хотят забронировать рейс из Нью-Йорка в Бостон. Допустим, оба пользователя выбирают один и тот же рейс.

  1. Будут ли отдельные места моделироваться как «строки» в базовой базе данных? Или, другими словами, как прослеживаются доступные места как проданные или не проданные? Я не ожидаю, что другие будут знать точную реализацию, но есть ли каноническая модель? Очевидно, что нам нужно отследить, какому клиенту назначено конкретное место.

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

Если два пользователя пытаются купить 1 билет на один рейс, является ли эта «транзакция» синхронной? Обновляется ли база данных в режиме реального времени, когда вы вводите данные своей кредитной карты и нажимаете «Отправить»? Или это то, что ваша информация взята, вы платите, но подтверждение происходит позже (то есть какая-то система отвечает за то, чтобы затем назначить вам место и удалить его из некоторого списка доступных мест)? Я думаю, что второй подход имеет смысл - но он выглядит как плохой пользовательский опыт, если я совершил покупку и теперь взволнован, чтобы уйти в отпуск, только чтобы узнать, что мое место не может быть подтверждено - попробуйте совершить покупку еще раз.

Как насчет случаев, когда в качестве клиента я могу выбрать именно то место, которое хочу - что если я выберу место, а затем, прежде чем завершить покупку, другой пользователь также выберет место? Разрешаем ли мы обоим клиентам переходить к покупке и затем отменять одну из покупок билетов?

Другой способ может состоять в том, что, как только клиент А выбирает место, никакой другой клиент не может его выбрать. даже если клиент А еще не совершил покупку. В таком случае, это место теперь привязано к учетной записи клиента или онлайн-сессии?

Итак, как вы можете сказать, у меня есть некоторые смутные идеи о том, как это сделать, но я не знаю, как разумно спроектироватьэто.

Как мы справляемся с этим в распределенной среде? Разумно ли говорить, что продажи билетов на рейс XYZ из Нью-Йорка в Бостон могут быть распределены по одной системе, скажем, в Нью-Йорке? В противном случае, если вы можете совершить покупку с серверов, работающих в разных регионах, и сетевое соединение прекратится, вам придется прекратить покупку (т. Е. Нет высокой доступности), поскольку сервер A не знает, все ли места уже проданы сервером B.
...