Почему у меня возникли такие вопросы? Попытаюсь расказать о структурах сервера до которых я пока додумался, но спешу заверить что это пока теоритические разработки, которые я не испытывал на практике. 1 - Вести обработку 1 потоком. Тоесть последовательно обрабатывать сообщения/действия и реакцию на них от всех пользователей в 1 потоке. Такой подход сщитаю крайне нежелательным да и вообще не приминимым в ММО. Почему? Ну для примера: Вася пупкин, первый в списке, посматрел инвентарь сервер потратил на это 10мс, Федя, второй в списке, попытался приминить что либо из своего инвентарая сервер затратил еще 10мс, а Володя стоящий в конце списка должен ждать реакции на его действия, пока сервер доберется до обработки его сообщений. Это не критично для 20 - 30 игроков, думаю что серверы шутеров так и построены, ну или практически так, но там и онлайн соответсвенный, а что будет если ты стоищь 10к в очереди, вообщем понятно что ждать будешь долго...
2 - Каждый игрок имеет свой собственный поток обработки. Этот вариант хорош тем что мы можем гарантировать равное процесорное время каждому игроку, и Володе не придется ждать пока Вася закончит действия со своим инвентарем. Но возникает очень зерьезная проблема, это проблема синхроизации потоков. Другая проблема состоит в том что выполение потоков может быть на разных узлах кластера, ну только представте ситуацию Вася с Петей затеяли пвп, к проблеме передачи и синхронизации данных между двумя потоками Вася и Пети, добавиться проблема того что Васен может обрабоаться медлей Петеного за счет того что узел который работает с Петеным потоком разгружен. Хотя может это моя надуманая проблема...
3 - Вариант заключается в разбиении игрового мира на сектора и каждый сектор обрабатывается своим потоком. Ну все здорово тормозит то у всех срауз:) но тут может возникнуть ситуация описаная в варианте 1, много игроков в 1 секторе -> много игроков в 1 потоке, если сделать слишком мелкое дробление то возникнут проблемы описанные во втором варианте. Вообщем как вариант это уже более приемлемый, тут придется играть с размерами размерами сегментов подбирая оптимальные.
4 - Разбиение игрового мира на сектора и разноска их на отдельные физические процессоры. Каждый физический процессор кластера отвечает за обработку ведомого ему участка игрвого мира. Но тут опять проблема. Придется строить кластре с равными по произвоительности узлами + эти узлы должны иметь хорошую производимость. Очень плохо в этом варианте то что может получиться так что 1 узел будет отвечать за обработку зоны с 2 - 3 игроками, а другой узел пудет пыхтеть над обработкой нескольких тысяч и самое неприятное что мы не можем заранее угадать к каком месте будет много народу. Конечно можно так разбить мир что "нуб" локации будут больше, чем "папские" локации но это не самый хороший вариант.
5 - Заключается в том чтобы принудительно равномерно нагружать узлы. Суть в том что бы вновь подключившегос игрока отправлять на обработку определнного узла. Например 1 пользователь отправляется на обработку в 1 узел, 2 во второй, 3 в первый, четвернтый во 2. Но опять возникнут проблемы с синхронизацией, хотя распределение нагрузки в этом варианте наиболее равномерны.