16 - July - 2014

Nippy EdgeCast Purging

Post by Mike C

Since we integrated the EdgeCast CDN for one of our clients, and released a related EdgeCast Drupal module we have been encouraging more and more clients to consider a CDN layer as a great first line of defence in case a server temporarily malfunctions.

A recent international client who is running many domains with federated content using the Domain module also wanted to make use of the content delivery network to improve performance and resiliance for their sites.

The use of the Domain module created a problem with the purge process employed in the EdgeCast v1.x module. As with most of the cache purging modules available for Drupal it sent each URL individually and waited for confirmation back to say it the request had been successful.

With a large multi domain site this multiplied the page load time upon submitting a node edit form to the point of a PHP timeout and Ngnix HTTP 500 errors. Increasing the timeouts was a short term fix, but it still meant content editors were slowed down waiting for forms to submit.

There was also another effect cause by external feed aggregation which created nodes, which in turn triggered URL purge requests, and slowed down each node creation step.

We toyed with the idea of using a Drupal batch queue to process the purge requests during the regular cron call but this delayed the refreshing of content pages far too long for the content editors.

We settled on what appears to be the little used Multi Curl facility. This allowed us to build up an array of all the URLs using the Expire module and then send a single HTTP request to the EdgeCast API followed by ignoring the response back from the API. This created a much faster content editing experience for the users.

Note: The Expire module doesn't currently implement Domain module purging - the code class is empty. See issue #2293217 for details. We worked around this using the Cache Expiration Alias module.

The side effect of the Multi Curl development work was the speeding up of the single domain sites purge requests too!

The v2.0 EdgeCast module is available now for Drupal 7.

Find out more about the content delivery network from Edgecast.

Profile picture for user Mike C

Mike C

Technical Director

12 years of Drupal development wrangling and a background in digital project architecture.

Comments

Instead of rolling your own solution using Multi Curl you could have used Guzzle (apart of drupal 8 core now) or given HTTP Parallel Request & Threading Library - https://www.drupal.org/project/httprl a try. Nice job on using the expire module :)

mikeytown2

There was minimal amount of PHP code to implement the non blocking Multi Curl calls to be honest. Much cleaner than pulling in additional dependencies.

Mike C

In reply to by mikeytown2

Add new comment

Share this article

Our thoughts

Let's work together

Get in touch and find out how we can empower your organisation.
Back to top