O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.
Ako škálovať PHP 
stránky? Od malej stránky 
až po datacentrum 
Tomáš Srnka 
@tomassrnka
Tomáš Srnka
myhappycat.com
Klasický webhosting 
3 EUR / mesačne 
1000 pageviews / denne 
Netreba žiadne extra znalosti 
Takmer nulové prispôsobenie p...
Virtual Server 
5 - 100 EUR / mesačne 
1000 - 20k pageviews / denne 
Vyhradené(?) CPU,RAM,IO 
Základné znalosti sysadmina!...
Dedikovaný server 
100-2000 EUR / mesačne 
20-200k pageviews / denne 
Dedikované CPU,RAM,IO 
Vyžaduje o niečo lepšie znalo...
Dedikovaný server 
8x 16 cores Intel XEON 
1024GB of RAM 
24x Intel SSD 
2x 10GE
Server 
Údržba servera 
Backups 
Monitoring 
Security audit 
Performance optimalizácie 
SPOF 
….
Software 
Operačný systém
Klasické distro
• Zlý časovač pre CPU čas 
• Veľmi zlý časovač pre IO 
• Filesystémy z ’90 rokov* 
• Network stack problematický (?) 
* BT...
Solaris a FreeBSD 
• Veľmi málo rozšírené 
• Slabý userspace a testovanie 
• Skoro nik nepoužíva pre PHP 
• Avšak majú ZFS...
Na začiatok… 
• Každá služba (a jej jednotka) má svoj kontajner 
• Lepší scheduler 
• Lepší IO scheduler pre SSD 
• ZFS pr...
…späť k PHP
Čo spraví veľa ľudí…
! 
# apt-get install php5 apache2  
libapache2-mod-php5 php5-mcrypt  
mysql-server 
! 
# service mysqld start 
# service a...
…a kde končia
Ako na to 
• Vymeniť mod_php za php-fpm 
• Ak je to možné, vymeniť Apache za 
nginX 
• upraviť my.cnf pre databázu
nginx 
worker_processes 12; # number of cores / 2 
! 
error_log /var/log/nginx/error.log; 
pid /var/run/nginx.pid; 
! 
wor...
PHP-FPM 
• Sessions presunúť do memcached 
• Nastaviť PHP-FPM na static, 2x počet jadier 
• Lifetime procesu cca 1000 requ...
Fannkuch 
• Hrubá vypočetná sila, generovanie permutacií 
Sekundy 
4000 
3000 
2000 
1000 
0 
PHP 5.3 
PHP 5.4 
PHP 5.5 
P...
Requests per second 
Wordpress - benchmark 
180 
135 
90 
45 
0 
PHP 5.3 
PHP 5.3-APC 
PHP 5.4 
PHP 5.5-OpCache 
PHP 5.6-O...
Zmenou PHP VM resp. verzie 
bez zmeny riadku PHP kódu 
25 req/s 7,12x 178 req/s
MySQL 
• Defaultné hodnoty po čase prestanú stačiť 
• Zakladné 2 hodnoty kam sa pozrieť: 
• MyISAM: key_buffer_size 
• Inn...
Ja mam naozaj veľkú 
navštevnosť
Rozdeliť služby na viac 
serverov 
Browser nginX PHP-FPM MariaDB
Nechcem SPOF...
Clustering
Prečo? 
• Vyšší výkon (neobmedzený?) 
• Vyššia dostupnosť
Browser 
balancer 
MariaDB 
balancer 
webserver webserver … webserver 
DB balancer DB balancer 
MariaDB … MariaDB
upstream cluster { 
ip_hash; 
server srv1.example.com; 
server srv2.example.com; 
server srv3.example.com; 
} 
! 
server {...
balancer 
webserver 
/etc/php.d/php.ini: 
session.save_handler=memcache 
session.save_path="tcp://BALANCER1:11211? 
persis...
webserver
Browser 
balancer 
MariaDB 
balancer 
webserver webserver … webserver 
DB balancer DB balancer 
MariaDB … MariaDB
DB balancer 
listen mariadb-cluster 
bind 0.0.0.0:3306 
mode tcp 
balance roundrobin 
server mariadb-1 mariadb-1:3306 chec...
MariaDB 
• Nepárny počet serverov 
• min. 50% online 
• Sync. Galera Replikácia, len InnoDB 
• Automatické rozkladanie záť...
Na niečo sme zabudli
Browser 
balancer 
MariaDB 
balancer 
webserver webserver … webserver 
DB balancer DB balancer 
MariaDB … MariaDB
Web a jeho dáta 
• centrálne úložisko (SAN alebo NAS) 
• znovu SPOF, zväčša pomalé 
• distribuované zdieľané úložisko 
• v...
Aký max výkon môžem 
mať?
… alebo to mám za 2 kliky
Ďakujem za pozornosť 
! 
Otázky? 
@tomassrnka
Codecon.sk - Ako škálovať PHP stránky? Od malej stránky až po datacentrum
Codecon.sk - Ako škálovať PHP stránky? Od malej stránky až po datacentrum
Codecon.sk - Ako škálovať PHP stránky? Od malej stránky až po datacentrum
Codecon.sk - Ako škálovať PHP stránky? Od malej stránky až po datacentrum
Codecon.sk - Ako škálovať PHP stránky? Od malej stránky až po datacentrum
Codecon.sk - Ako škálovať PHP stránky? Od malej stránky až po datacentrum
Codecon.sk - Ako škálovať PHP stránky? Od malej stránky až po datacentrum
Próximos SlideShares
Carregando em…5
×

Codecon.sk - Ako škálovať PHP stránky? Od malej stránky až po datacentrum

1.279 visualizações

Publicada em

Ako škálovať PHP stránky? Od malej stránky až po datacentrum.

Základný prehľad technológií pre škálovanie PHP v clusteroch.

Publicada em: Tecnologia
  • Seja o primeiro a comentar

Codecon.sk - Ako škálovať PHP stránky? Od malej stránky až po datacentrum

  1. 1. Ako škálovať PHP stránky? Od malej stránky až po datacentrum Tomáš Srnka @tomassrnka
  2. 2. Tomáš Srnka
  3. 3. myhappycat.com
  4. 4. Klasický webhosting 3 EUR / mesačne 1000 pageviews / denne Netreba žiadne extra znalosti Takmer nulové prispôsobenie prostredia
  5. 5. Virtual Server 5 - 100 EUR / mesačne 1000 - 20k pageviews / denne Vyhradené(?) CPU,RAM,IO Základné znalosti sysadmina! Prispôsobiteľné pre vlastné potreby Vyššia cena Vlastná cena
  6. 6. Dedikovaný server 100-2000 EUR / mesačne 20-200k pageviews / denne Dedikované CPU,RAM,IO Vyžaduje o niečo lepšie znalosti ako pri virt. serveri! Dedikovaný výkon Hardvér je prispôsobiteľný presne na mieru Vysoká cena Vlastná zodpovesnosť aj za HW
  7. 7. Dedikovaný server 8x 16 cores Intel XEON 1024GB of RAM 24x Intel SSD 2x 10GE
  8. 8. Server Údržba servera Backups Monitoring Security audit Performance optimalizácie SPOF ….
  9. 9. Software Operačný systém
  10. 10. Klasické distro
  11. 11. • Zlý časovač pre CPU čas • Veľmi zlý časovač pre IO • Filesystémy z ’90 rokov* • Network stack problematický (?) * BTRFS je nepoužiteľné
  12. 12. Solaris a FreeBSD • Veľmi málo rozšírené • Slabý userspace a testovanie • Skoro nik nepoužíva pre PHP • Avšak majú ZFS, lepšie časovače a aj network stack
  13. 13. Na začiatok… • Každá služba (a jej jednotka) má svoj kontajner • Lepší scheduler • Lepší IO scheduler pre SSD • ZFS pre… všetko okrem host OS
  14. 14. …späť k PHP
  15. 15. Čo spraví veľa ľudí…
  16. 16. ! # apt-get install php5 apache2 libapache2-mod-php5 php5-mcrypt mysql-server ! # service mysqld start # service apache2 start !
  17. 17. …a kde končia
  18. 18. Ako na to • Vymeniť mod_php za php-fpm • Ak je to možné, vymeniť Apache za nginX • upraviť my.cnf pre databázu
  19. 19. nginx worker_processes 12; # number of cores / 2 ! error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; ! worker_rlimit_nofile 300000; ! events { worker_connections 10240; multi_accept on; } ! http { sendfile on; tcp_nodelay on; gzip on; }
  20. 20. PHP-FPM • Sessions presunúť do memcached • Nastaviť PHP-FPM na static, 2x počet jadier • Lifetime procesu cca 1000 requests • Zrušiť APC a nahradiť OPCache • Zrušiť zápisy na disk z PHP aplikácie • Disk nie je cache. Naozaj.
  21. 21. Fannkuch • Hrubá vypočetná sila, generovanie permutacií Sekundy 4000 3000 2000 1000 0 PHP 5.3 PHP 5.4 PHP 5.5 PHP 5.6-dev HHVM HippyVM Menej je lepšie
  22. 22. Requests per second Wordpress - benchmark 180 135 90 45 0 PHP 5.3 PHP 5.3-APC PHP 5.4 PHP 5.5-OpCache PHP 5.6-OpCache HHVM Viac je lepšie
  23. 23. Zmenou PHP VM resp. verzie bez zmeny riadku PHP kódu 25 req/s 7,12x 178 req/s
  24. 24. MySQL • Defaultné hodnoty po čase prestanú stačiť • Zakladné 2 hodnoty kam sa pozrieť: • MyISAM: key_buffer_size • InnoDB: innodb_buffer_pool_size • slow log
  25. 25. Ja mam naozaj veľkú navštevnosť
  26. 26. Rozdeliť služby na viac serverov Browser nginX PHP-FPM MariaDB
  27. 27. Nechcem SPOF...
  28. 28. Clustering
  29. 29. Prečo? • Vyšší výkon (neobmedzený?) • Vyššia dostupnosť
  30. 30. Browser balancer MariaDB balancer webserver webserver … webserver DB balancer DB balancer MariaDB … MariaDB
  31. 31. upstream cluster { ip_hash; server srv1.example.com; server srv2.example.com; server srv3.example.com; } ! server { server_name example.com; ! location / { proxy_pass http://cluster; } } balancer
  32. 32. balancer webserver /etc/php.d/php.ini: session.save_handler=memcache session.save_path="tcp://BALANCER1:11211? persistent=1&weight=1&timeout=1&retry_interval=15"
  33. 33. webserver
  34. 34. Browser balancer MariaDB balancer webserver webserver … webserver DB balancer DB balancer MariaDB … MariaDB
  35. 35. DB balancer listen mariadb-cluster bind 0.0.0.0:3306 mode tcp balance roundrobin server mariadb-1 mariadb-1:3306 check server mariadb-2 mariadb-2:3306 check
  36. 36. MariaDB • Nepárny počet serverov • min. 50% online • Sync. Galera Replikácia, len InnoDB • Automatické rozkladanie záťaže a dát
  37. 37. Na niečo sme zabudli
  38. 38. Browser balancer MariaDB balancer webserver webserver … webserver DB balancer DB balancer MariaDB … MariaDB
  39. 39. Web a jeho dáta • centrálne úložisko (SAN alebo NAS) • znovu SPOF, zväčša pomalé • distribuované zdieľané úložisko • veľmi tažko realizovateľné alebo pomalé • read only dáta (netreba zdielať) • treba upravovať aplikáciu
  40. 40. Aký max výkon môžem mať?
  41. 41. … alebo to mám za 2 kliky
  42. 42. Ďakujem za pozornosť ! Otázky? @tomassrnka

×