Разборы задач

Проектирование Lichess

Попробуйте решить эту задачу самостоятельно

Практикуйтесь с интерактивными подсказками и моментальной обратной связью

Перейти на Premium

Постановка задачи

♟️ Что такое Lichess.org?

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

Краткий экскурс для тех, кто мало знаком с шахматами. Два игрока ходят по очереди на одной доске, у каждого есть таймер с обратным отсчетом времени. Контроль времени бывает разным: от классических шахмат с несколькими часами на партию до блица и пули, где дается всего по минуте на игрока. В быстрых режимах у шахматистов есть буквально секунды на ход, и любая задержка сети отнимает их драгоценное время. У каждого игрока есть рейтинг (например, Эло), который определяет подбор соперников и позицию в таблице лидеров. Сначала мы спроектируем систему для одной игры, а затем углубимся в сложности масштабирования: подбор игроков, управление большим пулом игровых серверов и обеспечение честности таймеров при разной сетевой задержке у соперников.

Функциональные требования

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

Основные требования

  1. Игроки могут находить соперников равного уровня с помощью системы подбора и запускать партию.
  2. Игроки могут играть в шахматы в реальном времени.
  3. Игроки могут просматривать глобальную таблицу лидеров и свое место в ней. И таблица, и место игрока обновляются вскоре после завершения партий.

За рамками задачи

  1. Наблюдение за играми в реальном времени и трансляция популярных досок.
  2. Внутриигровой чат, список друзей и социальные функции.
  3. Задачи, обучение, послеигровой анализ или просмотр повторов партий.
  4. Турниры и игры в режиме арены.
  5. Защита от читерства и обнаружение шахматных движков, а также контроль честности в турнирах. В конце мы вернемся к тому, почему это интересная, но выходящая за рамки текущей задачи тема.

Нефункциональные требования

Перед тем как перейти к требованиям, определим масштаб системы, так как именно он диктует большинство архитектурных решений. Мы будем проектировать платформу под 500 тысяч одновременных партий на пике. В каждой игре участвуют два игрока со своими соединениями, что дает нам 1 миллион одновременных подключений. Кроме того, нужны вычислительные ресурсы для проверки каждого хода и ведения двух таймеров в каждой партии. Эти числа мы будем использовать во всех подробных разборах.

Перейдите на Premium, чтобы продолжить

Разблокируйте доступ к этой статье и всем остальным материалам с NowInterview Premium

Перейти на Premium