Попробуйте решить эту задачу самостоятельно
Практикуйтесь с интерактивными подсказками и моментальной обратной связью
Постановка задачи
♟️ Что такое Lichess.org?
Онлайн-платформы для шахмат позволяют игрокам находить соперников равного уровня, играть партии в реальном времени с общими шахматными часами и подниматься в глобальной таблице лидеров. Сервер проверяет каждый ход и управляет часами обоих игроков, поэтому ни один из них не может нарушить правила или сжульничать со временем.
Краткий экскурс для тех, кто мало знаком с шахматами. Два игрока ходят по очереди на одной доске, у каждого есть таймер с обратным отсчетом времени. Контроль времени бывает разным: от классических шахмат с несколькими часами на партию до блица и пули, где дается всего по минуте на игрока. В быстрых режимах у шахматистов есть буквально секунды на ход, и любая задержка сети отнимает их драгоценное время. У каждого игрока есть рейтинг (например, Эло), который определяет подбор соперников и позицию в таблице лидеров. Сначала мы спроектируем систему для одной игры, а затем углубимся в сложности масштабирования: подбор игроков, управление большим пулом игровых серверов и обеспечение честности таймеров при разной сетевой задержке у соперников.
Функциональные требования
Сначала определите несколько главных функциональных требований. Все остальное отнесите за рамки задачи. Демонстрация продуктового мышления важна, но вы не успеете спроектировать все, поэтому держите список коротким и обязательно согласуйте его с интервьюером.
Основные требования
- Игроки могут находить соперников равного уровня с помощью системы подбора и запускать партию.
- Игроки могут играть в шахматы в реальном времени.
- Игроки могут просматривать глобальную таблицу лидеров и свое место в ней. И таблица, и место игрока обновляются вскоре после завершения партий.
За рамками задачи
- Наблюдение за играми в реальном времени и трансляция популярных досок.
- Внутриигровой чат, список друзей и социальные функции.
- Задачи, обучение, послеигровой анализ или просмотр повторов партий.
- Турниры и игры в режиме арены.
- Защита от читерства и обнаружение шахматных движков, а также контроль честности в турнирах. В конце мы вернемся к тому, почему это интересная, но выходящая за рамки текущей задачи тема.
Нефункциональные требования
Перед тем как перейти к требованиям, определим масштаб системы, так как именно он диктует большинство архитектурных решений. Мы будем проектировать платформу под 500 тысяч одновременных партий на пике. В каждой игре участвуют два игрока со своими соединениями, что дает нам 1 миллион одновременных подключений. Кроме того, нужны вычислительные ресурсы для проверки каждого хода и ведения двух таймеров в каждой партии. Эти числа мы будем использовать во всех подробных разборах.
Перейдите на Premium, чтобы продолжить
Разблокируйте доступ к этой статье и всем остальным материалам с NowInterview Premium
Перейти на Premium