Re: Servlet caching strategies?
On Mon, 20 Sep 2010, Arne Vajh?j wrote:
On 20-09-2010 17:12, markspace wrote:
I was poking around the internet looking for caching idea for servlets
and JEE containers. Here's an excerpt from an older book (2002)
published by O'Reilly:
"Pregeneration and caching of content can be key to providing your site
visitors with a quality experience. With the right pregeneration and
caching, web pages pop up rather than drag, and loads are
reduced--sometimes dramatically--on the client, server, and network....
There's no need to dynamically regenerate content that doesn't change
between requests. "
<http://events.oreilly.com/pub/a/onjava/excerpt/jebp_3/index2.html>
Since this source is almost 8 years old, I thought I'd ask here. Is
"pregeneration" of content still considered a best practice? What tools
do you use to manage the process? The article recommends Tomcat & Ant,
apparently implying that you should build everything possible statically
with Ant before deploying it.
Any different thoughts?
I have no direct experience with this; my company's practice seems to be
to not worry about it at all. Static content (images, mostly) gets pushed
forward to webservers or a content distribution network, but all page
content is generated on the fly. I doubt much of it gets cached; we lean
towards doing lots of per-user customisation on the page, which militates
against that somewhat. I suspect we are Bad People for doing this, though.
There are no need to pregenerate static content.
Agreed. To repeat what Arne said with slightly different emphasis, i think
pages should be cached - i think it's vastly preferable to cacheing data
further back, because it shortcuts page generation - and i think the place
to do it is in a reverse proxy sitting in front of your app servers. As
Arne said, something like Denmark's finest software product, Varnish:
http://www.varnish-cache.org/
Varnish was built from the ground up (by a Dane, Arne!) to be fast at
serving cached pages. It can pump pages out vastly faster than any app
server, using runtime resources very efficiently in doing so.
But i don't think you need to pregenerate per se to fill the cache.
Rather, you spider the site, via the cache, thus causing it to be filled.
If you can produce a list of URLs for every page on your site, wget
running on a box out on the net will do the job nicely.
As an aside, on the subject of high-performance web architecture in
reality, this is old, but it's a classic:
http://perl.apache.org/docs/tutorials/apps/scale_etoys/etoys.html
tom
--
Many of us adopted the File's slang as our own, feeling that we'd found a
tangible sign of the community of minds we'd half-guessed to be out there.