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