Перейти к содержимому

Системный дизайн

Вопросов: 123 из 40 собеседований. Источник указан в заголовке группы.

  • Как бы вы спроектировали сервис для сокращения ссылок?
  • Task: Design the architecture of Twitter
  • Task: Design a URL shortener service (100k rps)
  • How does a server processor differ from a desktop and a laptop processor?
  • What is the typical CPU-to-RAM data exchange speed?
  • What is the typical speed of data exchange with storage?
  • What types of storage systems exist?
  • What is the typical amount of RAM on a server?
  • Как бы ты спроектировал сервис по генерации коротких ссылок из длинных?
  • Пул задач: rate limiter, tinyurl shortener, kv storage, поиск авиабилетов, доставки конфигов, подписки на поиски.
  • 3й тех. этап - системный дизайн;
  • 10Кб на сообщение;
  • DAU: 3 000 000;
  • MAU: 30 000 000;
  • Предположительный рост до 10 млн DAU за 3 года (*);
  • сообщений в день 10 сообщений в 3 чата (30 сообщений);
  • читаем/пишем 1:1;
  • 8 часов активно в день;
  • в одном чате 10 сообщений;
  • на человека в среднем по 15 чатов;
  • условно бесконечно денег.
  • 2 участника;
  • условный реалтайм;
  • чат должен быть привязан к объявлению;
  • история чатов должна быть всегда;
  • только текст (нет медиа);
  • чат остается даже если объявление снято или удалено;
  • важно чтобы были notification пользователю о сообщениях;
  • Можно сделать поисковый запрос и получить страницу поисковой выдачи - SERP (Search Engine Results Page);
  • Можно посмотреть карточку отдельного объявления;
  • Можно посмотреть список своих объявлений;
  • Можно добавить новое объявление которое появится в поисковой выдаче.
  • Задача по system design;
  • Реализовать rate limiter
  • Есть высоконагруженный сервис с таблицей в PostgreSQL на несколько миллионов записей. Запрос с фильтрацией по двум колонкам (WHERE column_B =? AND column_C =? ) работает медленно. В таблице есть только первичный ключ, других индексов нет. Как вы найдете, что можно оптимизировать, и как оптимизируете этот запрос?

Then a system design section.

  • Как спроектировать сервис рассылки отчетов 100 тыс. клиентам ровно один раз?
  • Как масштабировать приложение, вертикальное/горизонтальное масштабирование?
  • Какие есть уровни согласованности между системами можете назвать?
  • Актуальность данных: система должна возвращать всегда актуальное количество оставшихся товаров и не допускать резерва закончившегося товара;
  • Высокая доступность и надежность: система должна быть доступна 99.99% времени и обеспечивать сохранность данных даже при сбоях оборудования;
  • Быстрый доступ к данным: Время отклика системы не должно превышать 200 мс для 99-го перцентиля операций;
  • Какие виды хранилища ты знаешь?
  • Клиенты могут получать бонусы за покупки, отзывы, участие в акциях и т. п.;
  • Клиенты может выбрать категории товаров с повышенным кашбаком на месяц;
  • Клиенты должны иметь возможность просматривать баллы: баллов, историю начислений и списаний бонусных баллов, доступные категории повышенного кашбака через мобильное приложение и web;
  • Клиенты должны иметь возможность использовать бонусы для частичной оплаты покупок;
  • Администратор системы должен иметь возможность гибкой конфигурации системы: управление категориями, ограничения на максимальное начисление за период, дата сгорания бонусов и пр.
  • Что такое консистентное хэширование?
  • DevOps смотрит и видит, что упираемся в CPU. Код написан нормально. Нужно масштабироваться. Что делать?
  • У «типичного» CRUD сервиса - в какой-то момент некоторые методы стали работать медленно и сервис начал таймаутить. Сервис состоит из:

После было устное проектирование их системы (чаты). Как будешь отправлять сообщения, что такое веб-сокеты, их преимущества, как будешь контролировать соединения и кому что отправлять, как будет построено взаимодействие с сервисом чата, сообщений, профиля. У них я так понял Event-driven архитектура, так что выведут на это решение и будут накидывать как контролировать эти события, какие топики создавать.

  • появится интеграция с настоящей базой данных;
  • появится отправка письма-подтверждения о бронировании;
  • появится возможность бронирования нескольких номеров.
  • Чаты становятся популярными, число пользователей растет и нам скоро не хватит свободного места на диске для хранения всей переписки. Что нам делать?
  • Одинаковые ресурсы узлов: Все узлы (ноды) баз данных имеют одинаковые характеристики потребления ресурсов (CPU/RAM/Disk);
  • Выделенные сервера: Некоторые кластеры (или узлы) должны разворачиваться только на выделенных серверах с определенными метками (тегами);
  • Размещение: Нужно учитывать это требование и не размещать такие узлы на обычных серверах.

    На базе этих требований вам необходимо спроектировать две связанные подсистемы: Шедулер (resource manager) и Дешедулер (descheduler). Шедулер (Resource Manager)

  • Учитывать актуальную топологию (расположение ЦОД, доступные сервера, их загруженность и метки);
  • Учитывать заявки на ресурсы (CPU, RAM, Disk);
  • Хранить историю размещений и уметь оперативно реагировать, если один из серверов или ЦОД стал недоступен (например, нужно пересоздать часть узлов где-то еще).

    Дешедулер (Descheduler)

  • При «перeeзде» нужно сохранить исходные принципы размещения (3 ЦОД, разные физические сервера и т. д.);
  • Учитывать сложность миграции данных (объемы, сетевые ограничения).

Дали системный дизайн: Реализовать онлайн редактор текста (типа Яндекс.Кода, гугл-таблиц и т. п.).

  • Спроектировать handler
  • Задача: Требуется построить пуш сервис;
  • Детали: Продумать кейсы когда сервис отваливается и как об этом узнать быстро и максимально точно (где хранить данные и как добиться того, чтобы сообщения не ушли 2 раза, но и хотя бы один раз ушли точно). По ресурсам условно нет ограничений.
  • Какие способы горизонтального масштабирования известны?
  • Связь: В одной переговорке может быть несколько устройств.
  • Получение списка всех переговорок с их оборудованием;
  • Просмотр текущего состояния конкретного устройства;
  • Управление устройствами: включение/выключение, регулировка громкости;
  • Система должна отслеживать и сохранять историю изменений состояния устройств.

    Фронтенд рассматривать не нужно.

  • Как на проекте было реализовано горизонтальное и вертикальное масштабирование в кластере?

Tinkoff / Тинькофф (T-Bank / Т-Банк) - Системный дизайн

Заголовок раздела «Tinkoff / Тинькофф (T-Bank / Т-Банк) - Системный дизайн»
  • Система позволяет сторонним системам зачислять баллы за выполнение «полезных действий»
  • Система позволяет просмотреть Топ-10 семей за текущий месяц по сумме баллов всех членов семьи
  • Система позволяет просмотреть место и количество баллов своей семьи с разбивкой на каждого из членов семьи
  • Система позволяет получать состояние рейтинга в реальном времени
  • Доступность API 99.99%, latency API не более 100 мс
  • Система должна хранить историю изменений за последние 3 года для разбора инцидентов и споров службой поддержки
  • Хранить историю перемещений за 1 год
  • Допустимая задержка обновления данных - 1 минута
  • Курьеров всего: 300К
  • Операторов у системы - 1000 одновременно
  • География - вся Россия
  • Координаты отправляются каждые 30 с
  • Что такое вертикальное/горизонтальное масштабирование?
  • Что такое хайлоад и какие критерии?
  • 1-я страница с общим списком заказов. Заказы могут быть на разный вид транспорта - поезд, автобус, самолет. На ней отражена базовая информация о заказе;
  • 2-я страница - это детальная информация по каждому заказу.

System design: design the architecture of a population census system for China.

В общем тут как на системном дизайне нужно постоянно уточнять и спрашивать про особенности, и проговаривать все свои шаги.

  • Приходилось ли тебе выбирать стук для сервисов?
  • Знаком ли с моделью C4? Architecture as a code? Писал ли ADR?
  • Продавец может размещать карточку товара
  • Товары распределены по категориям
  • Продавец не может создавать свои категории, то есть все категории заводим мы
  • Покупатели могут зайти на карточку товара и купить (механику покупки мы не проектируем)
  • Есть возможность поиска товара по названию, описанию
  • Есть возможность просматривать товары в категории

Wildberries / WB - 18 (Баланс продавца [системный дизайн])

Заголовок раздела «Wildberries / WB - 18 (Баланс продавца [системный дизайн])»
  • отправить сообщения;
  • принять прочитать сообщения;
  • чаты связанные с объявлениями пользователей;
  • инициализация чата происходит как только пользователь нажимает на кнопку написать;
  • чаты являются «рeeт-то-рeeр» для общения продавца и покупателя;
  • просмотр списка чатов;
  • «Realtime» сообщения должны доставляться от отправителя до получателя с задержкой до 3 секунд.

Wildberries / WB - 19 (Логистика [системный дизайн]) — 3 кв 2025

Заголовок раздела «Wildberries / WB - 19 (Логистика [системный дизайн]) — 3 кв 2025»
  • Клиенты (внешние системы): Создают заказы на перевозку через интеграцию; Источники: маркетплейсы, внешние логистические платформы, корпоративные системы.
  • Водители (исполнители): Используют мобильное приложение; Получают информацию о маршрутах, точках погрузки/разгрузки; Отправляют статусы (прибыл, загрузил, выехал и т. д.).
  • Построение маршрутов: Для каждого заказа формируются маршруты так, чтобы заказ доехал от точки А до точки В; Возможны промежуточные точки (хабы) - заказ может разбиваться на несколько этапов; Каждый этап (маршрут) имеет своего исполнителя.
  • Составной маршрут (многоэтапная доставка): Один заказ может включать несколько связанных маршрутов: Пример: A→X→Y→B: A→X - первая миля или смешанный тип; X→Y - магистральная перевозка; Y→B - последняя миля или смешанный тип. Каждый маршрут: Имeeт свой тип; Исполняется отдельно; Связан с другими маршрутами в рамках единого заказа. Система должна обеспечивать: Согласованность между маршрутами; Статусы каждого этапа и заказа в целом; В одном маршруте несколько заказов.
  • Назначение исполнителя: Система должна находить подходящего исполнителя (водителя/ТС) для каждого маршрута.
  • Статусы и трекинг: Водители отправляют статусы по маршрутам через приложение; Система должна отображать текущий статус заказа и маршрутов.
  • Система должна быть способна обрабатывать до 20 миллионов заказов в сутки;
  • Поддержка до 15 000 активных грузоперевозок (маршрутов) в день;
  • Одновременная работа до 10 000 активных водителей, подключенных через мобильное приложение;
  • Горизонтальное масштабирование компонентов: при росте нагрузки система должна масштабироваться без деградации производительности.

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