Apache'yi Glassfish / JBoss / Tomcat'in ön ucu olarak çalıştırmak gerçekten gerekli mi?


14

Öncelikle bir Java geliştiricisiyim ve size geliştiriciler ve sistem yöneticileri arasındaki bölünmeyi engelleyen bir soru ile geliyorum.

Yıllar önce, Tomcat'i bir uygulama sunucusu olarak çalıştırmak yeni bir şey olduğunda, Apache ile ön plana çıkmak gelenekseldi. Anladığım kadarıyla bu yapıldı çünkü:

  1. Java "yavaş" olarak kabul edildi ve Apache'nin doğrudan statik içerik sunması yararlı oldu.
  2. Tomcat, tehlikeli olarak çalıştırılmadığı sürece 80/443 numaralı bağlantı noktalarını dinleyemedi.

Java artık yavaş sayılmıyor ve karışıma Apache eklemek aslında işleri hızlandırmaya yardımcı olacak.

Bağlantı noktaları sorununa gelince, uygulama sunucularını bugünlerde 80/443 bağlantı noktalarına bağlamanın muhtemelen daha basit yolları vardır.

Yani sorum şu: Java Webapps'i bugünlerde Apache ile sınırlamanın gerçekten bir faydası var mı? Eğer öyleyse, Apache hala devam edecek mi? Nginx'e bakmalı mıyım? Tomcat yerine Glassfish kullanıyorum, eğer önemliyse.

Yanıtlar:


8

Çoğu kişi statik dosyalar nedeniyle önde bir şeye ihtiyacınız olduğunu söyleyecektir.

Bu biraz aptal çünkü:

  • Tomcat'i APR ile apache ile aynı IO'yu kullanacak şekilde yapılandırabilirsiniz
  • Yine de bir CDN (İçerik dağıtım ağı) kullanıyor olmalısınız.

Dengeyi yüklemek ve yük devretmeyi ele almak için tomcat / jetty / jboss'un önünde bir şeye ihtiyacınız olmasının gerçek nedeni.

Dinlememenizi tavsiye ederim " ... Tomcat motoru tüm ekosistemin Aşil topuğu ... " hepimizin doğru olmadığını bildiğimiz gibi ... veri tabanınız ve bağlantı havuzu bu olacaktır.


Adam, beni StackOverflow'dan Serverfault'a mı takip ediyorsun? :-) Yanıtınıza katılıyorum. Geriye dönüp bakıldığında, soruyu gerçek durumu yansıtmak için daha iyi ifade etmeliydim: DB neredeyse her sayfa isabetine karıştığından, konuşmak için gerçekten çok az statik içerik var. Şu anda (çok erken başlangıç ​​keşfi) yük dengelemeye ihtiyacımız yok, ancak şansla gelecekte buna ihtiyacımız olacak.
Kafein Koma

@Caffeine Coma Aynı teknedeyim ve aynı teknolojiyi kullandığımız anlaşılıyor, bu nedenle Stackexchanges'da aynı iplikler üzerinde olmanın serendipitesi (takip etmiyorum yemin ederim :)). BTW Nginx + Tomcat kullanıyoruz.
Adam Gent

5

Bu, uygulamanızın çevresindeki ekosisteme bağlıdır. İntranet ortamında - muhtemelen Tomcat'in önünde hiçbir şeye ihtiyacınız yoktur.

Eğer internette tek başına kamuya açık bir hizmet olarak, bağlıdır. Apache, mod_security gibi sağladığı modüller nedeniyle iyidir. Ancak, apache (veya ngix) yapılandırması hakkında bilginiz yoksa - yanlış yapılandırma nedeniyle kendinizi DAHA FAZLA saldırıya veya arıza noktasına maruz bırakabilirsiniz.

Ön apache, web uygulamasını yükseltmeniz ve yeniden başlatmayı beklemeniz gerektiğinde kesinti sayfalarını sunmak için kullanışlıdır. Ancak yeniden başlatmalar nadirse veya doğru bir şekilde zamanlanmışsa - Tomcat'in bağımsız olmasının başka bir nedeni.

Tomcat SSS ayrıca bazı ek noktaları ele alan bunun hakkında da konuşuyor: http://wiki.apache.org/tomcat/FAQ/Connectors#Q3


1

Apache, çok işlemli yapısı nedeniyle statik içerik sunmak için iyi bir aday değildir. Nginx, istekleri işlemek için zaman uyumsuz G / Ç kullandığından daha uygundur. Modern Tomcats, eşzamansız I / O (Java terminolojisinde NIO) da kullanabilir. Örneğin, tomcat-nativeTomcat'in zaman uyumsuz G / Ç kullanmasını sağlamak için paketi Fedora'ya yüklemelisiniz .


Zaten çok fazla statik içerik sunmuyorum. Benim sorum gerçekten: Apache / Nginx ön ucuyla uğraşmam mı yoksa düz Glassfish ile mi gitmem gerekiyor? Teşekkürler.
Kafein Koma

Aslında, sorun sadece statik içerik sunmaktan daha geniştir çünkü sunucunuz yavaş bağlantıları olan zaman uyumsuz G / Ç istemcileri kullanmıyorsa, içeriği tam olarak alana kadar sunucunun yürütme iş parçacıklarını engeller. Bu nedenle, AIO destekli bir ön uca sahip olmak her durumda bir avantajdır. Ancak, daha önce de belirttiğim gibi, Tomcat'in AIO yetenekleri var. Stok Glassfish paketinin zaten AIO kütüphanesini içerdiğini düşünüyorum, bu yüzden muhtemelen rahatsız etmemelisiniz.
Alex

apache mutlaka çok işlemli değildir. mpm çalışanı bir süredir httpd.apache.org/docs/2.2/mod/worker.html ve çok iş parçacıklı bir web sunucusu için bir üretim ortamında kullanıyoruz.
dialt0ne

Çok iş parçacıklı Apache hala senkronize G / Ç kullanıyor. Yavaş istemciler tarafından bir soket üzerinde süreçleri değil iş parçacıkları engellenir eğer büyük bir fark görmüyorum. Nginx, tek iş parçacıklı tek işlemli sonlu durum makinesi olarak tasarlanmıştır (iyi, tek işlem gerekli değildir, işlem sayısı çok çekirdekli bir sistemdeki CPU çekirdeği sayısına ayarlanmalıdır).
Alex

1

Şaşırtıcı, bu cevaplardan bazıları - herhangi biriniz gerçekten yüksek performanslı çok katmanlı ve çok sunuculu Tomcat destekli web siteleri çalıştırıyor mu? OP, Tomcat'in "yavaş" olmadığına dair orijinal varsayım ... vay canına. Tomcat motoru, tüm ekosistemin Aşil topuğudur.

Evet, Apache'nin önünde olmasını istiyorsunuz - her şeyden önce mod_rewrite'ı (Tomcat'inize zaten UrlRewriteFilter uyguladınız mı?) Ve bir web sunucusunu korumayı çok önemli kılan htaccess dosyalarını sağlar. Apache, Tomcat düğümlerini arkasına yükleyebilmenizi, statik içeriğinizi çok daha hızlı sunabilmenizi ve Tomcat'ten daha iyi performans elde etmenizi sağlayabilir, çünkü Java'ya olan istek borusunu aşırı yüklemiyorsunuz (js / css / html / jpg / vb.) bir şeyler. SSL'nizi Apache'de (bir donanım LB'sinde boşaltma yapmıyorsa) kolayca yükleyebilir ve hatta Java Keystore adı verilen bu travesti ile uğraşmak zorunda kalmazsınız. Çok fazla kazanç var - Java'nın fakir küçük beynini bozmak için mod_jk'yi arka uç düğümlerinize ayarlayabilirsiniz, çünkü genellikle ortalama Java kodlayıcısıyla devasa trafiği işleyemez '

Size Apache'nin (veya nginx vb.) Söyleyen herkese dikkat edin, ancak Apache'nin performansının Tomcat'i her durumda gölgede bırakacaktır, bu yüzden önemli değil) Tomcat'in önünde iyi bir fikir değildir.


4
Çok rahatsız olmuş görünüyorsun.
Kafein Koma

Sadece insanların ServerFault üzerinde böyle kötü tavsiyeler sundukları tiksinti.

Bu tür iddiaları desteklemek için herhangi bir sayı ile sıralayan herkese dikkat edin. Siteniz çoğunlukla dinamikse, doğrudan tomcat daha hızlı olacaktır. Günümüzde çoğu yoğun trafikli site, statik içeriği için CDN (içerik dağıtım ağı) kullanmaktadır, bu nedenle statik içeriğinizi sunmak için Apache'yi kullanmanız için bir neden yoktur. Bununla birlikte, yük dengeleme / ssl için hala bir şey yapmanız gerekir.
Adam Gent

0

Tomcat'i kullanırken root olmadan bağlayıcı ayrıcalıklar portu söz konusuysa, Apache httpd ile ön yapmanız gerekmez. Tomcat varsayılan jsvcolarak derlemeniz gerekenlerle birlikte gönderilir .

jsvcTomcat'i bir hizmet olarak başlatmak için bir java servis sarmalayıcısıdır. Bu hizmet kök olarak başlar, ancak Tomcat'i normal kullanıcı olarak başlatır. Böylece Tomcat'inizi ayrıcalıklı bağlantı noktalarına bağlayabilirsiniz.

Glassfish hakkında bir fikrim yok ama çözümlerin var olduğundan emin olun ve eğer değilse port yönlendirme tekniklerini (iptables, vb ...) kullanabilirsiniz.

Bir uygulama sunucusunu bir web sunucusuyla (örneğin Apache httpd) ön planlamanın yük dengeleme, kümeleme veya statik kaynakları yalnızca bir web sunucusuyla ve bir uygulama sunucusuyla dinamik kaynaklarla sunmak olduğunu düşünüyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.