high performance drupal sites
DESCRIPTION
High Performance Drupal Sites lectures was delivered by Rami Järvinen of Exove OyTRANSCRIPT
![Page 1: High Performance Drupal Sites](https://reader033.vdocuments.us/reader033/viewer/2022042813/54b6f0c84a795999598b45bc/html5/thumbnails/1.jpg)
High performance Drupal sites DrupalCamp Helsinki 27.9.2011
Rami Järvinen, Exove Oy
![Page 2: High Performance Drupal Sites](https://reader033.vdocuments.us/reader033/viewer/2022042813/54b6f0c84a795999598b45bc/html5/thumbnails/2.jpg)
Agenda
About Exove and myself
Caching
Scaling
Optimizing
![Page 3: High Performance Drupal Sites](https://reader033.vdocuments.us/reader033/viewer/2022042813/54b6f0c84a795999598b45bc/html5/thumbnails/3.jpg)
Exove enables companies to conduct better business on the
Internet
through best-of-breed personnel and solutions
![Page 4: High Performance Drupal Sites](https://reader033.vdocuments.us/reader033/viewer/2022042813/54b6f0c84a795999598b45bc/html5/thumbnails/4.jpg)
We design and implement beautiful, functional, and business-driven
solutions
![Page 5: High Performance Drupal Sites](https://reader033.vdocuments.us/reader033/viewer/2022042813/54b6f0c84a795999598b45bc/html5/thumbnails/5.jpg)
About myself, Rami Järvinen
Senior developer at Exove
Drupal experience from 2006. Been involved with a wide variety of different site projects.
![Page 6: High Performance Drupal Sites](https://reader033.vdocuments.us/reader033/viewer/2022042813/54b6f0c84a795999598b45bc/html5/thumbnails/6.jpg)
Drupal is slow
Why?
![Page 7: High Performance Drupal Sites](https://reader033.vdocuments.us/reader033/viewer/2022042813/54b6f0c84a795999598b45bc/html5/thumbnails/7.jpg)
Drupal is slow
Why?
• Page rendering
![Page 8: High Performance Drupal Sites](https://reader033.vdocuments.us/reader033/viewer/2022042813/54b6f0c84a795999598b45bc/html5/thumbnails/8.jpg)
Drupal is slow
Why?
• Page rendering
• Database queries
![Page 9: High Performance Drupal Sites](https://reader033.vdocuments.us/reader033/viewer/2022042813/54b6f0c84a795999598b45bc/html5/thumbnails/9.jpg)
Drupal is slow
Why?
• Page rendering
• Database queries
• Programmers
![Page 10: High Performance Drupal Sites](https://reader033.vdocuments.us/reader033/viewer/2022042813/54b6f0c84a795999598b45bc/html5/thumbnails/10.jpg)
Drupal is slow
Why?
• Page rendering
• Database queries
• Programmers
Solution
• Caching
• Caching / Optimizing
• ???
![Page 11: High Performance Drupal Sites](https://reader033.vdocuments.us/reader033/viewer/2022042813/54b6f0c84a795999598b45bc/html5/thumbnails/11.jpg)
Boosting up the performance
• Drupal’s internal architecture • Single-controller • Loads a lot of code on every pageload • Tends to be slower than a pure MVC-model
• Caching • Minimize the CPU usage • Minimize the amount of SQL queries • Ultimately – avoid running Drupal’s bootstrap
![Page 12: High Performance Drupal Sites](https://reader033.vdocuments.us/reader033/viewer/2022042813/54b6f0c84a795999598b45bc/html5/thumbnails/12.jpg)
Caching layers
• MySQL query cache
• PHP opcode cache
• Drupal internal caching
• HTTP cache (reverse proxy)
• Browser cache
• HTML 5: Client-side storage
![Page 13: High Performance Drupal Sites](https://reader033.vdocuments.us/reader033/viewer/2022042813/54b6f0c84a795999598b45bc/html5/thumbnails/13.jpg)
Caching layers – PHP opcode cache
• Alternative PHP Cache (APC)
• PHP code is compiled every time it is read
• APC caches the compiled bytecode
• Parsing and compiling PHP code is not needed, if the bytecode is in the cache
• Works generally everywhere and gives a major boost in performance
![Page 14: High Performance Drupal Sites](https://reader033.vdocuments.us/reader033/viewer/2022042813/54b6f0c84a795999598b45bc/html5/thumbnails/14.jpg)
Caching layers – Drupal internal caching
• Block cache • Global / per role / per user
• Page cache • For anonymous users
• Code level caching
• Contrib modules • Boost • Memcache API and Integration
![Page 15: High Performance Drupal Sites](https://reader033.vdocuments.us/reader033/viewer/2022042813/54b6f0c84a795999598b45bc/html5/thumbnails/15.jpg)
Cache layers – Code level
• 1st rule of caching and optimization: Never do something time consuming twice if you can hold onto the results and re-use them
• Static variables for storing data within a function for the duration of a single page load. • Use drupal_static() to utilize central static variable storage
• Using cache_set() and cache_get() functions for caching data more permanently.
![Page 16: High Performance Drupal Sites](https://reader033.vdocuments.us/reader033/viewer/2022042813/54b6f0c84a795999598b45bc/html5/thumbnails/16.jpg)
Caching layers - Boost
• Generated page HTML is saved as a static file • Page loads never touch the database
• For anonymous traffic and sites with a little dynamic content
• Easy to set up even on a cheap web hotel • Enable the module, modify .htaccess and you’re done
• Highly configurable
• For not yet cached content, serves the page first and saves HTML after that
• Inbuilt crawler for cache warm-up
![Page 17: High Performance Drupal Sites](https://reader033.vdocuments.us/reader033/viewer/2022042813/54b6f0c84a795999598b45bc/html5/thumbnails/17.jpg)
Caching layers – Memcached
• High-performance, distributed memory object caching system
• In-memory key-value store for small chunks of arbitrary data
• Drop-in replacement for changing Drupal cache backend • Instead of saving cached data to DB, it goes to memcached • High-traffic sites really need to save the cache to memory
• Also for session data etc.
![Page 18: High Performance Drupal Sites](https://reader033.vdocuments.us/reader033/viewer/2022042813/54b6f0c84a795999598b45bc/html5/thumbnails/18.jpg)
• Varnish Cache
• Designed from the ground up as an HTTP accelerator
• Stores data in virtual memory
• Configurable with VCL (Varnish Configuration Language)
• Edge Side Includes (ESI) <esi include=“/esi/some_content” />
• ESI integration module • Block template will be changed to instruct Varnish to get block
content from e.g. http://example.com/esi/block/xxxxxx
Caching layers – Reverse proxy
![Page 19: High Performance Drupal Sites](https://reader033.vdocuments.us/reader033/viewer/2022042813/54b6f0c84a795999598b45bc/html5/thumbnails/19.jpg)
Cache Control module
• An alternative to ESI
• Cheaper way to display user specific content
• How it works • For all users, we load the page with anonymous content
hidden under a throbber • JS then checks if the user is logged in (w/ cookie) and (for
anonymous users) set the anonymous content visible • For logged in users (after JS has checked the login status), it
makes a single request to the backend to get the user-specific data for the page
• http://drupal.org/node/1155312
![Page 20: High Performance Drupal Sites](https://reader033.vdocuments.us/reader033/viewer/2022042813/54b6f0c84a795999598b45bc/html5/thumbnails/20.jpg)
Scaling Drupal
• MySQL • High-performance configurations. There are many good base
configs available – start with them • Dedicated server • Master-slave setup • Direct some of the SQL queries to slave
• Files • Serve static files with Nginx or lighttpd • Or use reverse proxy to cache them
• CDN if there’s a massive library of static content
• Scaling by buying more hardware?
![Page 21: High Performance Drupal Sites](https://reader033.vdocuments.us/reader033/viewer/2022042813/54b6f0c84a795999598b45bc/html5/thumbnails/21.jpg)
Hardware stack example
Linux, Apache PHP
MySQL master
Server 1
memcached
![Page 22: High Performance Drupal Sites](https://reader033.vdocuments.us/reader033/viewer/2022042813/54b6f0c84a795999598b45bc/html5/thumbnails/22.jpg)
Hardware stack example
Linux, Apache PHP
R/W
MySQL master
Front server 1
MySQL server 1 memcached
![Page 23: High Performance Drupal Sites](https://reader033.vdocuments.us/reader033/viewer/2022042813/54b6f0c84a795999598b45bc/html5/thumbnails/23.jpg)
Hardware stack example
Linux, Apache PHP
R/W
MySQL master
Front server 1
MySQL server 1
Linux, Apache PHP
Front server 2
MySQL slave
MySQL server 2
Varnish
HTTP cache 1
Varnish
HTTP cache 2
Load balancer
Front server
R
memcached
memcached
![Page 24: High Performance Drupal Sites](https://reader033.vdocuments.us/reader033/viewer/2022042813/54b6f0c84a795999598b45bc/html5/thumbnails/24.jpg)
Optimizing
• Profiling • Xdebug, XHProf and similar profiling tool to see what actually
happens during a page load • Devel module to print a summary of all database queries
executed for page request, including how many times each query was executed and how long each query took
• SQL bottlenecks • Unnecessary repeating of same queries • Missing indexes • Temporary tables and filesort • Use EXPLAIN to find out how MySQL executes your monster
query • Table locking if using MyISAM engine in MySQL
![Page 25: High Performance Drupal Sites](https://reader033.vdocuments.us/reader033/viewer/2022042813/54b6f0c84a795999598b45bc/html5/thumbnails/25.jpg)
• “Is there a lot of logged in users or are most of them anonymous?” • This pretty much defines what kind of caching strategies can
be applied
• “What kind of things my hosting environment allows me to do?”
• There’s no single best solution
![Page 26: High Performance Drupal Sites](https://reader033.vdocuments.us/reader033/viewer/2022042813/54b6f0c84a795999598b45bc/html5/thumbnails/26.jpg)
Thank you Questions?