Как распространить приложение j2ee на несколько серверов? - PullRequest
1 голос
/ 29 апреля 2011

Я использую JSP + Struts2 + Tomcat6 + Hibernate + MySQL в качестве среды разработки J2EE. Из-за масштабности проекта и возникающих проблем с производительностью было решено развернуть проект на нескольких серверах. Поскольку проект был разработан в трехуровневой архитектуре, мы хотим выделить отдельные машины для каждого уровня и подключить их через соединения GigaBit Ethenrnet. Поэтому нам понадобится DB-сервер (MySQL), логический сервер (Struts2 + POJO) и веб-сервер.

Я полагаю, что связь между DB-сервером и Logic-сервером не будет проблемой, но подключение веб-сервера и Logic-сервера мне кажется несколько затруднительным. Учитывая тот факт, что мы можем увеличить количество серверных машин каждого уровня на следующих этапах, каковы мои варианты в этой ситуации?

Любые идеи будут высоко оценены!

[EDIT]

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

Кстати, JMS здесь поможет?

Ответы [ 3 ]

1 голос
/ 29 апреля 2011

Логика должна работать и на сервере Tomcat.Struts без веб-сервера не имеет смысла.

Или вы имели в виду «веб-сервер», как «тупой файловый сервер, который понимает HTTP»?В этом случае вы их вообще не подключаете;веб-браузер сделает это за вас: код JSP / Servlet отправит URL-адреса изображений и другого статического содержимого в браузер, и браузер будет использовать эти URL-адреса для загрузки данных непосредственно с «веб-сервера».

Вы определенно не хотите, чтобы «Логический сервер» загружал материалы и обслуживал их.

1 голос
/ 29 апреля 2011

Можете ли вы даже разделить приложение Struts на «логический сервер» и веб-сервер?

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

Мой опыт ограничен использованием: JSF для внешнего интерфейса и некоторых манипуляций с датами (для представления), IBM Websphereдля логики (процессы разработаны в Websphere Integration Developer, а не на чистой Java) и Oracle для БД.Все эти серверы размещены на отдельных машинах.

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

0 голосов
/ 29 апреля 2011

Распределение приложения по уровням не обязательно хорошая идея.Связь по сети медленная по сравнению со связью внутри одной JVM.По этой причине вы хотите минимизировать связь между отдельными машинами.Обычно это достигается путем предоставления грубых интерфейсов, например

interface User
{
  void setAddress(String name,
                  String street,
                  String zip,
                  String city,
                  String country);
}

вместо

interface User
{
  void setName(String name);
  void setStreet(String street);
  void setZip(String zip);
  void setCity(String city);
  void setCountry(String country);
}

. Рациональным является то, что если вы измените один фрагмент информации в объекте Userдругие части, вероятно, также будут изменены.Грубый интерфейс обеспечивает меньшее количество вызовов методов по сети.

...