![]() |
Модераторы: LSD |
![]() ![]() ![]() |
|
Opik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 1918 Регистрация: 6.10.2004 Где: Рига Репутация: нет Всего: 55 |
Есть некая браузерная онлайн игра, запускаемая из консоли как standalone приложение. Для поднятия HTTP сервера используется apache mina, так же задействованы spring, velocity, ehcache. Собирается это дело ant'ом.
Проблема в том, что с каждым добавлением функционала этот монолит разрастается, что не есть гуд. Так же проблема в том, что приложение иногда приходится перезапускать, "грохая" все сессии, даже если нужно поправить маленькую проблемку далеко где нибудь укромках игры. Что бы пользователи не вылетали совсем написаны костыли в виде сохранения текущего состояния в БД и с восстановлением при поднятии из последней. Опять же, при росте функционала данные костыли приходится добавлять, что так же не совсем хорошо. Это собственно суть проблемы. Как вариант пути решения проблемы напрашивается модульность, или же разбитие монолита на несколько под серверов (чат сервер, сервер авторизации, хттп сервер, сервер команд и пр.) или же какое то ядро, с подключаемыми туда модулями... Не знаю вообщем. Может быть есть хорошие книги на эту тему? Или хотя бы какой совет. Гугл особого результата не дал. |
|||
|
||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: нет Всего: 43 |
Если коротко, то решение - "разбитие монолита на несколько" ... веб-приложений, т.е. war-ов. Их можно деплоить/андеплоить "на лету".
Формально, приложение следует строить на плагинной архитектуре, OSGi. Это позволяет обновлять (деплоить/андеплоить ) компоненты приложения "на лету", т.е. не останавливая приложения. И технологию OSGi внедряют в серверные приложения. Но на самом деле возможность запускать/останавливать модули уже давно реализована на веб-серверах. Веб-сервер так работает с веб-приложениями, т.е. с war - ами. Поэтому простой и естественный способ перевести серверное приложение на плагинную архитектуру, это построить его как набор веб-приложений (war-ов). Естественность тут обеспечивается способом коммуникации клиента с веб-сервером, а именно "запрос-ответ". Для веб-приложений это натуральный способ, а в OSGi это реализуется искусственно, через интерфейсы, и OSGi берет на себя обеспечение синхронизации вызовов. Модуль перезагружается между вызовами. Точно также как и в веб-сервере, когда удаляется или добавляется war. Однако клиент общается с сервером не только через "запрос-ответ". Клиент может также держать постоянное соединение с сервером. В этом случае перезапуск серверного приложения разорвет соединение. Клиент должен уметь автоматически возобновлять соединение. Это полезно, потому что разрыв постоянного соединения возможен по разным причинам, не только из-за перезапуска сервера. В идеале, серверное приложение должно быть распределенным. Должно быть несколько дублирующих серверов. Чтобы в случае неудачи с одним сервером клиент имел возможность повторить попытку с другим сервером. Одновременно так решается и задача распределения нагрузки. Это сообщение отредактировал(а) COVD - 27.2.2011, 18:25 |
|||
|
||||
Opik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 1918 Регистрация: 6.10.2004 Где: Рига Репутация: нет Всего: 55 |
Спасибо за ответ. Буду рыть в сторону OSGi
|
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Design, Quality, Testing | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |