Выбор архитектуры сервера

20.07.2007 Квиринг Алексей

Итак, у нас задача написать сервер для многопользовательской онлайн игры. Вот тут нам повезло, никто не говорил на чем писать и что использовать, был только набор требований и идей. Требования были такие — много людей бегают по миру, общаются, живут. Клиент обязательно на Flash. Вот и всё.

Язык программирования

JAVA — простой и логичный язык, удобная среда разработки, стабильная и достаточно быстрая среда исполнения. К тому же большой набор готовых библиотек. В качестве аналога рассматривали C#. Возможности почти такие же, но менее логичный синтаксис. Только одна среда программирования и одна операционная система. Нет нормальных решений в области серверов приложений, ORM-ов и так далее. Например, попробуйте найти встроенный WEB сервер для приложения на C#. А вот для JAVA существует несколько подобных решений.

База данных

В процессе создания прототипа базы данных было решено использовать базу данных на основе разработок от BerkeleyDB. Получили достаточную скорость работы с данными, но были большие сомнения в масштабируемости и надежности такого решения. В дальнейшем перешли на SQL базу и в качестве объектной прослойки выбрали ORM Hibernate. Скорость работы упала на два порядка, но теперь у нас есть надежда на масштабируемость и надежность, а также появилось право выбора MySQL или Oracle, PostgreSQL или DB2. Первой базой была MySQL, но через месяц работы перешли на PostgreSQL, на том и остались. Вопрос о смене базы данных поднимем после альфа/бета тестирования.

Сервер приложений

Для JAVA есть выбор между JBOSS, Spring и их коммерческими аналогами. Но в итоге мы решили не использовать стандартные подходы, так как для нас они слишком громоздкие и не подходят для нашей идеологии Моделей поведения. Все же игра это не бизнес приложение и подходы здесь совсем другие. С другой стороны программировать сервер как одно большое монолитное приложение не было бы оптимальным решением. Остановились на решении использовать OSGI ядро, тоже самое, что используется в Eclipse. Такой подход позволил нам части игрового сервера оформить в виде отдельных независимых модулей. Плюсы данного подхода — разграничение прав доступа, четкое API для обмена информацией между модулями, возможность менять модули без остановки сервера. К тому же модули можно запускать на нескольких машинах, что даст нам возможность наращивать вычислительную мощность без существенных переделок программного кода.

Выбор среды программирования — Eclipse, так как с OSGI она работает лучше, чем другие IDE.

Комментарии (6) на “Выбор архитектуры сервера”

  1. barbashov Says:

    Извините, не сдержался.

    Приведенная база данных называется BerkeleyDB, а не BerkleyDB.
    PostgreSQL - хорошая масштабируемость при росте количества ядер. У MySQL такого нет.
    Однако, при достаточно большом количестве одновременно играющих пользователей даже самого быстрого сервера, боюсь, не хватит, чтобы PgSQL работала как должно - все-таки SQL. Я знаю, что теоретически у PgSQL есть репликация, позволяющая разнести БД по нескольким серверам, однако, отзывы людей, имеющих опыт ее использования, к сожалению, не были обнадеживающими - говорят, она частенько падает в корку.

  2. Антон Волков Says:

    Спасибо, пофиксил

  3. Квиринг Алексей Says:

    Мы не ограничены в выборе базы, позже рассмотрим DB2 или Оracle, благо при использовании Hibernate сменить базу не сложно. Также смотрю в сторону объектных баз данных.

  4. KrOlSer Says:

    У меня вопрос. Разве Spring это сервер приложений. Мне казалось, что Spring это
    “full-stack Java/JEE application framework” (взято с http://www.springframework.org). Или я настолько отстал от жизни, что пропустил появления нового Swing’а.

    А серверов намного больше
    WebLogic Server (BEA)
    JBoss (Red Hat)
    WebSphere (IBM)
    JRun (Adobe)
    Geronimo Application Server (Apache Foundation)
    Oracle OC4J (Oracle Corporation).

    (взято с http://en.wikipedia.org/wiki/Application_server)

    Ссылки оставляю для того, что бы не быть голословным.

    Так вот. У меня к вам вопрос, вы решили писать полность свой сервер? Какой спецификации вы будете придерживаться? J2EE или у вас будет полность свой с нуля сервер? Можно по подробнее. Мне это тема просто нарвиться.

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

    Олег.

  5. Квиринг Алексей Says:

    Да, Sping не сервер приложений, но вообще не будем особо придираться к словам. Скажем так - рассматривались технологии. Но мы все же пишем свой сервер, четко заточенный под игру. И пока я доволен данным решением, JBOSS нам бы не подошел точно :-). Но в нашем сервере достаточно много стандартных решений - Hibernate, Jetti, Quartz и так далее.

  6. KrOlSer Says:

    to Квиринг Алексей: Я не придираюсь к словам. Как написано так и написано. Как я мог догадаться, что вы имеете в виду? НО прочитав ваш ответ понял, что задумки у вас не детские. Особенно порадовал список “хотябы перечисленных” стандартных решений. Судя по всему, это список длиной не менее 20….. :) Молодцы. Самим собирать свой сервер из таких вещей — это круто.

    А про то, что JBoss вам подошел бы, я и не споря. Сам знаю о его “скорости”. Да и не для таких целей он создавался.

Оставить комментарий

(Регистрация)

Powered by WP Hashcash