Post on 11-May-2015
description
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