Кластеризация Apache Tomcat6

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

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

что-то вроде этого

это

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

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


person SJ.Jafari    schedule 28.06.2011    source источник


Ответы (1)


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

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

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

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

person Aaron Digulla    schedule 28.06.2011
comment
забота о кешировании - отдельная проблема. Я хочу знать, выдержит ли эта единственная машина с веб-сервером такую ​​нагрузку? - person SJ.Jafari; 28.06.2011
comment
У вас есть какие-то цифры о том, о чем мы говорим? Сколько обращений (просмотры страниц, показы страниц, сколько пользователей?) - person khmarbaise; 28.06.2011
comment
@SJ Джафари: Откуда мне знать? Сколько у вас будет посетителей? Насколько сложен каждый запрос? Насколько мощны ваш компьютер, процессор, оперативная память, диски, сеть? - person Aaron Digulla; 28.06.2011
comment
@Aaron, @khmarbais, извините, я как бы неправильно написал здесь свои слова, я почти уверен, что единственный веб-сервер не выдержит мою расчетную нагрузку. вопрос в том, как я могу установить несколько веб-серверов? Кстати, у меня сейчас около 400 онлайн-пользователей, но их количество вырастет примерно до 10000, сеансы довольно тяжелые, включая сложные объекты. - person SJ.Jafari; 29.06.2011
comment
чтобы убедиться, что я нахожусь на правильном пути, лежит ли нагрузка запросов и ответов на веб-интерфейс Apache http или на экземпляры tomcat? - person SJ.Jafari; 29.06.2011
comment
Чтобы распределить нагрузку, возьмите специальный балансировщик нагрузки и поставьте его перед Tomcats. Эта штука глупая, но всегда может обрабатывать количество запросов, поскольку просто перенаправляет их в экземпляр Tomcat. Как только экземпляры Tomcat перестанут справляться с нагрузкой, добавьте еще один блок с другим экземпляром Tomcat. - person Aaron Digulla; 29.06.2011
comment
Вы также захотите изучить облачные вычисления, потому что они делают все это за вас. en.wikipedia.org/wiki/Cloud_computing - person Aaron Digulla; 29.06.2011