Кластеризация Apache Tomcat6 - PullRequest
2 голосов
/ 28 июня 2011

У меня есть веб-приложение Java Enterprise, которое использует Tomcat6 + Struts + Hibernate + MySql. в настоящее время он публично запущен и работает на одном сервере. Из-за проблем с производительностью мы должны переместить приложение в кластерную среду. В любом случае я хочу использовать кластеризацию Tomcat6, как показано ниже:

  • Машина балансировки нагрузки, включающая веб-сервер (Apache + mod_proxy) в качестве внешнего интерфейса
  • Некоторые машины сервера приложений, на каждом из которых работает экземпляр tomcat6
  • Сервер управления сеансом
  • И, наконец, сервер БД

как то так

this

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

В кластере Apache Tomcat есть ли способ балансировки нагрузки для механизма и веб-серверов? Я имею в виду поместить балансировщик нагрузки в интерфейс и оставить часть обработки запросов / ответов для нескольких веб-серверов.

1 Ответ

1 голос
/ 28 июня 2011

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

Что вам нужно сделать, это убедиться, что ваше приложение может его обработать. Например, вы должны знать, что кэши могут быть устаревшими.

Скажем, экземпляр 1 имеет объект X в своем кеше, и X изменяется запросом, обработанным в экземпляре 2. Кэш в экземпляре 2 будет корректным, кэш из экземпляра 1 будет устаревшим.

Решением является использование кэша, который поддерживает кластеризацию, или отключение кэширования для экземпляров, которые можно изменить. Но это не имеет значения для Tomcat.

...