High
Performance
WordPress
with your host: Mikel King
Caching, Clustering & Tuning
http://j.konex.us/mk-twttr http://j.kon...
Scaling WordPress
High Performance WordPress by @MikelKing http://jafdip.com
● PHP Apps like WordPress don’t scale =
LIES!
Scaling WordPress
High Performance WordPress by @MikelKing http://jafdip.com
● PHP Apps like WordPress don’t scale = LIES!
● PHP is not JAVA so Big IRON = FAIL
Scaling WordPress
High Performance Word...
● PHP Apps like WordPress don’t scale = LIES!
● PHP is not JAVA so Big IRON = FAIL
● Caching + DB Clustering + Apache Tuni...
User level --
Files System --
Memory Resident --
Browser
Caching Plugins
Memcache
Realms of Caching
High Performance WordP...
● Is easy to turn on and easier to fail.
● Requires access to Apache conf
&& ! .htaccess
● Requires proper WordPress CSS &...
Apache Conf Example
# 480 weeks
<FilesMatch ".(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-a...
wp_register_script(
'top-menu',
$this->js_template_url . 'top_menu.js',
null,
self::VERSION,
self::IN_HEADER
);
wp_enqueue...
● Easy to setup
● Good for shared hosting
● NOT load balancer friendly
● Plugins are written in PHP
● Does NOT reliably ca...
The Caching Game
High Performance WordPress by @MikelKing http://jafdip.com
W1 Server
High Performance WordPress by @MikelKing http://jafdip.com
W3 Server
High Performance WordPress by @MikelKing http://jafdip.com
W2 Server
High Performance WordPress by @MikelKing http://jafdip.com
M1 Server
High Performance WordPress by @MikelKing http://jafdip.com
M3 Server
High Performance WordPress by @MikelKing http://jafdip.com
M3 Server
High Performance WordPress by @MikelKing http://jafdip.com
M2 Server
High Performance WordPress by @MikelKing http://jafdip.com
W4 Server
High Performance WordPress by @MikelKing http://jafdip.com
Example of DB runaway
High Performance WordPress by @MikelKing http://jafdip.com
● Stores PHP code as compiled objects
● Capable of caching DB queries as objects
● May be clustered
● Is load balancer fri...
Example of a memcache cluster
define('WP_CACHE', true);
$memcached_servers = array(
'default' => array(
'172.16.1.244:1121...
Example of a memcache cluster
memcache-top v0.6 (default port: 11211, color: on, refresh: 3 seconds)
INSTANCE USAGE HIT % ...
Example of a DB on memcache
High Performance WordPress by @MikelKing http://jafdip.com
Memcache is a separate service to manage
Corruption can spread like a virus
Clearing the cache requires shutting down
the ...
● Convert ALL tables to InnoDB
● Convert ALL collation to UTF-8
● Set innodb_buffer_pool_size = 70-80% of
total DB server ...
Full text search is supported in the InnoDB
engine as of MySql 5.6, prior to this only the
MyISAM engine had this feature....
Debian/Ubunutu Ulimits
Excerpt: /etc/security/limits.conf
mysql soft nofile 10240
mysql hard nofile 40960
mysql soft nproc...
FreeBSD Ulimits
Excerpt: /etc/login.conf
daemon:
:memorylocked=64M:
:memoryuse=unlimited:
:tc=default:
High Performance Wo...
Windows Ulimits
High Performance WordPress by @MikelKing http://jafdip.com
Master
$wpdb->add_database(array(
'host’ => '172.16.1.7:3336',
'user’ => 'db_admin',
'password’ => 'My$c3r3t',
'name’ => '...
● Eliminate file reads.
● Reduce the number of server limit
● Increase the allocated RAM
● Install mod_deflate
● Install m...
House Keeping
Use the PHP native filter_var & filter_input in lieu of regex and built-
in WordPress methods
Drop WP & plug...
General House Keeping
● Cleanout the functions.php
● Turn off unnecessary auto loaded items in wp_options
● Optimize your ...
This has been
High
Performance
WordPress
with your host: Mikel King
Caching, Clustering & Tuning
http://j.konex.us/mk-twtt...
akhirnya
High Performance WordPress by @MikelKing http://jafdip.com
Nächste SlideShare
Wird geladen in …5
×

High performance WordPress

1.118 Aufrufe

Veröffentlicht am

The Deck from my presentation at WordCamp NYC 2014.

Veröffentlicht in: Technologie
0 Kommentare
1 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

Keine Downloads
Aufrufe
Aufrufe insgesamt
1.118
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
12
Aktionen
Geteilt
0
Downloads
9
Kommentare
0
Gefällt mir
1
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie
  • These candies represent page requests.
  • The load balancer directs the user’s request for a blue page. Fortunately W1 has a copy of the page in it’s cache.
  • The load balancer directs the user’s request for a green page. Fortunately W3 has a copy of the page in it’s cache.
  • The load balancer directs the user’s request for a pink page. Unfortunately W2 does not have a copy of the page in it’s cache, therefore; a page must be completely built from scratch by WordPress before fulfilling the request.
  • The load balancer directs the user’s request for a blue page. Fortunately M1 is able to access a copy of the page in memcache.
  • The load balancer directs the user’s request for a blue page. Fortunately M3 is able to access a copy of the page in memcache.

  • The load balancer directs the user’s request for a blue page. Fortunately M3 is able to access a copy of the page in memcache.

  • M2 boots up and receives a user request for a pink page. Fortunately M2 is able to access a copy of the page already in memcache.

  • W4 boots up and receives a user request for a green page. Unfortunately W4 is has no cache and must start from scratch.



  • ----- Meeting Notes (8/4/14 23:18) -----
    In this view of our New Relic graphs you see what happens when queries start bottlenecking in the DB system. Once the problem start only HUPing the web services to clear the condition.
  • If you do not have control of your hosting environment you may not be able to upgrade to the current MySql server. If you do not require full text search in InnoDB then it WILL not be a problem.
  • Using the internal WordPress search will slow down your systems. These search system index your site and serve the results from that outside index and do not impact the load on your WordPress systems.

    The native PHP filter_var and filter_input mthods are only supported in PHP versions 5.2 and later so you may need to upgrade in order to use it. The main benefit is that these methods are written in C and are an order of magnitude faster than anything you could write in PHP to do the same job. Do not use them in code you intend to publish back to the WordPress community like plugins and themes because you can not guarantee another user’s PHP environment.
  • High performance WordPress

    1. 1. High Performance WordPress with your host: Mikel King Caching, Clustering & Tuning http://j.konex.us/mk-twttr http://j.konex.us/mk-plus http://linkd.in/in-mk
    2. 2. Scaling WordPress High Performance WordPress by @MikelKing http://jafdip.com
    3. 3. ● PHP Apps like WordPress don’t scale = LIES! Scaling WordPress High Performance WordPress by @MikelKing http://jafdip.com
    4. 4. ● PHP Apps like WordPress don’t scale = LIES! ● PHP is not JAVA so Big IRON = FAIL Scaling WordPress High Performance WordPress by @MikelKing http://jafdip.com
    5. 5. ● PHP Apps like WordPress don’t scale = LIES! ● PHP is not JAVA so Big IRON = FAIL ● Caching + DB Clustering + Apache Tuning = Success! Scaling WordPress High Performance WordPress by @MikelKing http://jafdip.com
    6. 6. User level -- Files System -- Memory Resident -- Browser Caching Plugins Memcache Realms of Caching High Performance WordPress by @MikelKing http://jafdip.com
    7. 7. ● Is easy to turn on and easier to fail. ● Requires access to Apache conf && ! .htaccess ● Requires proper WordPress CSS & JS registration and enqueuing Browser Caching High Performance WordPress by @MikelKing http://jafdip.com
    8. 8. Apache Conf Example # 480 weeks <FilesMatch ".(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$"> Header set Cache-Control "max-age=290304000, public" </FilesMatch> # 2 DAYS <FilesMatch ".(xml|txt)$"> Header set Cache-Control "max-age=172800, public, must-revalidate" </FilesMatch> # 2 HOURS <FilesMatch ".(html|htm)$"> Header set Cache-Control "max-age=7200, must-revalidate" </FilesMatch> High Performance WordPress by @MikelKing http://jafdip.com
    9. 9. wp_register_script( 'top-menu', $this->js_template_url . 'top_menu.js', null, self::VERSION, self::IN_HEADER ); wp_enqueue_script('top-menu'); Asset Registration High Performance WordPress by @MikelKing http://jafdip.com
    10. 10. ● Easy to setup ● Good for shared hosting ● NOT load balancer friendly ● Plugins are written in PHP ● Does NOT reliably cache DB Objects ● Relies on file system access File System Caching High Performance WordPress by @MikelKing http://jafdip.com
    11. 11. The Caching Game High Performance WordPress by @MikelKing http://jafdip.com
    12. 12. W1 Server High Performance WordPress by @MikelKing http://jafdip.com
    13. 13. W3 Server High Performance WordPress by @MikelKing http://jafdip.com
    14. 14. W2 Server High Performance WordPress by @MikelKing http://jafdip.com
    15. 15. M1 Server High Performance WordPress by @MikelKing http://jafdip.com
    16. 16. M3 Server High Performance WordPress by @MikelKing http://jafdip.com
    17. 17. M3 Server High Performance WordPress by @MikelKing http://jafdip.com
    18. 18. M2 Server High Performance WordPress by @MikelKing http://jafdip.com
    19. 19. W4 Server High Performance WordPress by @MikelKing http://jafdip.com
    20. 20. Example of DB runaway High Performance WordPress by @MikelKing http://jafdip.com
    21. 21. ● Stores PHP code as compiled objects ● Capable of caching DB queries as objects ● May be clustered ● Is load balancer friendly Memory Based Caching High Performance WordPress by @MikelKing http://jafdip.com
    22. 22. Example of a memcache cluster define('WP_CACHE', true); $memcached_servers = array( 'default' => array( '172.16.1.244:11211', '172.16.1.229:11211', '172.16.1.195:11211', '172.16.1.227:11211', '172.16.1.218:11211’, '172.16.1.205:11211’ ) ); High Performance WordPress by @MikelKing http://jafdip.com
    23. 23. Example of a memcache cluster memcache-top v0.6 (default port: 11211, color: on, refresh: 3 seconds) INSTANCE USAGE HIT % CONN TIME EVICT/s READ/s WRITE/s 172.16.1.244:11211 0.9% 94.5% 146 3.5ms 0.0 30.2K 308.0K 172.16.1.229:11211 33.1% 98.2% 148 1.9ms 0.0 33.1K 253.3K 172.16.1.195:11211 39.0% 97.2% 148 2.2ms 0.0 22.4K 217.8K 172.16.1.227:11211 32.2% 98.7% 148 2.1ms 0.0 128.5K 975.1K 172.16.1.218:11211 0.0% 0.0% 10 2.1ms 0.0 2 276 172.16.1.205:11211 36.3% 90.8% 148 2.1ms 0.0 25.2K 223.8K AVERAGE: 23.6% 79.9% 124 2.3ms 0.0 39.9K 329.7K TOTAL: 0.7GB/ 3.0GB 748 14.0ms 0.0 239.4K 1.9M High Performance WordPress by @MikelKing http://jafdip.com
    24. 24. Example of a DB on memcache High Performance WordPress by @MikelKing http://jafdip.com
    25. 25. Memcache is a separate service to manage Corruption can spread like a virus Clearing the cache requires shutting down the entire cluster Caveats (It’s NOT all sunshine and rainbows) High Performance WordPress by @MikelKing http://jafdip.com
    26. 26. ● Convert ALL tables to InnoDB ● Convert ALL collation to UTF-8 ● Set innodb_buffer_pool_size = 70-80% of total DB server available RAM ● Set thread_cache_size = 4096 ● Increase the mysql ulimits Clustering with HyperDB High Performance WordPress by @MikelKing http://jafdip.com
    27. 27. Full text search is supported in the InnoDB engine as of MySql 5.6, prior to this only the MyISAM engine had this feature. InnoDB became the default storage engine in MySql 5.5 and that prior to this version you must compile it in as an optional item. Caveats High Performance WordPress by @MikelKing http://jafdip.com
    28. 28. Debian/Ubunutu Ulimits Excerpt: /etc/security/limits.conf mysql soft nofile 10240 mysql hard nofile 40960 mysql soft nproc 10240 mysql hard nproc 40960 High Performance WordPress by @MikelKing http://jafdip.com
    29. 29. FreeBSD Ulimits Excerpt: /etc/login.conf daemon: :memorylocked=64M: :memoryuse=unlimited: :tc=default: High Performance WordPress by @MikelKing http://jafdip.com
    30. 30. Windows Ulimits High Performance WordPress by @MikelKing http://jafdip.com
    31. 31. Master $wpdb->add_database(array( 'host’ => '172.16.1.7:3336', 'user’ => 'db_admin', 'password’ => 'My$c3r3t', 'name’ => 'prod_db', 'write’ => 1, 'read’ => 1, 'dataset’ => 'global', 'timeout’ => 0.2, 'lag_threshold’ => 2, )); Slave $wpdb->add_database(array( 'host' => '172.16.1.9:3336’, 'user' => 'db_admin', 'password' => 'My$c3r3t', 'name' => 'prod_db', 'write' => 0, 'read’ => 1, 'dataset’ => 'global', 'timeout’ => 0.2, 'lag_threshold’ => 2, )); HyperDB Conf (db-config.php) High Performance WordPress by @MikelKing http://jafdip.com
    32. 32. ● Eliminate file reads. ● Reduce the number of server limit ● Increase the allocated RAM ● Install mod_deflate ● Install mod_gzip2 Tuning Apache High Performance WordPress by @MikelKing http://jafdip.com
    33. 33. House Keeping Use the PHP native filter_var & filter_input in lieu of regex and built- in WordPress methods Drop WP & plugin based Search in favor of a search service • Solr (requires a separate Java based server) • Sphinx (is a separate service • Elastisearch (requires a separate Hadoop server) • GSS ( a.k.a. Google Site Search) Enterprise Environments High Performance WordPress by @MikelKing http://jafdip.com
    34. 34. General House Keeping ● Cleanout the functions.php ● Turn off unnecessary auto loaded items in wp_options ● Optimize your database with a plug-in like WP Optimize ● Leverage the power of a CDN to eliminate your serving environment’s latency issues. These items apply sites of any size even if you are on shared hosting High Performance WordPress by @MikelKing http://jafdip.com
    35. 35. This has been High Performance WordPress with your host: Mikel King Caching, Clustering & Tuning http://j.konex.us/mk-twttr http://j.konex.us/mk-plus http://linkd.in/in-mk
    36. 36. akhirnya High Performance WordPress by @MikelKing http://jafdip.com

    ×