ݺߣ

ݺߣShare a Scribd company logo
Ako škálovať PHP 
stránky? Od malej stránky 
až po datacentrum 
Tomáš Srnka 
@tomassrnka
Tomáš Srnka
Codecon.sk - Ako škálovať PHP stránky? Od malej stránky až po datacentrum
myhappycat.com
Klasický webhosting 
3 EUR / mesačne 
1000 pageviews / denne 
Netreba žiadne extra znalosti 
Takmer nulové prispôsobenie prostredia
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
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
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
Codecon.sk - Ako škálovať PHP stránky? Od malej stránky až po datacentrum
Klasické distro
• Zlý časovač pre CPU čas 
• Veľmi zlý časovač pre IO 
• Filesystémy z ’90 rokov* 
• Network stack problematický (?) 
* BTRFS je nepoužiteľné
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
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
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
…späť k PHP
Čo spraví veľa ľܻí…
! 
# apt-get install php5 apache2  
libapache2-mod-php5 php5-mcrypt  
mysql-server 
! 
# service mysqld start 
# service apache2 start 
!
…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; 
! 
worker_rlimit_nofile 300000; 
! 
events { 
worker_connections 10240; 
multi_accept on; 
} 
! 
http { 
sendfile on; 
tcp_nodelay on; 
gzip on; 
}
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.
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
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
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 
• InnoDB: innodb_buffer_pool_size 
• slow log
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 { 
server_name example.com; 
! 
location / { 
proxy_pass http://cluster; 
} 
} 
balancer
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"
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 check 
server mariadb-2 mariadb-2:3306 check
MariaDB 
• Nepárny počet serverov 
• min. 50% online 
• Sync. Galera Replikácia, len InnoDB 
• Automatické rozkladanie záťaže a dát
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 
• veľmi tažko realizovateľné alebo pomalé 
• read only dáta (netreba zdielať) 
• treba upravovať aplikáciu
Aký max výkon môžem 
mať?
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
… alebo to mám za 2 kliky
Ďakujem za pozornosť 
! 
Otázky? 
@tomassrnka

More Related Content

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

  • 1. Ako škálovať PHP stránky? Od malej stránky až po datacentrum Tomáš Srnka @tomassrnka
  • 5. Klasický webhosting 3 EUR / mesačne 1000 pageviews / denne Netreba žiadne extra znalosti Takmer nulové prispôsobenie prostredia
  • 6. 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
  • 7. 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
  • 8. Dedikovaný server 8x 16 cores Intel XEON 1024GB of RAM 24x Intel SSD 2x 10GE
  • 9. Server Údržba servera Backups Monitoring Security audit Performance optimalizácie SPOF ….
  • 13. • Zlý časovač pre CPU čas • Veľmi zlý časovač pre IO • Filesystémy z ’90 rokov* • Network stack problematický (?) * BTRFS je nepoužiteľné
  • 14. 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
  • 18. 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
  • 20. Čo spraví veľa ľܻí…
  • 21. ! # apt-get install php5 apache2 libapache2-mod-php5 php5-mcrypt mysql-server ! # service mysqld start # service apache2 start !
  • 23. Ako na to • Vymeniť mod_php za php-fpm • Ak je to možné, vymeniť Apache za nginX • upraviť my.cnf pre databázu
  • 24. 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; }
  • 25. 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.
  • 26. 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
  • 27. 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
  • 28. Zmenou PHP VM resp. verzie bez zmeny riadku PHP kódu 25 req/s 7,12x 178 req/s
  • 29. 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
  • 30. Ja mam naozaj veľkú navštevnosť
  • 31. Rozdeliť služby na viac serverov Browser nginX PHP-FPM MariaDB
  • 34. Prečo? • Vyšší výkon (neobmedzený?) • Vyššia dostupnosť
  • 35. Browser balancer MariaDB balancer webserver webserver … webserver DB balancer DB balancer MariaDB … MariaDB
  • 36. 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
  • 37. 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"
  • 39. Browser balancer MariaDB balancer webserver webserver … webserver DB balancer DB balancer MariaDB … MariaDB
  • 40. 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
  • 41. MariaDB • Nepárny počet serverov • min. 50% online • Sync. Galera Replikácia, len InnoDB • Automatické rozkladanie záťaže a dát
  • 42. Na niečo sme zabudli
  • 43. Browser balancer MariaDB balancer webserver webserver … webserver DB balancer DB balancer MariaDB … MariaDB
  • 44. 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
  • 45. Aký max výkon môžem mať?
  • 48. … alebo to mám za 2 kliky
  • 49. Ďakujem za pozornosť ! Otázky? @tomassrnka