Назад | Перейти на главную страницу

действительно ли необходимо запускать Apache в качестве интерфейса для Glassfish / JBoss / Tomcat?

Я в первую очередь разработчик Java, и я пришел к вам с вопросом, который разделяет разрыв между разработчиками и системными администраторами.

Много лет назад, когда запуск Tomcat в качестве сервера приложений был новинкой, было принято использовать Apache. Насколько я понимаю, это было сделано потому, что:

  1. Java считалась «медленной», и было полезно, чтобы Apache напрямую обслуживал статический контент.
  2. Tomcat не мог прослушивать порты 80/443, если не запускался от имени пользователя root, что было опасно.

Java больше не считается медленным, и я сомневаюсь, что добавление Apache к этому миксу действительно поможет ускорить процесс.

Что касается проблемы с портами, в наши дни, вероятно, есть более простые способы подключения серверов приложений к портам 80/443.

Итак, мой вопрос: действительно ли есть какая-то польза от работы с веб-приложениями Java с помощью Apache в наши дни? Если да, то стоит ли использовать Apache? Стоит ли смотреть на Nginx? Вместо Tomcat я использую Glassfish, если это важно.

Большинство людей скажут, что вам нужно что-то впереди из-за статических файлов.

Это несколько глупо, потому что:

  • Вы можете настроить Tomcat для использования того же ввода-вывода, что и apache с APR
  • В любом случае вы должны использовать CDN (сеть доставки контента).

Настоящая причина, по которой вам нужно что-то перед tomcat / jetty / jboss для балансировки нагрузки и обработки аварийного переключения.

Я рекомендую вам не слушать "... Двигатель Tomcat - это ахиллесова пята всей экосферы ..."как мы все знаем, это неправда ... ваша база данных и ее пул соединений будут такими.

Это зависит от экосистемы вашего приложения. В среде интрасети - вам, вероятно, ничего не нужно перед Tomcat.

Если только в Интернете в качестве общедоступной службы, это зависит от обстоятельств. Apache хорош тем, что предоставляет такие модули, как mod_security. Но если вы не знакомы с конфигурацией apache (или ngix) - тогда вы можете подвергнуть себя БОЛЬШЕМУ атакам или точкам отказа из-за неправильной конфигурации.

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

Об этом также говорится в FAQ Tomcat, в котором рассматриваются некоторые дополнительные моменты: http://wiki.apache.org/tomcat/FAQ/Connectors#Q3

Удивительные, некоторые из этих ответов - действительно ли кто-нибудь из вас запускает высокопроизводительные многоуровневые и многосерверные веб-сайты, поддерживаемые Tomcat? ОП, ваше первоначальное предположение, что Tomcat не "медленный" ... вау. Двигатель Tomcat - это ахиллесова пята всей экосферы.

Да, вы хотите, чтобы Apache был впереди - он предоставляет в первую очередь mod_rewrite (вы уже реализовали UrlRewriteFilter в своем Tomcat?), А также файлы htaccess, которые делают защиту веб-сервера столь важной. Apache может позволить вам балансировать нагрузку на узлы Tomcat за ним, гораздо быстрее обслуживать статический контент и получать лучше производительность из Tomcat, потому что вы не перегружаете его канал запроса вещами, отличными от Java (js / css / html / jpg / etc.). Вы можете легко разгрузить свой SSL в Apache (если не разгрузить аппаратный LB), и вам даже не придется иметь дело с той пародией, которая называется Java Keystore. Так много побед - вы можете настроить mod_jk на свои внутренние узлы, чтобы не перегружать бедный маленький мозг Java, потому что он обычно не может обрабатывать большой трафик с классами среднего Java-кодера.

Остерегайтесь тех, кто говорит вам, что Apache (или nginx и т. Д., Но производительность Apache в любом случае будет затмевать Tomcat, так что это не имеет значения) - не лучшая идея перед Tomcat.

Apache не является хорошим кандидатом для обслуживания статического контента из-за его многопроцессорной природы. Nginx подходит лучше, поскольку он использует асинхронный ввод-вывод для обработки запросов. Современные Tomcats также могут использовать асинхронный ввод-вывод (NIO в терминологии Java). Например, вам следует установить tomcat-native пакет в Fedora, чтобы Tomcat использовал асинхронный ввод-вывод.

Если при использовании Tomcat нужно просто привязать порт привилегий без использования root, вам не нужно устанавливать его с помощью Apache httpd. Tomcat по умолчанию поставляется с jsvc что вам нужно скомпилировать.

jsvc - это оболочка службы Java для запуска Tomcat как службы. Эта служба запускается как root, но запускает Tomcat как обычный пользователь. Таким образом, вы можете привязать свой Tomcat к привилегированным портам.

Я не знаю насчет Glassfish, но убедитесь, что решения существуют, а если нет, вы наверняка можете использовать методы переадресации портов (iptables и т. Д.)

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