Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Skalowanie aplikacji PHP
Search
Leszek Krupiński
September 27, 2014
Programming
1
400
Skalowanie aplikacji PHP
Leszek Krupiński
September 27, 2014
Tweet
Share
More Decks by Leszek Krupiński
See All by Leszek Krupiński
So that the daemon won’t die
leafnode
2
390
Practical PHP7
leafnode
2
450
Dobrze posól swoje hasło
leafnode
0
98
Dobrze posól swoje hasło (z notatkami)
leafnode
0
86
PHPNG kontra HHVM
leafnode
0
96
PHPNG kontra HHVM (z notatkami)
leafnode
0
59
Ewolucja PHP: PHP 5.6, NG, PHP 7, HHVM
leafnode
2
290
Sculpin - Generowanie statycznych stron w PHP
leafnode
2
54
Varnish to the Rescue
leafnode
0
120
Other Decks in Programming
See All in Programming
マッチングアプリにおけるフリックUIで苦労したこと
yuheiito
0
180
Composerが「依存解決」のためにどんな工夫をしているか #phpcon
o0h
PRO
1
340
はじめてのWeb API体験 ー 飲食店検索アプリを作ろうー
akinko_0915
0
140
MDN Web Docs に日本語翻訳でコントリビュートしたくなる
ohmori_yusuke
1
130
ペアプロ × 生成AI 現場での実践と課題について / generative-ai-in-pair-programming
codmoninc
2
21k
Rails Frontend Evolution: It Was a Setup All Along
skryukov
0
260
TypeScriptでDXを上げろ! Hono編
yusukebe
3
740
Model Pollution
hschwentner
1
160
フロントエンドのパフォーマンスチューニング
koukimiura
5
2k
The Niche of CDK Grant オブジェクトって何者?/the-niche-of-cdk-what-isgrant-object
hassaku63
1
590
AIと”コードの評価関数”を共有する / Share the "code evaluation function" with AI
euglena1215
1
180
システム成長を止めない!本番無停止テーブル移行の全貌
sakawe_ee
1
330
Featured
See All Featured
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.5k
4 Signs Your Business is Dying
shpigford
184
22k
Optimising Largest Contentful Paint
csswizardry
37
3.3k
Building Adaptive Systems
keathley
43
2.7k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.8k
A designer walks into a library…
pauljervisheath
207
24k
How to Ace a Technical Interview
jacobian
278
23k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
KATA
mclloyd
30
14k
Balancing Empowerment & Direction
lara
1
450
A Tale of Four Properties
chriscoyier
160
23k
Transcript
SKALOWANIE APLIKACJI PHP Leszek Krupiński, PHPCon 2014
LEAFNODE
CO TO JEST SKALOWALNOŚĆ?
— WIKIPEDIA Skalowalność (ang. scalability) - zapewnienie coraz wydajniejszej pracy
w miarę zwiększania liczby elementów składowych.
SKALOWANIE WERTYKALNE
SKALOWANIE HORYZONTALNE
PO CO DBAĆ O SKALOWALNOŚĆ?
ZADOWOLENIE KLIENTA
bit.ly/slowwebspeed
None
None
JAKIE SĄ KRYTYCZNE WARTOŚCI?
None
None
WYMIERNE KORZYŚCI
15,4% WIĘCEJ POBRAŃ FIREFOKSA PO PRZYSPIESZENIU STRONY MOZILLI O 2,2s
14% WIĘCEJ WPŁAT NA KAMPANIĘ BARACKA OBAMY PO PRZYSPIESZENIU STRONY
ZGŁOSZENIOWEJ O 60%
WYLICZENIA WALMARTU I AMAZONU: ZYSKI WIĘKSZE O 1% ZA KAŻDE
100ms
WYLICZENIA YAHOO: 9% WIĘCEJ RUCHU W SERWISIE ZA KAŻDE 400ms
PODSTAWY
HTTP REQUEST
None
None
None
SKOCZĘ JESZCZE PO WARZYWA
CO MOŻNA ZROBIĆ?
• SZYBSZA OBSŁUGA KLIENTA • WIĘCEJ KAS • KOLEJNE SKLEPY
KUPMY WIĘKSZY SERWER
KUPMY WIĘCEJ SERWERÓW
BEZ ODPOWIEDNIEJ ARCHITEKTURY NIE MA TO SENSU
BYĆ MOŻE WYSTARCZY OPTYALIZACJA APLIKACJI
WYCIŚNIĘCIE MAKSIMUM Z MOŻLIWOŚCI MASZYNY
OPTYMALIZUJ ISTOTNE FRAGMENTY KODU
— Donald Knuth Premature optimization is the root of all
evil.
UPEWNIJ SIĘ, ŻE TO NA PEWNO PHP JEST WINNE
NARZĘDZIA
xdebug + cachegrind
None
XHProf
None
New Relic
NEWRELIC POKAŻE KTÓRE KOMPONENTY DOMINUJĄ OBCIĄŻENIE
METRYKI
None
STATSD
None
MIN, MAX, 90th, COUNT, MEAN
GRAPHITE
None
None
ANALIZA LOGÓW: LOGSTASH, GRAYLOG2
PHP
ZAKTUALIZUJ PHP
STANDARD NA 2014: NGINX + PHP-FPM
NGINX: SZYBKOŚĆ, ELASTYCZNOŚĆ
PHP-FPM: ROZDZIELENIE PROCESÓW
WŁĄCZ OPCODE CACHE
ZOPTYMALIZUJ FRAMEWORK
WŁĄCZ CACHE
WYŁĄCZ AUTOGENEROWANIE
WYŁĄCZ ZBĘDNE MODUŁY
OPTYMALIZACJA BAZY DANYCH
GŁÓWNA PRZYCZYNA PROBLEMÓW Z WYDAJNOŚCIĄ
SLOW LOG? PERCONA TOOLKIT
INDEKSY QUERY CACHE ALTERNATYWNE SILNIKI
NOSQL
ARCHITEKTURA
None
DOBIERZ KOMPONENTY
FULL TEXT SEARCH? SPHINX.
STRUKTURY DANYCH? REDIS.
BUFORUJ DANE
•WYNIKI ZAPYTAŃ •ODPOWIEDZI API •KONFIGURACJA •GENEROWANE DANE
NAJCZĘŚCIEJ UŻYWANE: W PAMIĘCI
MEMCACHE
MOŻLIWOŚĆ WYDZIELENIA WSPÓŁDZIELONEGO SERWERA MEMCACHE
VARNISH
NAGŁÓWKI HTTP bit.ly/httpcache
MAX AGE LAST MODIFIED ETAG
ROZDZIEL SKŁADNIKI
! ARCHITEKTURA HEKSAGONALNA
None
PRZETWARZAJ ASYNCHRONICZNIE
GDZIEŚ TU UŻYTKOWNIK KLIKA “RELOAD”
Aplikacja Kolejka
Nowa%piosenka Rekodowanie C++ MusicShare Generowanie%skrótu% piosenki C++ Web%Service Java Jabber
erlang Statyczny%HTML PHP DECOUPLING
LOAD BALANCING Front&end RabbitMQ Consumer
! POZA JEDEN SERWER
LOAD BALANCER
VARNISH HAPROXY NGINX
PROBLEMY
! DANE WSPÓŁDZIELONE
SESJE
! PERSISTENT LOAD BALANCER
! WSPÓLNY MEMCACHE
INNE DANE
! PLIKI STATYCZNE
! WSPÓLDZIELONY SYSTEM PLIKÓW
API
ARCHITEKTURA DLA BAZ DANYCH
REPLIKACJA MASTER-SLAVE
SHARDING
None
None
None
PROBLEMY
RESHARDING
JOIN
NA KONIEC
NIE OPTYMALIZUJ PRZEDWCZEŚNIE
BUDUJ ARCHITEKTURĘ PERSPETYWICZNIE
OPTYMALIZUJ STOSOWNIE DO SKALI
BĄDŹ ZEN
ŻYCZĘ WSZYSTKIM TAKICH PROBLEMÓW :-)
https://joind.in/11839 @leafnode
PYTANIA?
DZIĘKUJĘ ZA UWAGĘ Title image credits: https://www.flickr.com/photos/torkildr/3462607995/