codecon.sk - ako škálovať php stránky? od malej stránky až po datacentrum

49
Ako škálovať PHP stránky? Od malej stránky až po datacentrum Tomáš Srnka @tomassrnka

Upload: tomas-srnka

Post on 11-Jul-2015

696 views

Category:

Technology


2 download

TRANSCRIPT

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

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

Tomáš Srnka

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

myhappycat.com

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

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

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

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

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

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

SoftwareOperačný systém

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

Klasické distro

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

• 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

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
Page 16: Codecon.sk - Ako škálovať PHP stránky? Od malej stránky až po datacentrum
Page 17: Codecon.sk - Ako škálovať PHP stránky? Od malej stránky až po datacentrum
Page 18: 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

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

…späť k PHP

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

Čo spraví veľa ľudí…

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

!# 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

…a kde končia

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

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

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

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

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

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

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

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

Ja mam naozaj veľkú navštevnosť

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

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

Nechcem SPOF...

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

Clustering

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

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

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

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

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

webserver

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

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

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

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

Na niečo sme zabudli

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

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

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

Aký max výkon môžem mať?

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

… alebo to mám za 2 kliky

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

Ďakujem za pozornosť !

Otázky?

@tomassrnka