When Dynamic Becomes Static: The Next Step in Web Caching


Comments are closed.

Anonymous at 19:25 on 20 May 2015

An interesting look at ways of speeding up server-side responses, and reducing load at the same time. Plenty of examples and suggestions on how to apply this to a range of situations.

A quick disclaimer: I'm speaking from memory, so please refer to the speaker's slide-deck or website for exact specifications.

This was an interesting and worthwhile talk. For those reading in posterity, Mr. Godden's organization (cu.be) has developed a module for NGINX that performs content caching at the web-server layer, with content retrieval performed using NGINX's sub-request mechanism. For request-specific markup that must be generated dynamically, such as user-specific content, this approach can deliver significant performance gains. Employing this module in favor of a language-specific solution should, in theory, carry far less computing time and resource overhead.

In my opinion, the most noteworthy aspects of this module's approach are: there are plans to make it caching-engine agnostic (i.e., it will work with memcached, redis, beanstalkd, and others -- and perhaps a heterogeneous mix of the aforementioned); and, it operates independently of the server-side language in use (i.e., it will work with PHP, Java, ASP.net, etc.).

The considerable performance gains do come at a cost, however: there's a new templating language to learn (although, it is built upon the ESI standard [which should reduce the learning-curve and ensure documentation availability], with some additional features layered on top); and, it is necessary to write request-specific data to the caching engine whenever it must be updated (as this is where NGINX will look for the most up-to-date version of the data).

This module is not for every project, but it does look attractive for certain applications, and especially for a new project, in which case there is no need to rewrite existing templates. Of course, the data structures that are specific to the application must be considered, as not every project will lend itself well to the "push-notification" approach that is required to populate the cache with the most up-to-date information that should be available to the application.

Mr. Godden stated that a beta version of the module will be available within 2-3 weeks of when the talk was given. I will definitely be keeping an eye on the cu.be website in the coming weeks.