Выбор архитектуры сервера
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.

04.08.2007 в 06:42
Извините, не сдержался.
Приведенная база данных называется BerkeleyDB, а не BerkleyDB.
PostgreSQL - хорошая масштабируемость при росте количества ядер. У MySQL такого нет.
Однако, при достаточно большом количестве одновременно играющих пользователей даже самого быстрого сервера, боюсь, не хватит, чтобы PgSQL работала как должно - все-таки SQL. Я знаю, что теоретически у PgSQL есть репликация, позволяющая разнести БД по нескольким серверам, однако, отзывы людей, имеющих опыт ее использования, к сожалению, не были обнадеживающими - говорят, она частенько падает в корку.
04.08.2007 в 14:19
Спасибо, пофиксил
04.08.2007 в 15:50
Мы не ограничены в выборе базы, позже рассмотрим DB2 или Оracle, благо при использовании Hibernate сменить базу не сложно. Также смотрю в сторону объектных баз данных.
26.08.2007 в 19:39
У меня вопрос. Разве 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 или у вас будет полность свой с нуля сервер? Можно по подробнее. Мне это тема просто нарвиться.
Честно сказать, парни вы молодцы!!! Взять и кинуть работу для того, что бы написать свой проект. Это не каждому по плечу. Это не слабый моральный выбор.
Олег.
26.08.2007 в 22:29
Да, Sping не сервер приложений, но вообще не будем особо придираться к словам. Скажем так - рассматривались технологии. Но мы все же пишем свой сервер, четко заточенный под игру. И пока я доволен данным решением, JBOSS нам бы не подошел точно :-). Но в нашем сервере достаточно много стандартных решений - Hibernate, Jetti, Quartz и так далее.
27.08.2007 в 01:38
to Квиринг Алексей: Я не придираюсь к словам. Как написано так и написано. Как я мог догадаться, что вы имеете в виду? НО прочитав ваш ответ понял, что задумки у вас не детские. Особенно порадовал список “хотябы перечисленных” стандартных решений. Судя по всему, это список длиной не менее 20….. :) Молодцы. Самим собирать свой сервер из таких вещей — это круто.
А про то, что JBoss вам подошел бы, я и не споря. Сам знаю о его “скорости”. Да и не для таких целей он создавался.