Upload
steven-van-poeck
View
1.107
Download
2
Embed Size (px)
Citation preview
êtes-vous prêts pour le succès ?
Huh !? Qui ça ?
Steven VAN POECK
autodidacte, 12 ans de PHP, entre autres
s t e v e n v a n p o e c k
h t t p : //jo in d . in /4 3 5 2
should i stay or should i go* ?
* the clash, 1981
le début
quelques utilisateurs
Coût :
Apache 2.2.16 + mod PHP 5.3.3 +
MySQL 5.1.49
Performance :Disponibilité :
0
50
100
150
200
250
0
2
4
6
8
10
Resp Time (secs) OKAY Failed
Resp time# requests
# Concurrent requests
Max connexions simultanées : 9 ~4 500 utilisateurs
un peu plus d'utilisateurs
Coût :
Apache 2.2.16 + mod PHP 5.3.3 +
MySQL 5.1.49
Performance :Disponibilité :
un peu plus d'utilisateurs
Apache 2.2.16 + mod PHP 5.3.3 +
MySQL 5.1.49
Coût :
Performance :Disponibilité :
solutionsutilisez les dernières versions stables des briques
logicielles
distribution de charges : séparation serveur web / db
côté disponibilité : FastCGI pour PHP
côté ressources : nginx
tuning serveur Web (Nginx)
worker_processes → 1 par CPU mais plus de 4 est inutile
worker_connections → 2048
solutions (suite)tuning PHP
cache op-code PHP (APC, eAccelerator, Zend Server)
utilisez la dernière version majeure stable !
template caching (ex : Smarty)
compilation « maison » sans extensions inutilisées
always_populate_raw_post_data = Off (utilisez php://input)
max_execution_time → le plus petit possible
memory_limit → adapté à vos scripts
realpath_cache_size → plus si beaucoup de fichiers
realpath_cache_ttl → le plus élevé possible
un peu plus d'utilisateurs
MySQL 5.5.16
Nginx 1.0.8 + F a s t CGI PHP 5.3.8
Coût :
Performance :Disponibilité :
0
200
400
600
800
1000
1200
0
2
4
6
8
10
12
Resp Time (secs) OKAY Failed
# requests Resp time
# Concurrent requests
Max connexions simultanées : 27 ~13 000 utilisateurs
encore plus d'utilisateurs
MySQL 5.5.16
Nginx 1.0.8 + F a s t CGI PHP 5.3.8
Coût :
Performance :Disponibilité :
encore plus d'utilisateurs
Coût :
Performance :Disponibilité :
solutionsajout de RAM sur le serveur MySQL
tuning MySQL
utilisez InnoDB (rowlock)
connection_timeout → le plus bas possible
skip_name_resolve = 1 → réduction appels réseau
log = /dev/null → réduction I/O
slow_query_log = 1 → surveillance
cache résultats brutes des requêtes
solution ad-hoc dans le code
exemple solution ad-hoc dans le code :p u b l i c f u n c t i o n q u e r y( $s q l ) {
s t at i c $q Cac h e = ar r ay( ) ; // St o c k age
$q S i g = md 5( $s q l ) ; // Cl e u n i q u e p o u r l a
r e q u e t e
// On r e t o u r n e l e r e s u l t at d i r e c t e me n t
i f ( ar r ay_ k e y_ e x i s t s ( $q S i g , $q Cac h e ) ) {
r e t u r n $q Cac h e [ $q S i g] ;
}
$r s = $t h i s - > d b - > q u e r y( $s q l ) ; // Re q u e t e
e n b as e
$q Cac h e [ $q S i g] = $r s ; // Mi s e e n c ac h e
r e t u r n $r s ; // On r e t o u r n e l e r e s u l t at
}
encore plus d'utilisateurs
memcache
Coût :
Performance :Disponibilité :
0
200
400
600
800
1000
1200
0
2
4
6
8
10
12
Resp Time (secs) OKAY Failed
# requests Resp time
# Concurrent requests
Max connexions simultanées : 45 ~22 000 utilisateurs
toujours plus d'utilisateurs
Coût :
Performance :Disponibilité :
toujours plus d'utilisateurs
Coût :
Performance :Disponibilité :
solutionsajout de serveurs frontaux
load balancer
sharding pour la base de données
failover pour les MySQL
toujours plus d'utilisateurs
1
3
2
sharding
1
3
2
LoadBalancer
Coût :
Performance :Disponibilité :
failover
5 10 25 50 75 100 125 150 175 200 2250
500
1000
1500
2000
2500
3000
0
2
4
6
8
10
12
Resp Time OKAY Failed
# requests Resp time
# Concurrent requests
Max connexions simultanées : 110 ~50 000 utilisateurs
le succès est au rendez-vous !
1
3
2
1
3
2
Coût :
Performance :Disponibilité :
le succès est au rendez-vous !
1
3
2
Coût :
Performance :Disponibilité :
1
3
2
solutionsperfomances & disponibilité
HTTP caching (Varnish, Squid, Nginx…)
content distribution network (CDN)
le succès est au rendez-vous !
CDN
HTTP cache1
3
2
1
3
2
Coût :
Performance :Disponibilité :
5 10 25 50 75 100 125 150 175 200 225 250 275 300 325 350 3750
1000
2000
3000
4000
5000
6000
0
4
8
12
16
20
24
Resp Time OKAY Failed
# requests Resp time
# Concurrent requests
Max connexions simultanées : 175 ~85 000 utilisateurs
mais encore ?
noSQLMongoDb : http://www.mongodb.org/
CouchDb : http://couchdb.apache.org/
CouchBase : http://www.couchbase.org/
...
ze nuage (Amazon, Azure, Eucalyptus, Google apps...)
questions ?
Références:Dernières versions briques logicielles
Debian : http://dotdeb.org
PHP : http://www.php.net
Tuning PHP / Nginx :
http://blog.martinfjordvald.com/2011/04/optimizing-nginx-for-high-traffic-loads/
http://php.net/manual/en/ini.core.php
http://talks.php.net/show/perf_tunning
http://phplens.com/lens/adodb/docs-adodb.htm#memcache
Load balancing : http://en.wikipedia.org/wiki/Load_balancing_(computing)
Optimisation MySQL : http://www.slideshare.net/ligaya/dpc-tutorial
Sharding : http://en.wikipedia.org/wiki/Shard_(database_architecture)
Failover : http://en.wikipedia.org/wiki/Failover
Memcached : http://memcached.org/
CDN : http://en.wikipedia.org/wiki/Content_delivery_network
HTTP cache :