Many of our customers run both the Apache httpd and Apache Tomcat web servers - with good cause, since Tomcat is biased towards web applications where the same code is run many, many times over and httpd is biased towards serving pages and is better tuned for a much larger number of different pages but at a somewhat less frequent interval.
But the user (via browser) wants a single point of contact - typically httpd - with a number of mechanisms used to link the two servers. Jserv, mod_jk2 and warp are all deprecated, mod_rewrite can be used, but the most common link is done through httpd's mod_jk or mod_proxy modules. Historically, mod_proxy has been much easier to set up but has had a reputation for being much slower.
Link - "The Connector Story"
Is mod_proxy's reputation for being slow deserved? How DO the speeds compare? The questions were asked during last week's
deployment course in Glasgow and I thought I would - my first clear day - do some experiments to find out.
I set up a server (Linux, Fedora core 3, Apache 2, Tomcat 5.5) and set up both jk and proxy connections between them. I also set up an httpd alias to allow a direct httpd access to a web application, and an http connector on Tomcat to allow direct access via that server. I then benchmarked a plain HTML file of 1k in size, using the ab tool to load the page 1000 times in quick succession in four different ways.
ab -n1000 http://snowdrop:8080/latmjdemo/index.html > tomcat
ab -n1000 http://snowdrop/direct/index.html > httpd
ab -n1000 http://snowdrop/latmjdemo/index.html > jk
ab -n1000 http://snowdrop/felix/index.html > proxy
Running the test on a quiet network five times, with the ab commands running in a different order to balance out any caching issues, I got the following:
Direct access via httpd - 300 per second
Direct access via Tomcat - 483 per second
Access via both servers connected by jk - 307 per second
Access via both servers connected by proxy - 222 per second
What I expected? No, to be honest I was surprised that the direct access via httpd was so slow compared to the others. But then thinking it through, Tomcat is a great CACHEING server so it will perform proportionately far better on a test such as this that repeatedly hits the same page.
I was also pleasantly surprised to see that proxy was less that 30% slower than jk - I feared much worse. And thinking through the benchmark I ran, serving an html page is likely to be one of the data types that shows up the difference too - there's no gobs of Java code to be run to dilute the protocol time.
Conclusion? If you want every ounce of performance from your httpd / Tomcat pair, use jk. If you're not pushing it to the limit, then proxy's likely to be fine for you.
(written 2006-03-03 13:35:28)
Associated topics are indexed under
A603 - Web Application Deployment - Further httpd Configuration [2478] How did I do THAT? - (2009-10-26)
[2272] Monitoring and loading tools for testing Apache Tomcat - (2009-07-07)
[2060] Database connection Pooling, SSL, and command line deployment - httpd and Tomcat - (2009-03-01)
[1974] Moving a directory on your web site - (2009-01-03)
[1955] How to avoid duplicating web page maintainance - (2008-12-20)
[1954] mod_rewrite for newcomers - (2008-12-20)
[1939] mod_proxy_ajp and mod_proxy_balancer examples - (2008-12-13)
[1778] Pointing all the web pages in a directory at a database - (2008-08-30)
[1767] mod_proxy and mod_proxy_ajp - httpd - (2008-08-22)
[1762] WEB-INF (Tomcat) and .htaccess (httpd) - (2008-08-20)
[1707] Configuring Apache httpd - (2008-07-12)
[1636] What to do if the Home Page is missing - (2008-05-08)
[1619] User and Group settings for Apache httpd web server - (2008-04-22)
[1566] Strange behaviour of web directory requests without a trailing slash - (2008-03-06)
[1564] Default file (MiMe types) for Apache httpd and Apache Tomcat - (2008-03-04)
[1554] Online hotel reservations - Melksham, Wiltshire (near Bath) - (2008-02-24)
[1551] Which modules are loaded in my Apache httpd - (2008-02-23)
[1381] Using a MySQL database to control mod_rewrite via PHP - (2007-10-06)
[1377] Load Balancing with Apache mod_jk (httpd/Tomcat) - (2007-10-02)
[1355] .php or .html extension? Morally Static Pages - (2007-09-17)
[1351] Compressing web pages sent out from server. Is it worth it? - (2007-09-14)
[1207] Simple but effective use of mod_rewrite (Apache httpd) - (2007-05-27)
[1121] Sharing the load with Apache httpd and perhaps Tomcat - (2007-03-29)
[1080] httpd.conf or .htaccess? - (2007-02-14)
[1009] Passing GET parameters through Apache mod_rewrite - (2006-12-27)
[934] Clustering, load balancing, mod_rewrite and mod_proxy - (2006-11-21)
[853] To list a directory under httpd on a web server, or not? - (2006-09-02)
[755] Using different URLs to navigate around a single script - (2006-06-11)
[662] An unhelpful error message from Apache httpd - (2006-03-30)
[649] Denial of Service ''attack'' - (2006-03-17)
[550] 2006 - Making business a pleasure - (2006-01-01)
[526] Apache httpd - serving web documents from different directories - (2005-12-12)
[466] Separating 'per instance' data from binaries and web sites - (2005-10-16)
[345] Spotting a denial of service attack - (2005-06-12)
A607 - Web Application Deployment - Apache httpd mod_rewrite [2555] Bookkeeping - (2009-12-29)
[2094] If you have a spelling mistake in your URL / page name - (2009-03-21)
[1771] More HowTo diagrams - MySQL, Tomcat and Java - (2008-08-24)
[1731] Apache httpd, MySQL, PHP - installation procedure - (2008-08-01)
[1376] Choosing between mod_proxy and mod_rewrite - (2007-10-02)
[1006] Apache httpd and Apache Tomcat together tips - (2006-12-24)
A608 - Web Application Deployment - Apache httpd mod_proxy [2482] Load balancing with sticky sessions (httpd / Tomcat) - (2009-10-29)
[2325] Apache, Tomcat, mod_proxy - (2009-08-06)
[2273] Three recent questions on Tomcat Convertors - (2009-07-07)
[2062] Virtual hosting and mod_proxy forwarding of different domains (httpd) - (2009-03-01)
[1944] Forwarding session and cookie requests from httpd to Tomcat - (2008-12-14)
A655 - Web Application Deployment - Using Tomcat and Apache httpd Together [1940] URL rewriting with front and back servers - (2008-12-14)
[1938] Predictive Load Balancing - PHP and / or Java - (2008-12-13)
[1552] Extra public classes in deploying Apache httpd and Tomcat - (2008-02-24)
[1549] http, https and ajp - comparison and choice - (2008-02-22)
[1383] Monitoring mod_jk and how it is load balancing - (2007-10-07)
[576] Why run two different web servers - (2006-01-25)
[436] Linking Apache httpd to Apache Tomcat - (2005-09-05)
A657 - Web Application Deployment - Using httpd to front Tomcat [2483] Clustering on Tomcat - (2009-10-30)
Some other Articles
Odd one out.Real chance to make a differenceCopying a reference, or cloningMoral dilemmaApache httpd to Tomcat - jk v proxyHostnames spring forwardChoosing the right languageActive LearningJIT or JAUNot just a pretty face to answer the phone.