etes vous prêts pour le succes ?

Post on 07-Jul-2015

1.107 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

ê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 :

top related