сетевые игры КРИС КАСПЕРСКИ АКА МЫЩЪХ Спецвыпуск: Хакер, номер #064, стр. 064-062-4 Динамическое балансирование нагрузки Выбираешь самый быстрый компьютер с мощным процессором (выбираешь, естественно, автоматически — по скорости передачи данных и времени отклика на ping), подключаешь к нему чуть-чуть менее быстрые компьютеры, которые будут нести на своих плечах еще менее быстрые и т.д. Теперь тормозные компьютеры оказываются задвинутыми в самый зад, а весь трафик ложится на плечи узлов, висящих на быстрых каналах. Эта схема не является заданной раз и навсегда, она может (и должна) динамически обновляться. Главное — выбрать протокол обмена так, чтобы равномерно распределить трафик на все узлы. Чтобы игроки (их количество в этой схеме измеряется десятками) не толпились на крошечном пятачке, необходимо создать достаточно большое игровое пространство, которое не сможет обсчитать никакой отдельно взятый Pentium. Значит, потребуется распределенная система, нарезающая «объекты» игрового мира на куски и раскидывающая их по наименее загруженным машинам. Использованная ранее схема «каждый компьютер обрабатывает своих монстров» уже не котируется, так как когда некоторый объект (монстр или игрок) попадет в поле зрения «чужого» объекта (монстра или другого игрока), для синхронизации игровых миров требуется задействовать механизм подтверждений, а эти тормоза вполне терпимы в случае трех-пяти игроков, но неприемлемы в мире, где их десятки. Допустим, ты модернизируешь протокол обмена и решил, что пусть каждый компьютер обрабатывает только тех монстров, которые находятся в его игровом пространстве (то есть если монстр уходит из «своего» игрового пространства, его обработка передается другому компьютеру). Все будет работать замечательно до тех пор, пока все монстры не соберутся в пространстве одного игрока, и тогда его компьютер конкретно ляжет, будучи не в состоянии обрабатывать эту армию в реальном времени. Так что без распределенной системы с автоматическим балансированием нагрузки никуда! К сожалению, подобные системы очень сложны в реализации и отладке, в общем случае они не оправдывают себя и оказывается выгоднее установить выделенный сервер. Выделенный сервер Выделенный сервер — фактически тот же самый ведущий компьютер, только без заморочек. В отличие от обыкновенного компьютера, сервер не отваливается внезапно, чем сразу же снимает целый комплекс проблем. Задача синхронизации в подобной централизованной структуре решается сама собой, поскольку клиент отображает на экране только то, что сказал ему сервер, а уж игровой мир сервера всегда поддерживается в синхронном состоянии с самим собой. Есть и недостатки. Поддержка постоянно работающего сервера — удовольствие не из дешевых. Обычного хостинга за $8 в год с Perl, PHP и MySQL тут явно недостаточно. Потребуется прямой доступ к машине с возможностью выполнять двоичные файлы, написанные под XP (или что у тебя там), и очень мощный процессор, способный поддерживать огромный игровой мир в подвижном состоянии. Вопросы финансов. |