Разработка сервлетов с поддержкой кластеров - PullRequest
0 голосов
/ 19 января 2010

Как можно разработать сервлет с поддержкой кластеров и каковы критерии его разработки?

Ответы [ 3 ]

1 голос
/ 03 августа 2010

Код не должен знать о кластеризации, но разработчик должен знать, что код может быть кластеризован и сеанс реплицирован. Позвольте мне объяснить.

Когда вы помечаете веб-приложение в web.xml, вы сообщаете контейнеру, что это веб-приложение может быть кластеризовано.

Если веб-приложение развернуто в кластере, на каждой машине в кластере будет запущен виртуальный компьютер и это веб-приложение внутри него. Что касается клиента, то запрос он видит в одном веб-приложении, хотя каждый запрос от клиента может обслуживаться другим виртуальным компьютером в кластере.

Таким образом, если веб-приложение хранит какое-либо состояние, оно должно быть доступно для всех экземпляров vms (в кластере), выполняющих веб-приложение. Как это может быть сделано ? Помечая вещи, которые вы помещаете в объект httpsession, как «Сериализуемые». Вы сообщаете контейнеру, что он должен реплицировать состояние на другие vms (если у вас есть репликация сеанса установки). Это достигается несколькими способами в WebLogic. Каждый раз, когда вы используете setAttribute () в сеансе, он вызывает событие репликации сеанса.

В WL Есть два способа репликации памяти и использования базы данных для тиражирование Я хотел бы услышать, как это делается на других серверах приложений.

1 голос
/ 19 января 2010

Это не проблема, которая должна решаться на уровне кода, а скорее на уровне веб-сервера. Поэтому код сервлета не должен знать о кластеризации.

0 голосов
/ 16 мая 2010

Как сказал @BalusC, это в первую очередь задача настройки сервера, и от того, как это сделать, очень сильно зависит от того, какой сервер вы используете (и какой вы не упоминаете), но вот как это сделать с Tomcat 6 , например.

Однако следует помнить одну вещь на стороне кода: вы должны быть осторожны с объектами, которые вы помещаете в сеанс HTTP (используя HttpSession.setAttribute(). Чтобы репликация сеанса работала, эти объекты должны быть сериализуемым для передачи по сети на другие серверы в кластере. Если они сериализуемы , а не , то сервер может отбросить их или вызвать исключение.

Разработчики нередко используют HTTP-сеанс в качестве места для размещения больших и сложных бизнес-объектов (например, для доступа к ним из JSP), и эти вещи вряд ли будут сериализуемыми. Другие примеры для объектов привязки формы, которые, будучи простыми держателями данных формы, часто не сериализуемы.

...