DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

61

description

Dutch PHP Conference 2007

Transcript of DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Page 1: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)
Page 2: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Sander van de GraafIDG Nederland

Page 3: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Web 2.0

Page 4: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Topics

• Webwereld / Zoom

• Bottlenecks

• PHP

• MySQL

• Apache

• Caching

• Vragen

Page 5: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Webwereld / Zoom

Page 6: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)
Page 7: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Webwereld

• 4,5 miljoen pageviews per maand

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 8: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Webwereld

• 4,5 miljoen pageviews per maand

• 99% dynamisch

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 9: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Webwereld

• 4,5 miljoen pageviews per maand

• 99% dynamisch

• Virtualhost

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 10: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Webwereld

• 4,5 miljoen pageviews per maand

• 99% dynamisch

• Virtualhost

• PHP 4

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 11: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Webwereld

• 4,5 miljoen pageviews per maand

• 99% dynamisch

• Virtualhost

• PHP 4

• scripts

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 12: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Webwereld

• 4,5 miljoen pageviews per maand

• 99% dynamisch

• Virtualhost

• PHP 4

• scripts

• Smarty

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 13: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)
Page 14: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Zoom.nl

• 5+ miljoen pageviews

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 15: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Zoom.nl

• 5+ miljoen pageviews

• 100% dynamisch

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 16: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Zoom.nl

• 5+ miljoen pageviews

• 100% dynamisch

• 2 webservers

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 17: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Zoom.nl

• 5+ miljoen pageviews

• 100% dynamisch

• 2 webservers

• 3,8TB data

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 18: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Zoom.nl

• 5+ miljoen pageviews

• 100% dynamisch

• 2 webservers

• 3,8TB data

• ImageMagick ipv GD

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 19: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Zoom.nl

• 5+ miljoen pageviews

• 100% dynamisch

• 2 webservers

• 3,8TB data

• ImageMagick ipv GD

• Smarty

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 20: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Bottlenecks

Page 21: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Bottlenecks

• Applicatie

• Database

• NAS

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 22: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

PHP

Page 23: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

PHP

• Optimalisaties

• APD

• Intermediate Code Caching

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 24: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Optimalisaties

for($foo=0;$foo<count($bar);$foo++)

{

// do something

}

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 25: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Optimalisaties

$barCount = count($bar);

for($foo=0;$foo<$barCount;++$foo)

{

// do something

}

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 26: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

APD

PProf

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 27: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

APD

apd_set_pprof_trace();

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 28: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 29: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Intermediate code caching

• eAccelerator

• Zend Optimizer

• APC

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 30: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

MySQL

Page 31: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

MySQL

• Background

• Optimalisaties

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 32: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Background

• MySQL 4.1.10

• 2 database servers

• MyISAM

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 33: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Optimalisaties• Valkuilen

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 34: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

ORDER BY RAND()

SELECT * FROM images ORDER BY RAND() LIMIT 10;

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 35: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

ORDER BY RAND()

SELECT * FROM images

WHERE id IN (1243,34234,2341,135465,123,653);

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 36: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

WHERE 1

SELECT * FROM images WHERE 1 ORDER BY id DESC LIMIT 10;

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 37: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

WHERE 1

SELECT * FROM images ORDER BY id DESC LIMIT 10;

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 38: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Optimalisaties• Valkuilen

• Indexes

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 39: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Force Index

SELECT * FROM images FORCE INDEX(user_id)

WHERE user_id = “12”

ORDER BY created_on DESC

LIMIT 10

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 40: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Optimalisaties• Valkuilen

• Indexes

• EXPLAIN

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 41: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

EXPLAIN SELECT * FROM images LIMIT 10;

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 42: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

EXPLAIN SELECT * FROM images LIMIT 10;

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 43: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

EXPLAIN SELECT I.* FROM images I, zoom_profile.users U WHERE I.user_id = U.id AND I.user_id = 1244 LIMIT 10;

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 44: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Optimalisaties• Valkuilen

• Indexes

• EXPLAIN

• Connection types

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 45: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Optimalisaties• Valkuilen

• Indexes

• EXPLAIN

• Connection types

• Table optimalisaties

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 46: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Optimalisaties• Valkuilen

• Indexes

• EXPLAIN

• Connection types

• Table optimalisaties

• PROCESSLIST

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 47: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Optimalisaties• Valkuilen

• Indexes

• EXPLAIN

• Connection types

• Table optimalisaties

• PROCESSLIST

• MTOP

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 48: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Optimalisaties• Valkuilen

• Indexes

• EXPLAIN

• Connection types

• Table optimalisaties

• PROCESSLIST

• MTOP

• SLOW Query LogWebwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 49: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Optimalisaties• Valkuilen

• Indexes

• EXPLAIN

• Connection types

• Table optimalisaties

• PROCESSLIST

• MTOP

• SLOW Query Log

• De-normalisatieWebwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 50: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Apache

Page 51: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Apache

• Apache 2.0

• htaccess

• mod_expires

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 52: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

.htaccess

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} ^.*public_images.*$

RewriteRule ^public_images/([0-9]*)/([0-9]*)/(.*)$

/do_some_magic_stuff.php?user_id=$1&width=$2&filename=$

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 53: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

.htaccess

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} ^.*public_images.*$

RewriteRule ^public_images/([0-9]*)/([0-9]*)/(.*)$

/do_some_magic_stuff.php?user_id=$1&width=$2&filename=$

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 54: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

mod_expires

<IfModule mod_expires.c> ExpiresActive ON ExpiresByType image/gif "now plus 1 week" ExpiresByType image/png "now plus 1 week" ExpiresByType image/jpeg "now plus 1 week" ExpiresByType text/css "now plus 15 minute" ExpiresByType application/x-javascript "now plus 15 min" ExpiresDefault "now" </IfModule>

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 55: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Caching

Page 56: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Caching

• (intermediate) Code Caching

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 57: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Caching

• (intermediate) Code Caching

• Page caching

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 58: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Caching

• (intermediate) Code Caching

• Page caching

• Fragment caching

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 59: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Caching

• (intermediate) Code Caching

• Page caching

• Fragment caching

• Object caching

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 60: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Caching

• (intermediate) Code Caching

• Page caching

• Fragment caching

• Object caching

• Content caching

Webwereld / ZoomBottlenecks

PHPMySQLApache

CachingVragen

Page 61: DPC2007 Case Study Zoom & Webwereld (Sander vd Graaf)

Vragen?