- PVSM.RU - https://www.pvsm.ru -
Такие разборы задач отлично помогают потренироваться в подходах к решению рабочих задач + увеличить насмотренность.
веб-приложения,
брокера сообщений,
бэкенда.
Клиенты могут заказывать товары, а складская система проверяет наличие товаров на складе.
Каждый раз, когда клиент делает заказ, система отправляет запрос через брокер для проверки доступности товара на складе и блокирует его на время обработки заказа.
добавлять несколько товаров в корзину одновременно,
отправлять несколько заказов.
Это приводит к тому, что резервируется больше товара, чем есть на складе.
Из-за этого возможны ситуации, когда товар отображается как доступный, но при попытке завершить заказ оказывается, что он уже заблокирован другим клиентом.
Выявить процессы, которые происходят,
На основе этих процессов отобразить схему (sequence diagram) взаимодействия,
Предложить 2 способа оптимизации, чтобы избавиться от текущих проблем.
Выделим процессы, которые есть из описания задачи и разделим их на:
бизнес-процессы,
системные взаимодействия.
1. Добавление товара в корзину
проверка наличия товара на складе.
2. Оформление заказа
отправка полного списка товаров, которые выбрал клиент,
резервирование товаров для дальнейшего списания после оплаты.
Выделять больше процессов не вижу смысла - пока достаточно.
Веб-приложение,
Бэкенд,
Брокер сообщений,
Сервис склада.
Клиент добавляет товар в корзину,
Веб-приложение отправляет запрос на добавление товара в корзину на бэкенд,
Бэкенд отправляет запрос на проверку наличия товара на складе через брокер,
Сервис склада вычитывает сообщение и сообщает, есть товар или нет,
Бэкенд возвращает ответ веб-приложению - можно добавить товар или нет.
У клиента собрана корзина,
Он нажимает «Оформить»,
Веб-приложение отправляет запрос на бэкенд со списком товаров и количеством,
Бэкенд отправляет сообщение на резервирование товара через брокер,
Сервис склада вычитывает сообщение и резервирует товар или отклоняет запрос,
Бэкенд возвращает результат в веб-приложение,
При успешном резервировании - переходим к оплате, при неуспехе - отклоняем заказ.
Теперь на основе этой диаграммы можем предложить изменения, которые помогут решить исходную проблему.
> Клиенты могут добавлять несколько товаров в корзину одновременно и отправлять несколько заказов → резервируется больше товара, чем есть на складе → товар отображается как доступный, но при оформлении оказывается уже зарезервирован.
Несколько клиентов добавили товар в корзину, но никто не зарезервировал его за собой.
У нас 1 кг бананов на складе,
Три клиента добавили этот килограмм в корзину,
Для каждого товар отображается как доступный,
Но при оформлении заказа - только один сможет его купить.
Переносим резервирование товара на этап добавления в корзину.
Когда клиент добавляет товар - мы сразу его резервируем.
Клиент добавил товар, но не оформил заказ — например, ушёл от компьютера.
Товар остаётся заблокированным.
Устанавливаем временное ограничение на резервирование (например, 15 минут).
Если клиент не оформляет заказ - товар возвращается на склад.
Поскольку товар уже зарезервирован, на этом этапе мы просто подтверждаем заказ.
Сразу списать товар при отправке заказа, чтобы он не разблокировался,
Обнулить резерв и списать товар после оплаты.
Я склоняюсь к первому варианту. Если заказ не оплатят - просто вернём значения на склад.
И помните, что эта задача из реального собеседования.
какую теоретическую базу вы знаете,
как вы мыслите,
как умеете применять знания на практике.
Автор: proanalitika
Источник [1]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/sobesedovanie/427214
Ссылки в тексте:
[1] Источник: https://habr.com/ru/articles/934170/?utm_source=habrahabr&utm_medium=rss&utm_campaign=934170
Нажмите здесь для печати.