etes vous prêts pour le succes ?

32
êtes-vous prêts pour le succès ?

Upload: steven-van-poeck

Post on 07-Jul-2015

1.107 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Etes vous prêts pour le succes ?

êtes-vous prêts pour le succès ?

Page 2: Etes vous prêts pour le succes ?

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

Page 3: Etes vous prêts pour le succes ?

should i stay or should i go* ?

* the clash, 1981

Page 4: Etes vous prêts pour le succes ?

le début

Page 5: Etes vous prêts pour le succes ?

quelques utilisateurs

Coût :

Apache 2.2.16 + mod PHP 5.3.3 +

MySQL 5.1.49

Performance :Disponibilité :

Page 6: Etes vous prêts pour le succes ?

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

Page 7: Etes vous prêts pour le succes ?

un peu plus d'utilisateurs

Coût :

Apache 2.2.16 + mod PHP 5.3.3 +

MySQL 5.1.49

Performance :Disponibilité :

Page 8: Etes vous prêts pour le succes ?

un peu plus d'utilisateurs

Apache 2.2.16 + mod PHP 5.3.3 +

MySQL 5.1.49

Coût :

Performance :Disponibilité :

Page 9: Etes vous prêts pour le succes ?

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

Page 10: Etes vous prêts pour le succes ?

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

Page 11: Etes vous prêts pour le succes ?

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

Page 12: Etes vous prêts pour le succes ?

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

Page 13: Etes vous prêts pour le succes ?

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

Page 14: Etes vous prêts pour le succes ?

encore plus d'utilisateurs

Coût :

Performance :Disponibilité :

Page 15: Etes vous prêts pour le succes ?

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

Page 16: Etes vous prêts pour le succes ?

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

}

Page 17: Etes vous prêts pour le succes ?

encore plus d'utilisateurs

memcache

Coût :

Performance :Disponibilité :

Page 18: Etes vous prêts pour le succes ?

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

Page 19: Etes vous prêts pour le succes ?

toujours plus d'utilisateurs

Coût :

Performance :Disponibilité :

Page 20: Etes vous prêts pour le succes ?

toujours plus d'utilisateurs

Coût :

Performance :Disponibilité :

Page 21: Etes vous prêts pour le succes ?

solutionsajout de serveurs frontaux

load balancer

sharding pour la base de données

failover pour les MySQL

Page 22: Etes vous prêts pour le succes ?

toujours plus d'utilisateurs

1

3

2

sharding

1

3

2

LoadBalancer

Coût :

Performance :Disponibilité :

failover

Page 23: Etes vous prêts pour le succes ?

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

Page 24: Etes vous prêts pour le succes ?

le succès est au rendez-vous !

1

3

2

1

3

2

Coût :

Performance :Disponibilité :

Page 25: Etes vous prêts pour le succes ?

le succès est au rendez-vous !

1

3

2

Coût :

Performance :Disponibilité :

1

3

2

Page 26: Etes vous prêts pour le succes ?

solutionsperfomances & disponibilité

HTTP caching (Varnish, Squid, Nginx…)

content distribution network (CDN)

Page 27: Etes vous prêts pour le succes ?

le succès est au rendez-vous !

CDN

HTTP cache1

3

2

1

3

2

Coût :

Performance :Disponibilité :

Page 28: Etes vous prêts pour le succes ?

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

Page 29: Etes vous prêts pour le succes ?

mais encore ?

Page 30: Etes vous prêts pour le succes ?

noSQLMongoDb : http://www.mongodb.org/

CouchDb : http://couchdb.apache.org/

CouchBase : http://www.couchbase.org/

...

ze nuage (Amazon, Azure, Eucalyptus, Google apps...)

Page 31: Etes vous prêts pour le succes ?

questions ?

Page 32: Etes vous prêts pour le succes ?

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 :