1️⃣ Монолит first, EDA следом ✅ Вы прошли N секций в процессе найма. Остался маленький нюанс. Нужно решить задачу: "Спроектируйте сервис заказа еды. Масштабируемый на весь мир, естественно." Задачу из System Design😱. Что делать? Давайте разбираться.

⚡️ Конечно, у вас будет кубернетиз и канареечный деплой. ELK, шардированная СУБД. И ещё много чего интересного. Но всё это будет потом. А сначала на сцену должен выйти он - Монолит. Почему? ↗️ Этот базовый компонент позволит:

  1. спроектировать минимально работающую систему.
  2. описать все нужные флоу - поиск ресторанов, показ меню, выбор блюд, заказ, ...
  3. зафиксироваться с интервьюером об очередном пройденном этапе

❗️ Не стоит бояться, что это может быть воспринято как показатель низкого грейда. Скорее, наоборот. В моей практике я видел сениорного кандидата, который сразу пошёл в сложную систему. И поплыл... 🐳 Нарисовал много сервисов. Но где-то стрелочки не доведены до конца. Не все флоу описаны...

🏠 На этом фундаменте уже можно строить масштабируемую систему. В случае сервиса заказа такая архитектура сводится к микросервисной. Где каждый сервис воплощает какой-то из доменов: • обслуживание заказа • проведение оплаты • доставка • ... Встаёт важный вопрос - как микросервисам взаимодействовать? EDA, твой выход!

‼️ Event-Driven Architecture (EDA) Мы хотим масштабировать наши сервисы независимо. По максимуму их развязать. Поэтому давайте придумаем такую сущность как событие. order_created, к примеру. Пускай наш order service при создании пользователем заказа отправляет такое событие. Куда? Не в какой-то определенный сервис. А в какое-то временное хранилище. Вот бы выбрать такое, чтобы можно было с одной стороны легко класть. С другой читать. Настраивать время хранения. Kafka, твой выход! У нас появляется некое развязывающее ПО. Так называемое middleware. Всё взаимодействие проходит через него. Поздравляю! 🔥 Мы изобрели архитектуру, основанную на обмене событий между её компонентами! 👍 💯 Почему Кафка? Логика её использования проста - есть писатели, внутренние топики, потребители Активно используется в BigTech Отлично выполняет функцию перекладчика событий. Наш order_created попадает в целевой топик. Откуда эти события вычитывают потребители. В первую очередь payment service. Ещё, возможно, аналитический. Благо функционал consumer groups нам в этом помогает.

✏️ Итого:

  1. Мы не пошли в частую ошибку новичка - сразу масштабироваться закидывая интервьюера всеми мыслимыми и немыслимыми терминами
  2. Последовали принципу Monolith first
  3. Расшили его по сервисам
  4. Ввели EDA, события, развязывающий компонент - Kafka
  5. Всё это привело нас к более легкому масштабированию

"А что с кубернетиз, деплоями, шардированием?", - оказывается до этого может даже не дойти 🐤 💡 Важно начинать с базы. И строить систему эволюционно. 🔥 Удачи в собеседованиях!

Автор - Невзоров Владимир. Телеграмм канал - @system_design_world


В этом посте были ссылки, но мы их удалили по правилам Сетки

1️⃣ Монолит first, EDA следом
✅ Вы прошли N секций в процессе найма. Остался маленький нюанс. Нужно решить задачу:
"Спроектируйте сервис заказа еды. Масштабируемый на весь мир, естественно | Сетка — социальная сеть от hh.ru