Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужен совет по архитектуре, многопользовательский онлайн ресурс. 
:(
    Опции темы
Opik
Дата 27.2.2011, 05:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: нет
Всего: 55



Есть некая браузерная онлайн игра, запускаемая из консоли как standalone приложение. Для поднятия HTTP сервера используется apache mina, так же задействованы spring, velocity, ehcache.  Собирается это дело ant'ом.
Проблема в том, что с каждым добавлением функционала этот монолит разрастается, что не есть гуд. Так же проблема в том, что приложение иногда приходится перезапускать, "грохая" все сессии, даже если нужно поправить маленькую проблемку далеко где нибудь укромках игры. Что бы пользователи не вылетали совсем написаны костыли в виде сохранения текущего состояния в БД и с восстановлением при поднятии из последней. Опять же, при росте функционала данные костыли приходится добавлять, что так же не совсем хорошо. Это собственно суть проблемы.

Как вариант пути решения проблемы напрашивается модульность, или же разбитие монолита на несколько под серверов (чат сервер, сервер авторизации, хттп сервер, сервер команд и пр.) или же какое то ядро, с подключаемыми туда модулями...  Не знаю вообщем.
Может быть есть хорошие книги на эту тему? Или хотя бы какой совет. Гугл особого результата не дал.
PM MAIL Skype   Вверх
COVD
Дата 27.2.2011, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: нет
Всего: 43



Если коротко, то решение - "разбитие монолита на несколько" ... веб-приложений, т.е. war-ов. Их можно деплоить/андеплоить "на лету".

Формально, приложение следует строить на плагинной архитектуре, OSGi. Это позволяет обновлять (деплоить/андеплоить ) компоненты приложения "на лету", т.е. не останавливая приложения. И технологию OSGi внедряют в серверные приложения. Но на самом деле возможность запускать/останавливать модули уже давно реализована на веб-серверах.  Веб-сервер так работает с веб-приложениями, т.е. с war - ами. Поэтому простой и естественный способ перевести серверное приложение на плагинную архитектуру, это построить его как набор веб-приложений (war-ов). Естественность тут обеспечивается способом коммуникации клиента с веб-сервером, а именно "запрос-ответ". Для веб-приложений это  натуральный способ, а в  OSGi это реализуется искусственно, через интерфейсы, и OSGi берет на себя обеспечение синхронизации вызовов. Модуль перезагружается между вызовами. Точно также как и в веб-сервере, когда удаляется или добавляется war.

Однако клиент общается с сервером не только через "запрос-ответ". Клиент может также держать постоянное соединение с сервером. В этом случае перезапуск серверного приложения разорвет соединение. Клиент должен уметь автоматически возобновлять соединение. Это полезно, потому что разрыв постоянного соединения возможен по разным причинам, не только из-за перезапуска сервера.

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

Это сообщение отредактировал(а) COVD - 27.2.2011, 18:25
PM MAIL   Вверх
Opik
Дата 27.2.2011, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: нет
Всего: 55



Спасибо за ответ. Буду рыть в сторону OSGi
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Design, Quality, Testing | Следующая тема »


 




[ Время генерации скрипта: 0.0629 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.