Pages

Saturday, September 20, 2008

Improving performance of your web application by 2x - 5x

Caching is a very common design pattern to improve the performance of a web application. Caching can be done at multiple tiers, application, database, edge of the network.... Caching done right can improve the performance of your web application by 2x-5x. Yes sir that is correct!!! Let me lead you to the road of redemption.

Say your application is an old school J2EE style application composed of with JSP, Servlets, JSF et al. Most of the time your app. is housed in an application server. All application servers have caching frameworks that you can leverage to cache web application JSP/JSTL/Servlet responses.

  1. Look at your web application and determine what is cacheable and what is not. This is not an enjoyable activity. Its like asking someone what they want to become after growing up. At least try to determine all the obvious fragments of your site like headers, footers or relatively unchanging JSPs etc.. that can be cacheable.
  2. Employ tag libraries or configure servlet caching to start caching the web responses from these cacheable artifacts.
  3. Plugin a filter/handler/interceptor/thingamajig/custom code that interacts with caching framework that determines for every URI/request coming into the webcontainer, whether the request was a CACHE MISS, CACHE HIT or was UNELIGIBLE for caching.
  4. Log this information in some file and gather these statistics over a suitable period of time like a week.
  5. WTF do I do with this data ? 1. Determine the cacheability of your website. cacheability= no. of cache miss/no. of cache hits. The smaller this no. the better your website will be able to handle user load. 2. Most importantly look at all the URIs or requests that were demmed to be uncacheable and consider adding caching for those web fragment responses.
  6. Scrub and Repeat
Once you start watching what is cacheable and what is not, you will learn a LOT about your website and its load/user characteristics. You will be add caching for every web response that can be cached thereby improving performance and reaching nirvana.

One hint of caution about adding more caching....Please look at JVM heap usage before you start caching the whole world. Please also put in place a cache invalidation strategy. You dont want users to buy an out-of-stock item.

More on these pesky cache issues later.....

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.