Проектирование масштабируемого сервиса сокращения URL
100 млн запросов за 30 дней — примерно 39 RPS в среднем. Нужны пиковая нагрузка и точное определение ≤1 мс: такой end-to-end SLA через интернет нереалистичен.
Читать ответПодготовка к интервью
889 вопросов по System Design
Что проверяют на интервью
В этой подборке вопросы сгруппированы по формату «System Design», чтобы подготовку можно было вести от базовых тем к практическим задачам. В подборке чаще встречаются темы: backend, api, database.
Каталог
100 млн запросов за 30 дней — примерно 39 RPS в среднем. Нужны пиковая нагрузка и точное определение ≤1 мс: такой end-to-end SLA через интернет нереалистичен.
Читать ответГенератор выдаёт уникальный идентификатор, TinyUrl сохраняет отображение ID → URL. Уникальный индекс в хранилище остаётся последней защитой от коллизий.
Читать ответИдемпотентными должны быть повторяемые изменения: создание по ключу запроса, запись URL, обработка событий и очистка. Аналитические переходы нельзя бездумно дедуплицировать по ссылке.
Читать ответСделайте единый контракт GET /feed с cursor и limit, а ответ — списком типизированных элементов и next_cursor. Различия платформ не должны менять смысл данных.
Читать ответSPOF определяется числом независимых экземпляров и механизмом переключения, а не названием компонента. Особенно важны генератор кодов и лидеры шардов.
Читать ответРедиректы обслуживает быстрый read-path с кешем; создание ссылок пишет в основное хранилище, а аналитика обрабатывает события асинхронно.
Читать ответВыделите каталог, остатки по аптекам, корзину, заказ, оплату и выдачу/доставку. Для медицински чувствительных операций нужен отдельный подтверждаемый процесс, а не автоматическое решение интерфейса.
Читать ответДля переходов по короткой ссылке удобен ключ шардирования, вычисляемый из short_link: GET сразу знает, куда обращаться. Шардирование только по user_id потребует дополнительного поиска владельца.
Читать ответРазделите путь создания ссылки и высокочастотный путь перехода. Храните уникальное соответствие кода адресу, кэшируйте востребованные ссылки и масштабируйте stateless-обработчики горизонтально.
Читать ответСохраните связь уникального короткого кода с длинным URL в БД. POST создаёт ссылку, GET по коду находит исходный адрес и возвращает redirect.
Читать ответЗапрос проходит авторизацию и лимиты, получает уникальный код, затем атомарно сохраняется в нужном шарде. Глобальная блокировка всех создаваемых ссылок не нужна и станет узким местом.
Читать ответПеревод должен атомарно изменять оба счёта и создавать неизменяемую запись операции. Идемпотентный ключ защищает от повторного списания после тайм-аута или повторного запроса.
Читать ответ