← Все проекты

Школьный «Клуб»: события и запись

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

Школьный «Клуб» публикует мероприятия и принимает заявки участников. Пока запись ведут в общей таблице: организатор вручную считает свободные места, а ученики иногда отправляют заявку повторно. Нужно спроектировать первую версию сервиса и объяснить, как она защитит последнее место от одновременной записи двух человек.

Все числа ниже — учебные условия. Используйте их в расчётах, а неизвестные величины обозначайте как допущения.

Ограничения

У сервиса 1 000 пользователей, до 50 событий в месяц и 30 мест на событие. Пиковая нагрузка — 20 запросов в секунду. Повтор одного действия не должен создавать вторую запись участника. Переполнение события запрещено. Организатор управляет своим мероприятием; обычный участник не получает эти права через подмену идентификатора.

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

Составьте техническое задание на одну страницу: кто пользуется сервисом, какие действия доступны и какие правила нельзя нарушать. Выберите четыре метода API — интерфейса, через который клиент обращается к серверу. Для каждого укажите входные данные, успешный ответ и возможные отказы.

Нарисуйте SQL-модель: таблицы, ключи, связи и ограничения базы данных. Объясните, где проверяются права и где принимается окончательное решение о свободном месте. Покажите на диаграмме последовательности, как два запроса одновременно пытаются занять последнее место. Отдельно оцените чтения и изменения данных: 20 запросов в секунду не означают 20 новых участников.

Подсказка

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

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

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

Усложнение

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

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

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

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