← Все проекты

Каталог и короткие ссылки на курсы

Глава перед этим проектом →

В «Клубе» появился каталог курсов. Авторы делятся короткими ссылками, а часть материалов открывается только по приватному приглашению. Пользователи часто переходят по уже созданным ссылкам и редко создают новые. Спроектируйте хранение и переходы так, чтобы популярность каталога не мешала отзыву доступа.

Все числа ниже — учебные условия, а не показатели существующей компании.

Ограничения

Нужно хранить 1 млн ссылок. На пике приходит 2 000 переходов и 20 запросов создания ссылки в секунду. Изменение каталога должно становиться видимым за 60 секунд. Отозванная приватная ссылка не должна бессрочно работать из кэша — временного хранилища ранее полученных ответов. Допустимое окно между отзывом и прекращением доступа сформулируйте явно.

Что подготовить

Выберите состав записи ссылки и оцените хранение по её предполагаемой длине. Отдельно укажите размер полезных данных, индексов и дополнительных копий, если включаете их в расчёт. Опишите генерацию короткого идентификатора и поведение при коллизии, когда одинаковый идентификатор получился для разных ссылок.

Покажите путь создания, обычного перехода и отзыва ссылки. Для кэша задайте срок жизни записи — TTL — и способ обновления. Объясните, какая проверка защищает приватный материал, если старый адрес сохранился в браузере или промежуточном кэше. Сравните хотя бы два варианта проверки доступа.

Подсказка

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

Как проверить решение

Разберите коллизию идентификаторов, особенно популярную ссылку, полный отказ кэша и чтение устаревшего значения. Покажите, какая нагрузка при отказе попадёт в базу и как её ограничить.

Задайте цель p95 ≤150 мс: не менее 95% измеренных запросов должны укладываться в этот предел. Обозначьте начало и конец измерения, состав запросов и условия теста. Без измерений это цель, а не достигнутый результат.

Усложнение

Одна ссылка получает 70% всех переходов. Пересчитайте нагрузку на её путь и проверьте, поможет ли простое увеличение числа разделов базы.

Как оформить ответ

Сохраните схему, расчёты и политику отзыва в рабочей тетради. Завершите ответ сценарием нагрузочного теста и перечнем неизвестных величин. Проверка архитектуры самостоятельная.

Запишите ход рассуждений, расчёты и вопросы. Сохраните текст перед уходом со страницы. После входа в аккаунт ответ участвует в общей синхронизации прогресса. Автоматической оценки архитектуры здесь нет.