Caching and Dynamic Content Generation for the Web

Dynamic Web content can consume orders of magnitude more CPU time to serve than static content. Generating dynamic content is often the performance bottleneck for Web sites, even if only a fraction of the content is generated dynamically. The key challenge is to serve dynamic content efficiently while providing current and consistent information.

The following USITS '97 paper describes techniques we developed for caching dynamic data to improve performance at highly accessed real Web sites several years ago.

A key component of this work is a cache which can efficiently store data from Web and other distributed applications via an API invoked by applications. The following technical report provides more details of our cache and its API. Since that time, caches of this type (such as memcached, Redis, PHP caches, Python caches, ASP.NET caches, IBM WebSphere DynaCache and eXtreme Scale) have become widely used for improving performance at Web sites as well as in other distributed applications.

The following papers introduce cache dependencies for maintaining consistency between cached dynamic objects and underlying data which affect their values; the INFOCOM '99 paper describes how they were successfully deployed at a major Web site to significantly improve performance and consistency levels for dynamic data. Since that time, cache dependencies have become commonly used by many developers and are a key feature of tools for building Web sites such as Microsoft's ASP.NET, PHP frameworks such as Yii, and Python.

The following paper describes our use several years ago of fragment-based techniques for generating dynamic Web content for highly accessed real Web sites. These techniques allow fragment caching. Since that time, fragment-based Web publication has become widely used and is a key feature of commonly used Web content management systems such as WordPress. Support for fragment caching now extends far beyond IBM. Several PHP frameworks, Microsoft's ASP.NET, Python, and Ruby on Rails support fragment caching as do Oracle, Akamai, and others.

The following papers describe techniques which we have developed for efficiently publishing dynamic content. Several of these techniques can be applied to changing content in many different forms and are not restricted to the Web. The ACM Transactions on Internet Technology and SC papers describe some of our experiences when we deployed our techniques at real highly accessed Web sites.

The ability to cache dynamic content can greatly improve performance. Many systems do not allow dynamic content to be cached because of the problem of maintaining consistency. The following papers describe techniques we have developed for consistently caching dynamic data. The IEEE/ACM Transactions on Networking paper describes our experiences caching dynamic data for real highly accessed Web sites.

Caching is extremely important for improving the performance of distributed systems and can be deployed at multiple places. The following papers describe work that we have done developing caches applicable to a broad range of distributed applications and not necessarily limited to the Web. The caching systems described in several of these papers have been successful in real deployments.

Load Balancing and Scheduling

I co-invented Web load balancing with affinity between specific clients and servers (sticky load balancing). This work was incorporated into IBM's Network Dispatcher load balancer several years ago. Since that time, load balancing with affinity has become widely used and is now a standard feature of just about all commonly used Web load balancers (such as the Apache HTTP Server load balancer). Among other things, this is important for supporting high TLS (SSL) request rates for secure (encrypted) communications over the Web such as when credit card transactions are made. Load balancing with affinity is also important for other protocols such as the Session Initiation Protocol (SIP) as described in our INFOCOM 2009 and 2012 IEEE/ACM Transctions on Networking papers.

The techniques described in several of these papers have been successful in real deployments.

Cloud Computing and Virtualization

I have recently developed the following software applicable to storage in the cloud:

My Universal Data Store Manager (UDSM) allows a computer program to access multiple data stores including file systems, SQL stores, NoSQL stores, and caches. A common interface is provided to make it easy for an application to easily switch between different data stores. The UDSM allows the performance of different data stores to be monitored, and a workload generator allows the performance of different data stores to be easily compared. Encryption is provided for data confidentiality, and compression is provided to reduce data sizes.

Enhanced data store clients (particularly for cloud-based data stores) which provide caching, encryption, and compression capabilities. My data store client library can be used for a broad range of applications in which these features are needed.

Storage and Memory Allocation

I have recently developed the following software applicable to storage :

My Universal Data Store Manager (UDSM) allows a computer program to access multiple data stores including file systems, SQL stores, NoSQL stores, and caches. A common interface is provided to make it easy for an application to easily switch between different data stores. The UDSM allows the performance of different data stores to be monitored, and a workload generator allows the performance of different data stores to be easily compared. Encryption is provided for data confidentiality, and compression is provided to reduce data sizes.

Enhanced data store clients (particularly for cloud-based data stores) which provide caching, encryption, and compression capabilities. My data store client library can be used for a broad range of applications in which these features are needed.

I am interested in both main memory and persistent storage allocation. A major theme of my work in this area has been allocators which adapt themselves to request size distributions to optimize performance and minimize fragmentation. The first paper describes a disk storage allocation system which outperforms both file systems and databases for the workloads we used. This disk storage allocation system has been successful in several real deployments. The second paper presents main memory allocation algorithms which are particularly well suited for parallel computer systems.

Capacity Planning, Performance Modelling and Monitoring

I am also interested in capacity planning, performance modelling, and monitoring for both scientific and commercial workloads. I have developed improved techniques for predicting customer workloads in the future from past behavior. This allows customers to estimate how much capacity will be required in the future. It also helps schedule tasks to optimize utilization of system resources and efficiently make use of spare CPU cycles in grid environments. Several of the techniques described in the papers in this section have been successfully used commercially.