Search
Write a publication
Pull to refresh

Разбор задачи с реального собеседования: e-commerce, брокер и резервы склада

Level of difficultyMedium
Reading time3 min
Views617

Такие разборы задач отлично помогают потренироваться в подходах к решению рабочих задач + увеличить насмотренность.

Задача

Сценарий:  

У нас есть e-commerce платформа, состоящая из:

  • веб-приложения,

  • брокера сообщений,

  • бэкенда.

Клиенты могут заказывать товары, а складская система проверяет наличие товаров на складе.  

Каждый раз, когда клиент делает заказ, система отправляет запрос через брокер для проверки доступности товара на складе и блокирует его на время обработки заказа.

Проблема:  

Клиенты могут:

  • добавлять несколько товаров в корзину одновременно,

  • отправлять несколько заказов.

Это приводит к тому, что резервируется больше товара, чем есть на складе.  

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

Необходимо:

  • Выявить процессы, которые происходят,  

  • На основе этих процессов отобразить схему (sequence diagram) взаимодействия,  

  • Предложить 2 способа оптимизации, чтобы избавиться от текущих проблем. 

Решение

Выделим процессы, которые есть из описания задачи и разделим их на:

  • бизнес-процессы, 

  • системные взаимодействия. 

Начнём с бизнес-процессов

1. Добавление товара в корзину  

  • проверка наличия товара на складе.  

2. Оформление заказа  

  • отправка полного списка товаров, которые выбрал клиент,  

  • резервирование товаров для дальнейшего списания после оплаты.  

Выделять больше процессов не вижу смысла - пока достаточно.

Теперь «как это выглядит под капотом»

Выделим компоненты системы:

  • Веб-приложение,  

  • Бэкенд,  

  • Брокер сообщений,  

  • Сервис склада.  

Добавление товара:

  1. Клиент добавляет товар в корзину,  

  2. Веб-приложение отправляет запрос на добавление товара в корзину на бэкенд,  

  3. Бэкенд отправляет запрос на проверку наличия товара на складе через брокер,  

  4. Сервис склада вычитывает сообщение и сообщает, есть товар или нет,  

  5. Бэкенд возвращает ответ веб-приложению - можно добавить товар или нет.  

Оформление заказа:

  1. У клиента собрана корзина,  

  2. Он нажимает «Оформить»,  

  3. Веб-приложение отправляет запрос на бэкенд со списком товаров и количеством,  

  4. Бэкенд отправляет сообщение на резервирование товара через брокер,  

  5. Сервис склада вычитывает сообщение и резервирует товар или отклоняет запрос,  

  6. Бэкенд возвращает результат в веб-приложение,  

  7. При успешном резервировании - переходим к оплате, при неуспехе - отклоняем заказ.  

Получается такая схема
Получается такая схема

Получилась ситуация AS IS

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

Напомню условия задачи:  

> Клиенты могут добавлять несколько товаров в корзину одновременно и отправлять несколько заказов → резервируется больше товара, чем есть на складе → товар отображается как доступный, но при оформлении оказывается уже зарезервирован.

Первая неэффективность

Несколько клиентов добавили товар в корзину, но никто не зарезервировал его за собой.

Пример:  

  • У нас 1 кг бананов на складе,  

  • Три клиента добавили этот килограмм в корзину,  

  • Для каждого товар отображается как доступный,  

  • Но при оформлении заказа - только один сможет его купить.  

Как можно обойти?

Переносим резервирование товара на этап добавления в корзину.  

Когда клиент добавляет товар - мы сразу его резервируем.

Возможный кейс:  

Клиент добавил товар, но не оформил заказ — например, ушёл от компьютера.  

Товар остаётся заблокированным.

Решение:  

Устанавливаем временное ограничение на резервирование (например, 15 минут).  

Если клиент не оформляет заказ - товар возвращается на склад.

Получается такая схема
Получается такая схема

На этапе оформления заказа

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

Можно пойти двумя путями:

  1. Сразу списать товар при отправке заказа, чтобы он не разблокировался,  

  2. Обнулить резерв и списать товар после оплаты.  

Личный выбор:  

Я склоняюсь к первому варианту. Если заказ не оплатят - просто вернём значения на склад.

Дополнительно, я бы отрисовал еще сценарий снятия сервисом склада
Дополнительно, я бы отрисовал еще сценарий снятия сервисом склада

На этом все

И помните, что эта задача из реального собеседования.  

Когда вы её решаете, то на это есть всего 15-20 минут времени и интервьюер хочет понять:

  • какую теоретическую базу вы знаете, 

  • как вы мыслите, 

  • как умеете применять знания на практике. 

Tags:
Hubs:
+2
Comments8

Articles