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


14

Я в першу чергу розробник Java, і до вас звертаюся з питанням, яке усуває розрив між розробниками та sysadmins.

Роки тому, коли запускати Tomcat як сервер додатків було новітньою справою, було прийнято використовувати Apache. Як я розумію, це було зроблено тому, що:

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

Java більше не вважається повільною, і я сумніваюся, що додавання Apache до суміші насправді допоможе прискорити роботу.

Що стосується випуску портів, то, мабуть, є простіші способи підключення серверів додатків до портів 80/443 в наші дні.

Отже, моє запитання - чи справді є якась користь від фронтування Java Webapps з Apache в наші дні? Якщо так, то Apache все ще йде? Чи варто дивитись на Nginx? Замість Tomcat я використовую Glassfish, якщо це має значення.

Відповіді:


8

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

Це дещо тупо, тому що:

  • Ви можете налаштувати Tomcat використовувати той самий IO, що і apache з APR
  • Ви в будь-якому випадку повинні використовувати CDN (мережу доставки вмісту).

Справжня причина, що вам потрібно щось перед Tomcat / jetty / jboss, щоб завантажити баланс і вирішити відмову.

Я рекомендую вам не слухати " ... Двигун Tomcat - це ахіллесова п'ята всієї екосфери ... ", оскільки ми всі знаємо, що це неправда ... ваша база даних та її з'єднання з'єднань будуть таким.


Адам, ти переслідуєш мене від StackOverflow до Serverfault? :-) Я згоден з вашою відповіддю. З ретроспективою я повинен був би сформулювати питання краще, щоб відобразити реальну ситуацію: статичного змісту дійсно дуже мало, тому що БД бере участь майже в будь-якому зверненні до сторінки. У цей час (дуже раннє дослідження запуску) нам не потрібна збалансованість навантаження, але, на щастя, нам це буде потрібно в майбутньому.
Кофеїнова кома

@Caffeine Coma Я перебуваю в одному човні, і, здається, ми використовуємо ту саму технологію, отже, безтурботність перебування на одних і тих же нитках через Stackexchanges (клянусь, я не переслідую :)). До речі, ми використовуємо Nginx + Tomcat.
Адам Гент

5

Це залежить від екосистеми навколо вашої програми. В інтранетному середовищі - вам, мабуть, нічого не потрібно перед Tomcat.

Якщо тільки в Інтернеті як до публічної служби, це залежить. Apache приємний через модулі, які він надає як mod_security. Але якщо ви не обізнані з конфігурацією apache (або ngix) - ви можете піддавати себе навіть БІЛЬШІ атакам або точкам відмови через неправильну конфігурацію.

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

Поширені питання про Tomcat теж говорять про це, що стосується деяких додаткових моментів: http://wiki.apache.org/tomcat/FAQ/Connectors#Q3


1

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


Я так чи інакше не подаю багато статичного вмісту. Моє запитання насправді: чи потрібно мені турбуватися з передньою частиною Apache / Nginx або просто йти з прямою Glassfish? Спасибі.
Кофеїнова кома

Насправді проблема ширша, ніж просто подання статичного контенту, оскільки якщо ваш сервер не використовує клієнтів асинхронізації вводу-виводу з повільними з'єднаннями, заблокує потоки виконання сервера, поки вони не отримають контент повністю. Тож наявність фронтену, що працює на AIO, - користь у будь-якому випадку. Але, як я вже згадував, Tomcat має можливості AIO. Я думаю, що пакет акцій Glassfish вже включає бібліотеку AIO, тому ви, мабуть, не повинні турбуватися.
Олексій

apache не обов'язково багатопроцесорний. mpm працівник вже деякий час не працює httpd.apache.org/docs/2.2/mod/worker.html і ми використовуємо у виробничих умовах для багатопотокового веб-сервера.
dialt0ne

Ну, багатопотокове Apache все ще використовує синхронні введення / виведення. Я не бачу великої різниці, якщо потоки, а не процеси, будуть заблоковані в сокет повільними клієнтами. Nginx розроблений як однопоточна однопроцесова машина з кінцевим станом (ну, не потрібна однопроцесова, кількість процесів має бути встановлено на кількість ядер процесора в багатоядерній системі).
Олексій

1

Дивовижно, деякі з цих відповідей - чи хтось із вас насправді управляє високоефективними багатоярусними та мультісерверними Tomcat веб-сайтами? OP, ваше первісне припущення, що Tomcat не "повільний" ... ух. Двигун Tomcat - це ахілесова п'ята всієї екосфери.

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

Остерігайтеся тих, хто скаже вам, що Apache (або nginx тощо), але продуктивність Apache все одно перевершить Tomcat, так що це не має значення) - це непогана ідея перед Tomcat.


4
Ви звучите дуже ображено.
Кофеїнова кома

Тільки огидно, що люди пропонують такі погані поради щодо ServerFault.

Остерігайтеся будь-кого, хто чинить будь-які номери для підтвердження таких претензій. Якщо ваш сайт в основному динамічний, то прямий tomcat буде швидше. Більшість сайтів із великим трафіком сьогодні використовують CDN (мережу доставки контенту) для їх статичного вмісту, тому немає причин використовувати Apache для розміщення статичного вмісту. При цьому, як і раніше, вам слід щось передбачити для балансування навантаження / ssl.
Адам Гент

0

Якщо це лише питання прив'язки порту привілеїв, не використовуючи root під час використання Tomcat, вам не потрібно використовувати його на Apache httpd. Tomcat за замовчуванням постачається з тим, jsvcщо вам потрібно скласти.

jsvcявляє собою службову оболонку Java для запуску Tomcat як сервісу. Ця послуга запускається як root, але запускайте Tomcat як звичайний користувач. Таким чином, ви можете прив’язати свій Tomcat до привілейованих портів.

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.