ИГРОДЕЛ
Войдите на сайт или зарегистрируйтесь!!!

Построение виртуальных миров MMO. Часть 2.

Перейти вниз

Построение виртуальных миров MMO. Часть 2.

Сообщение автор Admin в Вс Фев 21, 2010 8:55 pm

Изменение гибкости виртуального мира

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

По мере расширения мира и запуска баннерных кампаний все больше и больше пользователей будут регистрироваться в качестве бесплатных и платных членов, и мы можем столкнуться с тем, что текущая установка аппаратных средств лишена лошадиной силы.
Существует несколько вариантов построения гибкого серверного приложения. Мы собираемся проиллюстрировать парочку из них, подчеркивая плюсы и минусы каждого решения:

Создание кластеров:


"Компьютерный кластер – это группа объединенных между собой компьютеров, которые так тесно взаимодействуют друг с другом, что во многих случаях представляют собой единый аппаратный ресурс. Кластер имеет общие компоненты (но не всегда) соединенные друг с другом посредством скоростных каналов передачи данных. Кластеры обычно разворачиваются для того, чтобы улучшить производительность и/или отказоустойчивость, которые предоставлял один компьютер. В то же время, они обычно стоят гораздо дешевле, чем один компьютер с той же скоростью и отказоустойчивостью." (из Wikipedia)


Эта техника может использоваться и с веб сервером, и с сервером базы данных для построения гибкого серверного приложения, которое справлялось бы с возрастающим количеством параллельных запросов.


На сегодняшний день SmartFoxServer не поддерживает кластеры. Единственное решение сокет сервера, доступное сегодня в режиме кластера - это Flash Media Server от Adobe. К сожалению, FMS не очень распространен в играх MMOG, а лицензионная модель очень дорого стоит.



Параллельные экземпляры:



Альтернативным методом увеличения гибкости сокет сервера является запуск множества параллельных экземпляров. Разделяя виртуальный мир на области, мы можем заставить каждый экземпляр управлять одной частью мира и делиться общими данными в кластеризированном сервере базы данных, который будет доступен для всех областей.



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



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


Следующая диаграмма иллюстрирует окончательную архитектуру сервера нашего вымышленного проекта VirtuaPark:

• Web Server (веб сервер): так как большинство обращений серверной стороны будет направлено на расширение SmartFoxServer, включая регистрацию пользователя, восстановление пароля и т. д., вероятно у нас будет возможность управлять всем Интернет трафиком с помощью одного веб сервера. Дополнительно, чтобы предотвратить отказ какого-либо пункта, мы можем держать резервный сервер-зеркало на случай, если выйдет из строя веб сервер.

• SmartFoxServer: каждый экземпляр будет запущен на высокопроизводительной двухъядерной, двухпроцессорной машине, способной обслуживать по крайней мере 8 - 14.000 пользователей (это включает чаты, мгновенный обмен сообщениями, многопользовательские игры, и т.д.) от общего числа в 40.000 или более одновременно играющих пользователей.

• Database Server (сервер базы данных): база данных будет обрабатывать запросы, исходящие от всех экземпляров области. По этой причине мы решили использовать кластеризированное решение, чтобы обеспечить лучшую отказоустойчивость сервиса. (Более подробно о производительности и гибкости вы можете прочитать в этом f.a.q.)

Организация защиты виртуального мира

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

• Базовые инструменты безопасности: SmartFoxServer поставляется вместе с базовым набором инструментов безопасности, которые должным образом могут быть сконфигурированы для предотвращения типичных хакерских атак наподобие подключения и спама. Чтобы избежать этих проблем, мы предоставляем фильтры анти-спам и IP фильтр, которые пресекают чрезмерное количество подключений с одного IP адреса. Дополнительно, сервер чрезвычайно параноидально относится к подключенным сокетам, которые не делают запрос на регистрацию. Такие подключения не могут взаимодействовать с сервером и отключаются после установленного периода времени.

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

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

• Денежные/призовые операции: если вы запускаете основанные на призах игры (не важно, деньги ли это, товары, услуги и т. д.), то естественно, вы привлекаете внимание хакеров. Чтобы достичь наивысшего уровня безопасности, вам следует запускать призовые операции между SmartFoxServer и веб-сервером с подключенным шифрованием SSL. В данном случае взаимодействие между двумя серверами проходит незаметно для посторонних глаз посредством наиболее безопасного протокола.

• Укрепление серверной стороны: так как SWF файлы легко перенастраиваются с помощью декомпилятора, то здесь решающим моментом является как можно большее усложнение жизни хакеру-фанату. Вероятно, не существует идеального решения для обеспечения полной безопасности клиентского приложения, но вы можете достичь достаточно хороших результатов, комбинируя различные техники:

1. Делайте ваш код блочным и заставьте его загружать разные внешние части. Также попробуйте спрятать строки с именем файла внутри своих swf файлов.
2. Если вы подгружаете внешние XML данные, содержащие важную информацию о других ресурсах приложения, зашифруйте их.
3. Используйте затемнитель кода: декомпилированный источник кода будет очень трудно прочитать и понять.
4. Используйте междоменную файловую политику, чтобы остановить нежелаемые домены. Если кто-то крадет ваше клиентское приложение и пытается загрузить взломанную версию на другой сайт, подключение к вашему серверу будет отвергнуто.
5. С помощью последней версии языка Actionscript 3.0 вы можете передавать целые swf файлы в качестве байтовых массивов через сокет. При проведении такой операции кэш браузера игнорируется, и очень трудно будет перехватить данные.

Рекомендации и инструменты разработки

Теперь, после того, как мы проанализировали архитектуру клиента/сервера, гибкость и безопасность, нам, наконец, нужно взяться за клавиатуру и погрузиться в кодирование...

Даже если вы испытываете большое искушение, следует на некоторое время притормозить и обсудить еще несколько аспектов разработки, которые мы еще не затрагивали. VirtuaPark, пожалуй, будет иметь успех, если мы четко будем представлять, чего хотим достичь, а также, если у нас есть набор реальных задач, в пересчете на денежные, временные и ресурсные вложения.

Далее следует список важных аспектов, которые нужно принять во внимание перед началом разработки нашего виртуального мира:

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

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

Дополнительно, начиная (сравнительно) с небольшой части, вы уменьшаете риски отказов, потому что вы можете получить отзывы от пользователей на ранней стадии и зафиксировать, что не работает, пока не стало слишком поздно.

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

SmartFoxServer позволяет быстро создать прототип кода серверной стороны с помощью высокопроизводительных скриптовых языков, таких как Actionscript и Python, которые могут значительно сократить время на разработку/создание прототипа.

• Документирование: большое значение имеет хранение документов, описывающих приложение и все его аспекты, что позволяет предотвратить забывание идей, которые вы обсуждали, но никогда не записывали. Кроме того, упрощается процесс инструктирования новых пользователей команды, или объяснения проекта людям за пределами компании.

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

• Управление версиями: это необходимое условие при написании кода в команде. Поддерживая управление версиями кода, вы уменьшаете шансы его потери, получаете центральное хранилище для файлов проекта и можете позволить многим разработчикам одновременно работать с теми же файлами. Когда все закончат кодирование, им нужно будет всего лишь подтвердить изменения в центральном хранилище. Модификации, произведенные другими членами команды, будут объединяться автоматически, а в случае, когда та же часть кода была изменена другим разработчиком, вам будет предложено разрешить секции с противоречивым кодом. Если в какой-либо промежуток времени новая часть кода останавливает приложение, вы можете быстро совершить откат к предыдущей версии без потери драгоценного времени. Существует много коммерческих и бесплатных инструментов управлениями версиями, мы рекомендуем начать с инструмента SVN, который является бесплатным и имеет открытые исходники.

• Регистрация: отладка многопользовательских приложений иногда может быть жутким кошмаром. Чтобы предотвратить длительные и разочаровывающие сеансы отладки, настоятельно рекомендуется вести журнал событий различной информации на клиентской и серверной стороне. Это позволит вам с легкостью проверить, что происходит на обоих концах приложения во время тестирования.

SmartFoxServer использует JDK Logging API для вывода информации на консоль операционной системы и в журналы событий. API также доступны через расширения при использовании любого из доступных языков (java, actionscript, python).

• Бета-фаза: ограниченная публичная бета-фаза является весьма важной для осуществления окончательного тестирования. После того, как приложение было успешно протестировано изнутри, наступает время запустить его в реальном времени и позволить выбранной группе пользователей поиграть с ним и сообщить о результатах. Это может быть проделано различными путями: путем наема профессиональных бета-тестеров, путем приглашения выбранных пользователей/игроков зарегистрироваться для бета-доступа, позволить любому человеку зарегистрировать бета-аккаунт без ограничений.

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

SmartFoxServer, основанный на MMOG

SmartFoxServer производит некоторые из наиболее творческих и забавных сообществ и MMOG, основанных на флеш, по всему Интернету.

Вы можете посмотреть демонстрационную секцию и узнать подробности о каждом проекте.

Хочется упоминуть Club Penguin (пожалуй, наиболее крупная MMO игра, когда-либо создаваемая по флеш-технологии), который стал очень популярным во многих странах по всему миру. Сообщество предлагает высокоинтерактивную окружающую среду с сотнями настраиваемых пунктов и мебели, привлекательными играми, событиями и квестами.

Galaxseeds – другой замечательный пример MMO с уникальной научно-фантастической темой, играми и кучей функций.

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

Существуют другие великолепные сообщества, которые вы можете просмотреть, наподобие Falcon Beach и Babbello, и мы уверены, что в течение некоторого периода времени появится много других подобных проектов.

Выводы

Эта статья просто поверхностно рассматривает один из наиболее захватывающих и комплексных типов разработки мультимедийного программного обеспечения. Мы надеемся, что она пробудит интерес к дальнейшему исследованию и изучению данного направления.
pig pig
avatar
Admin
Admin

Сообщения : 92
Очки : 280
Репутация : 36
Дата регистрации : 2010-02-20

Посмотреть профиль http://game-dll.mirbb.net

Вернуться к началу Перейти вниз

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения