Výkonnost webových aplikací

   Jan Tichý
   @jantichy
Sledujte nás
• Prezentace:   slideshare.net/mediocz

• Twitter:      @jantichy
                @mediocz
                @medioteka

• Web:          www.medio.cz
                blog.medio.cz
                akademie.medio.cz
Oblasti pro zlepšování výkonu
•   Návrh aplikace
•   Komunikace s klientem
•   Webový server a aplikace
•   Databáze
•   Cachování
•   Rozkládání zátěže
Návrh aplikace
•   Funkčnost aplikace
•   Volba vhodných prostředků
•   Architektura aplikace
•   Výkon versus přehlednost
    – Použít OOP? Jak moc dekomponovat?
    – Použít framework? Použít ORM?
Webový server
• Hardware
• Konfigurace serveru
  – KeepAliveTimeout, MaxClients, MaxRequestsPerChild
  – mod_deflate, mod_gunzip
• Webserver, PHP
  –   Apache, NGINX
  –   APC/eAccelerator – opcode lokálně v paměti
  –   HiPHoP
  –   Zbytečné direktivy – magic quotes, register globals
Optimalizace aplikačního kódu
•   Kopírování dat vs. referencí
•   Kód se provádí v každém průchodu cyklem
•   Preferovat vestavěné funkce
•   Preferovat preg před ereg
•   Ukládání session do souborů je pomalé
•   Mikrooptimalizace - ternární operátor a další
Komunikace s klientem
• Cachování, HTTP hlavičky
  – Last-Modified, If-Modified-Since, Expires
  – Etag, If-None-Match
  – Cache-Control, Vary
• Klientské zpracování
  – Renderování v prohlížeči
  – Javascript
  – HTML a CSS, Sprites
• Client-side aplikace
Databáze
• Volba „databáze“ – MySQL, PostgreSQL, Redis,
  Mongo, CouchDB, ElasticSearch
• Uzavírat spojení co nejdříve
• Optimalizace dotazů - EXPLAIN, indexy
• Používat insert s více hodnotami
Cachování
• Na mnoha různých místech
  – databáze, agregované a předpočítané
    hodnoty, výsledky drahých operací a db
    dotazů, modelová
    data, šablony, fragmenty/bloky, celostránková cache
• Různé nástroje
  – filesystém, Memcache/Membase, APC, Redis…
  – Varnish, NGINX+Memcache
• Požadavky na architekturu aplikace
• Problém s invalidací
Rozkládání zátěže
• Výdejové front servery, statické
  servery, databázové servery, backend
  servery…
• DNS roundrobin
• Reverzní proxy – Varnish, Squid, Nginx
• Uživatelská session data, dynamické bloky, A/B
  testování, trackovací parametry
• Databáze: replikace, master-slave
• Statický obsah: CDN
Další zdroje
• PHP triky
  http://php.vrana.cz/

• Školení výkonnosti webových aplikací
  http://www.michalspacek.cz/

• Konzultace a analýzy k výkonnosti aplikací:
  http://www.medio.cz/
Díky za pozornost!

Jan Tichý
@jantichy

Výkonnost webových aplikací

  • 1.
    Výkonnost webových aplikací Jan Tichý @jantichy
  • 2.
    Sledujte nás • Prezentace: slideshare.net/mediocz • Twitter: @jantichy @mediocz @medioteka • Web: www.medio.cz blog.medio.cz akademie.medio.cz
  • 3.
    Oblasti pro zlepšovánívýkonu • Návrh aplikace • Komunikace s klientem • Webový server a aplikace • Databáze • Cachování • Rozkládání zátěže
  • 4.
    Návrh aplikace • Funkčnost aplikace • Volba vhodných prostředků • Architektura aplikace • Výkon versus přehlednost – Použít OOP? Jak moc dekomponovat? – Použít framework? Použít ORM?
  • 5.
    Webový server • Hardware •Konfigurace serveru – KeepAliveTimeout, MaxClients, MaxRequestsPerChild – mod_deflate, mod_gunzip • Webserver, PHP – Apache, NGINX – APC/eAccelerator – opcode lokálně v paměti – HiPHoP – Zbytečné direktivy – magic quotes, register globals
  • 6.
    Optimalizace aplikačního kódu • Kopírování dat vs. referencí • Kód se provádí v každém průchodu cyklem • Preferovat vestavěné funkce • Preferovat preg před ereg • Ukládání session do souborů je pomalé • Mikrooptimalizace - ternární operátor a další
  • 7.
    Komunikace s klientem •Cachování, HTTP hlavičky – Last-Modified, If-Modified-Since, Expires – Etag, If-None-Match – Cache-Control, Vary • Klientské zpracování – Renderování v prohlížeči – Javascript – HTML a CSS, Sprites • Client-side aplikace
  • 8.
    Databáze • Volba „databáze“– MySQL, PostgreSQL, Redis, Mongo, CouchDB, ElasticSearch • Uzavírat spojení co nejdříve • Optimalizace dotazů - EXPLAIN, indexy • Používat insert s více hodnotami
  • 9.
    Cachování • Na mnoharůzných místech – databáze, agregované a předpočítané hodnoty, výsledky drahých operací a db dotazů, modelová data, šablony, fragmenty/bloky, celostránková cache • Různé nástroje – filesystém, Memcache/Membase, APC, Redis… – Varnish, NGINX+Memcache • Požadavky na architekturu aplikace • Problém s invalidací
  • 10.
    Rozkládání zátěže • Výdejovéfront servery, statické servery, databázové servery, backend servery… • DNS roundrobin • Reverzní proxy – Varnish, Squid, Nginx • Uživatelská session data, dynamické bloky, A/B testování, trackovací parametry • Databáze: replikace, master-slave • Statický obsah: CDN
  • 11.
    Další zdroje • PHPtriky http://php.vrana.cz/ • Školení výkonnosti webových aplikací http://www.michalspacek.cz/ • Konzultace a analýzy k výkonnosti aplikací: http://www.medio.cz/
  • 12.
    Díky za pozornost! JanTichý @jantichy