codecon.sk - ako škálovať php stránky? od malej stránky až po datacentrum
TRANSCRIPT
Ako škálovať PHP stránky? Od malej stránky
až po datacentrumTomáš Srnka @tomassrnka
Tomáš Srnka
myhappycat.com
Klasický webhosting
3 EUR / mesačne 1000 pageviews / denne
Netreba žiadne extra znalosti Takmer nulové prispôsobenie prostredia
Virtual Server5 - 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ý server100-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ý server8x 16 cores Intel XEON
1024GB of RAM 24x Intel SSD
2x 10GE
Server
Údržba servera Backups
Monitoring Security audit
Performance optimalizácie SPOF
….
SoftwareOperačný systém
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
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 ľudí…
!# 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
nginxworker_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í
Seku
ndy
0
1000
2000
3000
4000
PHP 5.3PHP 5.4PHP 5.5PHP 5.6-devHHVMHippyVM
Menej je lepšie
Requ
ests
per
sec
ond
0
45
90
135
180
PHP 5.3PHP 5.3-APCPHP 5.4PHP 5.5-OpCachePHP 5.6-OpCacheHHVM
Wordpress - benchmark
Viac je lepšie
Zmenou PHP VM resp. verzie bez zmeny riadku PHP kódu
25 req/s 178 req/s7,12x
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 …
MariaDB MariaDB…
DB balancer DB balancer
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
session.save_handler=memcache session.save_path="tcp://BALANCER1:11211?persistent=1&weight=1&timeout=1&retry_interval=15"
/etc/php.d/php.ini:
webserver
webserver
Browser
balancer
MariaDB
balancer
webserver webserver webserver …
MariaDB MariaDB…
DB balancer DB balancer
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 …
MariaDB MariaDB…
DB balancer DB balancer
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ť?
… alebo to mám za 2 kliky
Ďakujem za pozornosť !
Otázky?
@tomassrnka