Path: csiph.com!eternal-september.org!feeder.eternal-september.org!mx02.eternal-september.org!.POSTED!not-for-mail From: Daniel Pitts Newsgroups: comp.lang.java.programmer Subject: Re: Is it necessary to have both an application server AND a web server? Date: Sat, 11 Jun 2016 12:41:38 -0700 Organization: A noiseless patient Spider Lines: 51 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Injection-Date: Sat, 11 Jun 2016 19:41:38 -0000 (UTC) Injection-Info: mx02.eternal-september.org; posting-host="dd2e0e78b39619a248feb341e7b76d6e"; logging-data="2971"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/EVokc4gDtxvQWSFRY7tQEMEuxy/7kfAU=" User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:45.0) Gecko/20100101 Thunderbird/45.1.1 In-Reply-To: Cancel-Lock: sha1:On1lYatU+EuzQ/NpR+PRHOxlYzI= Xref: csiph.com comp.lang.java.programmer:34604 On 6/10/16 3:48 PM, Qu0ll wrote: > DISCLAIMER: Server-side Java is not my forte. > > I have often noticed that in many places where I have worked, the > companies have both a full application server such as JBoss/Wildfly AND > a web server (typically Apache) installed and both seem to work together. > > 1) Is this necessary and if so, why? > 2) What does a web server "provide" that an application server doesn't? > 3) What is the nature of the relationship or interaction between both > applications? > It isn't always necessary, but they provide different specializations. The Apache (or nginx) provides some basic file serving, redirects, URL masking, etc... They also make it easier to serve multiple applications behind a single host. Where I work, we used to have many more layers than even that: 1. Akamai 2. Load Balancer 3. Apache 4. Load Balancer 5. Custom Proxy #1 (For non-cachable/real-time decisions) 6. Load Balancer 7. Caching Proxy 8. Load Balancer 9. Custom Proxy #2 (For cachable global logic) 10. Load Balancer 11. Web Application(s) Because we used an HTTP API, it went even deeper. The "Web Application" would call into our API stack: 1. Load Balancer 2. Apache 3. Caching Proxy 4. HTTP API Application(s) The API would then connect to MySQL or SOLR (Solr being another web-app), and other data-sources. Could we do all of this in a single application? Yes! But it wouldn't be quite as robust, would be harder to manage, and would require us to right a lot more custom code to do the functions that Apache did for us. We've since simplified our architecture a lot (no more custom proxies), and use nginx instead of apache.