Как управлять параллелизмом и поддерживать согласованное состояние в многопользовательской онлайн-игре (MMOG)?

#concurrency #architecture #computer-science #software-design #distributed-system

Вопрос:

Предположим, вам нужно создать онлайн-игру в крестики-нолики с 1 м строками х 1 М столбцами (1 000 000 000 000 ячеек), и игра должна быть разработана и построена для поддержки двух команд по 100 000 участников, каждая из которых играет одновременно. Одной команде автоматически присваивается Xs, а другой-Os. Члены обеих команд могут играть одновременно, но ячейка может быть отмечена только один раз. Давайте предположим, что каждый игрок играет со своего собственного компьютера, и на экране компьютера может отображаться вся матрица. Каждый игрок может выбрать любую случайную ячейку на доске и пометить ее. Ожидается очень низкая задержка в пределах миллисекунд для каждого выбора ячейки.

Как бы вы спроектировали его, чтобы обеспечить такой уровень параллелизма и поддерживать согласованность состояния игры? Какой механизм вы бы использовали, чтобы следить за состоянием правления? Будете ли вы поддерживать представительство совета директоров в RAM? Если вам нужно выбрать базу данных, какую бы вы использовали? Моя главная забота заключается в том, как справиться с параллелизмом, чтобы поддерживать согласованное состояние игры.

Считать:

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