High Performance Drupal

Post on 11-May-2015

13.710 views 0 download

Tags:

description

Presentation from BADCamp 2009 on high performance Drupal: how to make your website fast and scalable.

Transcript of High Performance Drupal

High Performance DrupalMaking Your Site Fast Fast Fast

Drupal Is Powerful

Drupal is Slow

Databases are Slow

PHP Is Slow

Consumer-Grade Networks Are Slow

Increasing Speed Means Diving Less Deeply Into The Stack

Fast Is Making Fewer Requests From Faster Sources

The Life Of A Pageload

• Browser Request

• Browser Cache?

• Network Request

• Server Response

• Associated Assets (back to top)

Optimizing For The Browser

• Make Your HTML/CSS Images Efficient

• Use CSS/JS Aggregation

• Use a CDN

• Yslow is good for profiling this

Optimizing Server Response

• Reverse Proxy/Drupal Page Cache

• PHP OpCode Cache

• Drupal System Cache

Reverse-Proxies Are Very Fast

Faster Than Apache

Much Faster Than Drupal

Don’t Bother Your Power Tools With Simple Tasks

Implementing Varnish

• Use Pressflow

• Implement A Simple VCL Based On Sessions

• Enable Aggressive Caching

• Enjoy, Experiment, Excel

OpCode Caching Keeps Drupal Loaded In Memory

Don’t Touch The Disk

Don’t Load Up Apache Threads With Copies of Drupal

Implementing APC

• The Biggest/Cheapest Win

• Install via apt-get, yum, or pecl

• Monitor with apc.php

• Lots of modules? Bump the SHM size

• Enable apc.stat=0 with caution

Drupal Freezes It’s Code Before Launch

Most Real-World Scaling Information Comes After Release

Drupal Supports A Crazy Array Of Use Cases

$5/month Shared Hosting Is Not High Performance

Pressflow

• “Pressflow Makes Drupal Scale”

• Drop-in Replacement For Core

• Backports many Drupal 7 features

• PHP 5.x/MySQL 5.x Required

• Enables robust reverse-proxy, mysql replication and more

• Runs drupal.org and many other high-performance sites

Drupal Has A Cache And That Is Good

But... Drupal’s Cache Is In The Database

And Serialized.

That Works Anywhere, But Is Both Slow and Expensive

CacheRouter

• Use settings.php to plug in cacherouter instead of /includes/cache.inc

• Pick your poison: APC, XCache, Memcached, Filesystem, or classic db caching.

• Change caches per table.

• Vital for high-speed logged-in pageloads.

Coming Soon: Advcache

• Cache Nodes, Users, Taxonomy Terms and other common objects via cacherouter.

• Extends the notion of drupal’s static cache to whole objects.

• Still in development, but if you’re into writing patches...

Other Tips

• Search is among the slowest and most expensive queries. Use Solr instead.

• InnoDB can help with locking in MySQL

• Hardware is faster and often more cost effective than code cleanup.

• Monitor load and scale ahead of problems.

Benchmarking/Profiling

• Cachegrind to profile code.

• Jmeter to simulate load.

• Slow Query logs, cactai, etc.

Vertical/Horizntal Scaling

• Start with all services you need.

• Separate services into layers.

• Add more servers at each layer as needed.

• Shameless plug: Project Mercury: http://getpantheon.com

More Resources

• http://groups.drupal.org/high-performance

• http://pressflow.org

• http://tag1consulting.com

• http://2bits.com

• http://getpantheon.com