Lekce 1 - Úvod do optimalizace výkonu webových aplikací

Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem.
Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Vítejte v e-learning kurzu optimalizace výkonu webových aplikací. Kurz je určen pro pokročilejší publikum a naučíme se v něm podstatně zrychlit webovou aplikaci, která nestíhá nápor uživatelů nebo např. obsahuje složité databázové dotazy. Optimalizovat budeme na několika úrovních a podrobně si ukážeme jak výkonnostní problémy vyřešit co možná nejjednodušeji a nejlevněji. Ukážeme si např. i jak zajistit, aby váš web nespadl, když vás zasdílí youtuber a během sekundy k vám přijde tisíce lidí. Nebo také když váš web bude pod DDOS útokem. A nebojte, hosting vás nebude stát milion korun :)

Start raketoplánu

Kurz je psán na základě zkušeností z provozu populárního webu ITnetwork.cz (milion zobrazení měsíčně) a také provozu několika virálních webových stránek (ve špičce tisíce zobrazení/vteřina).

Informace, které zde získáte, nejsou vázané na konkrétní technologii a teoreticky ani na webovou platformu. Např. cachování můžeme uplatnit i u desktopové aplikace s nějakou databázi. Pokud ta přestane stíhat, budeme postupovat úplně stejně, jako bychom byli na webu. Získáte tedy obecné znalosti jak optimalizovat své aplikace.

Začínáme optimalizovat

Kurz začneme tím, že jsme zjistili, že máme nějaký problém s výkonem a postupně budeme pokračovat s různými optimalizacemi. Začneme samozřejmě u databáze a přes cachování se dostaneme až na fyzickou architekturu s loadbalancery a několika servery a následně představením možností cloudových platforem.

Proč optimalizujeme?

Optimalizaci můžeme potřebovat např. z následujících důvodů:

  • Nárazová návštěvnost (např. aktualizace) - Najednou všech 100 tisíc lidí, co používá náš program, přijde na naše stránky během několika málo hodin. S touto situací se musíme nějak vypořádat, např. web předgenerovat do statických HTML souborů.
  • Virální návštěvnost - Tisíce lidí z Facebooku nám v jednu vteřinu přijde na jednu stránku.
  • Obecně mnoho uživatelů - I při rovnoměrně rozprostřené návštěvnosti nám od určitého počtu uživatelů začne výkon klesat a odezva serveru může trvat dlouhé vteřiny. Nejen, že uživatelé začnou stránky netrpělivostí zavírat, ale za dlouhou dobu načítání penalizuje i Google a náš web se tak může propadnout na SERP (stránka s výsledky vyhledávače).
  • Velká data - Mějme např. účetní aplikaci, která počítá ekonomické ukazatele nebo nějakou vizualizaci pomocí grafů. Takovéto věci určitě nebudeme počítat pokaždé, když aplikaci uživatel spustí, ale budou již někde předpočítané.
  • Složité dotazy - I když máme rychlou databázi s relativně málo daty, složité dotazy mohou trvat výrazně delší dobu.
  • DDOS útok - Konkurence nás nemá ráda a posílá na nás DDOS útoky, náš web je přetížený a nepoužitelný. Řešení je jednodušší, než by se dalo čekat, uvidíte sami.

Úzká hrdla

Pojem úzká hrdla (bottleneck) označuje místa v aplikaci, která způsobují, že aplikace nestíhá obsluhovat své uživatele. Jedná se o jeden bod, přes který teče např. velké množství dat nebo zde probíhá nějaký náročný výpočet. Zbytek požadavku uživatele již může být hotový, ale vše stojí a čeká se, až se akce v tomto jednom bodě dokončí. Neoptimalizujeme tedy celou aplikaci, ale pouze tato zúžení. Ta samozřejmě musíme prvně lokalizovat a poté se s nimi vypořádat.

Nejčastější úzká hrdla

Mezi nejčastější úzká hrdla patří:

  • Databáze - Asi nejčastější zúžení
  • Serverový jazyk - Již jen spuštění programovacího jazyka při požadavku na webovou stránku způsobí přetížení serveru
  • Příliš mnoho resources - Pokud nepoužíváme protokol HTTP/2, již jen požadavek na soubory serveru způsobuje jeho přetížení (např. nemáme styly v jednom souboru, ale máme takovýchto souborů 20)
  • Webserver - Úzké hrdlo může představovat i samotný webserver, který klienty obsluhuje
  • Webhosting - V poslední řadě nám nezbude nic jiného, než koupit "nové železo" :) Toto je ale opravdu poslední bod a než do něj dojdeme, máme poměrně dost možností jak aplikaci zrychlit, než opravdu přikoupíme výpočetní výkon 

Kdy optimalizujeme

Co by to bylo za úvodní lekci do optimalizačního kurzu, když bychom si zde neuvedli jednu z nejdůležitějších programátorských manter:

Premature Optimization Is the Root of All Evil

Programátorská best practice

Větu výše bychom mohli volně přeložit jako "Předčasná optimalizace je kořenem všeho zla", tedy:

OPTIMALIZUJEME, AŽ KDYŽ JE TŘEBA!

Např. dokud nemáme příliš mnoho uživatelů, nebudeme plýtvat penězi na optimalizaci naší aplikace. Bez zátěže bychom navíc nemuseli ani správně odhadnout, kde jsou úzká hrdla a optimalizovali bychom něco, co ani není třeba. Vyčerpáním rozpočtu projektu v jeho prvních fázích může snadno dojít i k jeho selhání.

Bylo by dobré zmínit, že dnešní ceny hardwaru jsou poměrně nízko a tak často první, co uděláme při přetížení aplikace, je dokoupení výkonu serveru. Např. zprvu platíme 100 Kč, poté 500 Kč, poté 1000 Kč/měsíčně. Platit programátory na optimalizace je určitě na začátku dražší. Cena hardwaru ale exponenciálně roste a dříve či později se dostaneme do bodu, kdy je optimalizace levnější, než výkonnější stroj. Toto je důležitý moment, ve kterém teprve začínáme optimalizovat! Tehdy bychom např. za provoz neoptimalizované aplikace jinak platili 20.000 Kč/měsíc.

Jen pro představu, hodina času seniorního programátora stojí asi 500 Kč a každá optimalizace bude trvat minimálně několik dní. Optimalizaci také chápejme určitě jako investici do budoucna.

Myslím, že jsme se do dané problematiky slušně uvedli a namotivovali se k dalšímu pokračování. V příští lekci, Optimalizace výkonu webu - Databázové indexy, to vezmeme hned od databáze a povíme si co vše zde můžeme optimalizovat a jak.


 

 

Článek pro vás napsal David Čápka
Avatar
Jak se ti líbí článek?
5 hlasů
Autor pracuje jako softwarový architekt a pedagog na projektu ITnetwork.cz (a jeho zahraničních verzích). Velmi si váží svobody podnikání v naší zemi a věří, že když se člověk neštítí práce, tak dokáže úplně cokoli.
Unicorn College Autor sítě se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.
Všechny články v sekci
Optimalizace (nejen) webových aplikací
Miniatura
Následující článek
Optimalizace výkonu webu - Databázové indexy
Aktivity (1)

 

 

Komentáře

Avatar
Martin Petrovaj
Překladatel
Avatar
Martin Petrovaj:27. června 19:08

Super, že vzniká séria článkov zameraná nielen na "dev," ale aj na "ops" :-) Pre 100% úplnosť mi chýba možno aj nejaké predstavenie možností, ako sa vôbec efektívne a v praxi monitoruje výkon a stav webových aplikácií.
Inak sa ale veľmi teším na pokračovanie :-)

Odpovědět  +1 27. června 19:08
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Martin Petrovaj
David Čápka:27. června 22:01

Těší mě tvé nadšení :D

Pre 100% úplnosť mi chýba možno aj nejaké predstavenie možností, ako sa vôbec efektívne a v praxi monitoruje výkon a stav webových aplikácií.

Ono to v praxi vypadá nejčastěji tak, že je to prostě strašně pomalé nebo to rovnou přestane fungovat.

Mám napsané již všechny články, sérii bych měl vydat velmi rychle.

Odpovědět  +3 27. června 22:01
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Martin Novotný:30. června 11:19

Pobavilo mě, že "hodina času seniorního programátora stojí asi 500 Kč"
Za 500 je problém sehnat juniora, senior stojí dvakrát tolik... :-)

 
Odpovědět  ±0 30. června 11:19
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Martin Novotný
David Čápka:3. července 18:01

Jednoduchá matematika: 500 Kč * 160 hodin měsíčně je 80.000 Kč. Nevím co víc k tomu říct, jestli budeš někdy platit juniorovi co umí OOP a chápe základ MVC 80 papírů, good luck. Nástupka je většinou 35-40k. Jakmile někdo technologii ovládá dobře, není junior, ale minimálně medior, tam se pak dostáváš na 70 a víc. 80 za mě je teda fakt senior. Platy nad 100k máš většinou do zahraničí, o čemž se tu nebavíme. Odkaz na inzerát na juniora za 80k?

EDIT: Jelikož jsi mi nedokázal ani v další odpovědi ukázat inzerát na juniora za 80k, z diskuze jsem tě vykázal, protože ji děláš nekonstruktivní, a další nepodložené tvrzení vymazal. Držme se prosím tématu článku. Pokud si myslíš, že došlo k nedorozumění, můžeš mi takové pohádkové nabídky poslat do zpráv. Díky za pochopení.

Editováno 3. července 18:53
Odpovědět  +1 3. července 18:01
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.