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

Preview:

Citation preview

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