Каковы требования к веб-приложению для работы в кластерной среде? - PullRequest
6 голосов
/ 06 мая 2011

Мне нужно проверить, готово ли существующее веб-приложение к развертыванию в кластерной среде.
Кластер :
Несколько Linux-боксов. Поток контролируется балансировщиком нагрузки, который использует простой алгоритм циклического перебора с липким сеансом.
Применение Java-приложение без сохранения состояния (надеюсь), которое извлекает контент из бэк-офиса и форматирует его соответствующим образом.

У меня есть доступ к исходному коду. Что я должен проверить в коде, чтобы убедиться, что он будет работать в кластере?

  • Убедитесь, что что-то не кэшируется в памяти или файловой системе, в которой хранится состояние приложения.
  • ... Что-то еще?

Ответы [ 4 ]

0 голосов
/ 06 мая 2011

Наличие состояния не является большой проблемой, если все сделано правильно.Во всяком случае, все приложения имеют состояние.Даже если файл несколько статичен, содержимое файла, связанное с URL-адресом, действительно является частью состояния.

Проблема заключается в том, как это состояние распространяется и распространяется.

  • состояние внутри пользователясессия не легкая задача.Используйте механизм репликации сеанса (медленнее, но без потери сеанса при сбое узла) или балансировщик нагрузки сессионного слипания, и ваша проблема решена.

Все остальные общие состояния действительно являются проблемой.В частности, даже состояние кэша должно быть общим и идеально согласованным, в противном случае обновление на той же странице может генерировать разные результаты случайным образом, в зависимости от веб-сервера ведьмы, и, следовательно, от кеша, который вы нажали.совместно с кэшированием (например, ehcache) или с ошибкой возврата в сессию.

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

0 голосов
/ 06 мая 2011

Самый простой способ проверить приложение - запустить его, запустив его на 2 серверах с одинаковыми данными, поэтому при запуске оба находятся в одинаковом состоянии. Предположим, что для завершения операции пользователь выполнит 2 последовательных HTTP-запроса к вашему веб-приложению. Для этого вам нужно подключить веб-сервер 1 первым вызовом и веб-сервер 2 вторым вызовом; затем попробуйте наоборот, затем с обоими запросами, идущими на один и тот же веб-сервер, - и если вы получаете один и тот же результат каждый раз, у вас, скорее всего, будет готовое к кластеру приложение. (Это не означает, что приложение IS готово к кластеризации, поскольку могут существовать состояния объектов и т. Д., Которое оно хранит в памяти, что нелегко обнаружить из внешнего интерфейса, но это дает вам более высокую вероятность того, что ЭТО МОЖЕТ БЫТЬ нормально работать в кластере.)

0 голосов
/ 06 мая 2011

Если бы он действительно "не имел состояния", не было бы проблем, вы могли бы сделать любой запрос любого сервера в любое время, и все будет просто работать.Большинство вещей не так просто, поэтому любое состояние должно либо передаваться на страницу и с нее, когда она перемещается от клиента к серверу, либо храниться на серверной части, и иметь некоторый токен, передаваемый взад и вперед.чтобы получить его из любого общего хранилища данных, которое вы используете для этого.Если они используют HttpSession, то все, что извлечено из сеанса, если оно изменено, необходимо вернуть обратно в сеанс с помощью session.setAttribute (ключ, значение).Этот параметр атрибута действует как сигнал о том, что все, что хранится в сеансе, должно быть реплицировано на резервные серверы.Убедитесь, что все, что хранится в сеансе, реализует и фактически является Сериализуемым.Некоторые серверы позволяют вам хранить объекты (я смотрю на вас weblogic), но затем выдают исключение, когда пытаются скопировать объект.У меня было много коллег, жалующихся на то, что необходимость возвращать вещи обратно в сессию должна быть излишней, и, возможно, так и должно быть, но именно так все и работает.

0 голосов
/ 06 мая 2011

Если вы используете EJB (что рекомендуется, если вы обращаетесь к БД), то вот список ограничений:

http://java.sun.com/blueprints/qanda/ejb_tier/restrictions.html

Полагаю, к веб-приложению применимы аналогичные ограничения.

...