php performance w/apc + memcached @fordantitrust thaicyberpoint.com thaithinkpad.com thaihi5.com
TRANSCRIPT
PHP Performance w/APC + Memcached
@FordAntiTrustthaicyberpoint.comthaithinkpad.comthaihi5.com
Cache Theory ?
Cache Theory ?
Req
Output
Cache
ComputeMiss
HitStore
Check1
2
34
Miss - [Store] - Hit
Type ?
http://ralphlosey.files.wordpress.com/2007/06/ram.jpg
http://www.pctechguide.com/images/31HardDrive.jpg
Fast Slow
APC ?
Alternative PHP Cache
Code not changes request
Opcode Cache and Variables Cache
Automatic update w/code changes
Free & Open Source
Simply Installation
PHP Flow
• Scanning and Lexing (Plain Text to Tokens)
• Parsing (Tokens to Expressions)
• Compilation (Translated Expressions to Opcode)
• Execution (Opcode stacks are processed)
Req
Output
• Scanning • Lexing • Parsing • Compilation
Execution
Normal PHP vs APC
Normal PHP vs APC
Req
Output
• Scanning • Lexing • Parsing • Compilation
Execution
Normal PHP vs APC
Req
Output
Opcodecache
• Scanning • Lexing • Parsing • Compilation
APC hook
APC hook
Execution
Miss
Hit
Store
Installation
• Basic PECL (http://pecl.php.net)– pecl install apc
• Ubuntu– apt-get install php5-apc
• Windows (http://pecl4win.php.net)– extension=php_apc.dll
Confextension=apc.soapc.shm_segments=1apc.shm_size=256apc.optimization=0apc.num_files_hint=2048apc.ttl=3600apc.user_ttl=3600apc.enable_cli=1apc.max_file_size=1M
BenchmarkPHP Native PHP w/APC
Concurrency Level 10Time taken for tests 60 secondsComplete requests 298 914
Total transferred 643,149 bytes 1,962,675 bytes
HTML transferred 516,971 bytes 1,582,035 bytes
Requests per second 4.91 [#/sec] (mean) 15.21 [#/sec] (mean)
Time per request 2035.405 [ms] (mean) 657.623 [ms] (mean)
Time per request(mean, across all concurrent requests)
203.541 [ms] 65.762 [ms]
Transfer rate 10.35 [KB/s] received 31.88 [KB/s] received
Memcached
History
“Developed by Danga Interactive for LiveJournal.com”
Memcached ?
• a distributed memory object caching system with hash table
Memcached ?
• a distributed memory object caching system with hash table
Memcached ?
• a distributed memory object caching system with hash table
• a generic two stage hashing system (clients and servers). Clients are written for specific application languages. Server is written in C
Memcached ?
• a distributed memory object caching system with hash table
• a generic two stage hashing system (clients and servers). Clients are written for specific application languages. Server is written in C
Memcached ?
• a distributed memory object caching system with hash table
• a generic two stage hashing system (clients and servers). Clients are written for specific application languages. Server is written in C
• 85% of top 20 sites use memcached; 50%+ of top 5k sites uses Memcached
Memcached ?
• a distributed memory object caching system with hash table
• a generic two stage hashing system (clients and servers). Clients are written for specific application languages. Server is written in C
• 85% of top 20 sites use memcached; 50%+ of top 5k sites uses Memcached
Why Memcached ?
• Scale-out– Machine– Process (Use different ports)
• Memory faster than Disk• Allows for efficient use of your database • Can utilize existing network
– Uses non-blocking network I/O (TCP/IP)• Very flexible• Client libraries in all major languages
Limits (c/Hash Table)
• Key : max 250 chars.• Values: max 1MB
“We use more than 800 servers supplying over 28 terabytes of memory to our users.”
“total throughput achieved is 300,000 UDP req/s”
by Paul Saab Saturday, December 13, 2008 at 2:43am
• 8-core machines• 20-30% CPU usage.• scale memcached to 8 threads on an 8-core system• moved to UDP for get operations to reduce network traffic
http://www.facebook.com/note.php?note_id=39391378919
Architecture practical ?
http://barry.files.wordpress.com/2007/04/new-servers-back-04-2007.jpg
Architecture practical ?
http://blog.thinkdiff.net/?p=419
“designing & implementing scalable applications with memcached and mysql”
Architecture practical ?
http://blog.thinkdiff.net/wp-content/uploads/2009/02/memcache_22-02-2009.png
Coding ? (in PHP)
/* OO API */$memcacheObj = new Memcache;$memcacheObj->connect('memcache_host', 11211);
/* set */$memcacheObj->set('key', 'data', MEMCACHE_COMPRESSED, 50);/ * get w/single key */$var = $memcacheObj->get('key');/ * get w/multiple key */$var = $memcacheObj->get(array('key1', 'key2'));
$memcacheObj->close();
CMS ?
• Drupal has Memcache API and Integrationhttp://drupal.org/project/memcache
• Wordpress has object cachehttp://mohanjith.net/blog/2008/10/using-memcached-with-wordpress-object-cache.html
code optimization is best
DiscussionQ&A
Ref.• Improving PHP Application Performance with APC
http://www.slideshare.net/vortexau/improving-php-application-performance-with-apc-presentation
• PHP Accelerators : APC vs Zend vs XCache with Zend Framework
http://blog.digitalstruct.com/2007/12/23/php-accelerators-apc-vs-zend-vs-xcache-with-zend-framework/
• Scaling with memcachedhttp://www.slideshare.net/acme/scaling-with-memcached
• Gear6 and Scaling Website Performance: Caching Session and Profile Data with Memcached
http://www.slideshare.net/gear6memcached/gear6-and-scaling-website-performance-caching-session-and-profile-data-with-memcached
Ref. (2)
• PHP: Memcache - Manualhttp://th.php.net/manual/en/book.memcache.php
• http://danga.com/memcached/• http://pecl.php.net/package/memcache• http://www.socialtext.net/memcached/
Thank you@FordAntiTrust
http://www.slideshare.net/FordAntiTrust