1. diel - Úvod do optimalizácie výkonu webových aplikácií
Vitajte v e-learning kurzu optimalizácia výkonu webových aplikácií. Kurz je určený pre pokročilejších publikum a naučíme sa v ňom podstatne zrýchliť webovú aplikáciu, ktorá nestíha nápor používateľov alebo napr. Obsahuje zložité databázové dotazy. Optimalizovať budeme na niekoľkých úrovniach a podrobne si ukážeme ako výkonnostné problémy vyriešiť čo možno najjednoduchšie a najlacnejšie. Ukážeme si napr. Aj ako zabezpečiť, aby váš web nespadol, keď vás zasdílí YouTuber a behom sekundy k vám príde tisíce ľudí. Alebo tiež keď váš web bude pod DDOS útokom. A nebojte, hosting vás nebude stáť milión korún
Kurz je písaný na základe skúseností z prevádzky populárneho webu ITnetwork.cz (milión zobrazenie mesačne) a tiež prevádzky niekoľkých virálnych webových stránok (v špičke tisíce zobrazenie / sekunda).
Informácie, ktoré tu získate, nie sú viazané na konkrétnu technológiu a teoreticky ani na webovú platformu. Napr. cachovanie môžeme uplatniť aj u desktopové aplikácie s nejakou databáze. Ak tá prestane stíhať, budeme postupovať úplne rovnako, ako by sme boli na webe. Získate teda všeobecné znalosti ako optimalizovať svoje aplikácie.
Začíname optimalizovať
Kurz začneme tým, že sme zistili, že máme nejaký problém s výkonom a postupne budeme pokračovať s rôznymi optimalizáciami. Začneme samozrejme u databázy a cez cachovanie sa dostaneme až na fyzickú architektúru s loadbalancery a niekoľkými servermi a následne predstavením možností cloudových platforiem.
Prečo optimalizujeme?
Optimalizáciu môžeme potrebovať napr. Z nasledujúcich dôvodov:
- Nárazová návštevnosť (napr. Aktualizácia) - Zrazu všetkých 100 tisíc ľudí, čo používa náš program, príde na naše stránky v priebehu niekoľkých málo hodín. S touto situáciou sa musíme nejako vysporiadať, napr. Web předgenerovat do statických HTML súborov.
- Virálny návštevnosť - Tisíce ľudí z Facebooku nám v jednu sekundu príde na jednu stránku.
- Všeobecne mnoho užívateľov - Aj pri rovnomerne rozprestreté návštevnosti nám od určitého počtu užívateľov začne výkon klesať a odozva servera môže trvať dlhé sekundy. Nielen, že používatelia začnú stránky netrpezlivosťou zatvárať, ale za dlhú dobu načítanie penalizuje aj Google a náš web sa tak môže prepadnúť na SERP (stránka s výsledkami vyhľadávača).
- Veľká dáta - Majme napr. Účtovný aplikáciu, ktorá počíta ekonomické ukazovatele alebo nejakú vizualizáciu pomocou grafov. Takéto veci určite nebudeme počítať zakaždým, keď aplikáciu používateľ spustí, ale budú už niekde předpočítané.
- Zložité otázky - Aj keď máme rýchlu databázu s relatívne málo dátami, zložité otázky môžu trvať výrazne dlhšiu dobu.
- DDOS útok - Konkurencia nás nemá rada a posiela na nás DDOS útoky, náš web je preťažený a nepoužiteľný. Riešenie je jednoduchšie, než by sa dalo čakať, uvidíte sami.
Úzke hrdlá
Pojem úzke hrdlá (bottleneck) označuje miesta v aplikácii, ktorá spôsobujú, že aplikácia nestíha obsluhovať svojich užívateľov. Jedná sa o jeden bod, cez ktorý tečie napr. Veľké množstvo dát alebo tu prebieha nejaký náročný výpočet. Zvyšok požiadavky užívateľa už môže byť hotový, ale všetko stojí a čaká sa, až sa akcia v tomto jednom bode dokončí. Neoptimalizujeme teda celú aplikáciu, ale iba táto zúženie. Tá samozrejme musíme prvýkrát lokalizovať a potom sa s nimi vysporiadať.
Najčastejšie úzke hrdlá
Medzi najčastejšie úzke hrdlá patria:
- Databáza - Asi najčastejšia zúženie
- Serverový jazyk - Už len spustenie programovacieho jazyka pri požiadavke na webovú stránku spôsobí preťaženie servera
- Príliš veľa resources - Ak nepoužívame protokol HTTP / 2, už len požiadavka na súbory serveri spôsobuje jeho preťaženia (napr. Nemáme štýly v jednom súbore, ale máme takýchto súborov 20)
- Webserver - Úzke hrdlo môže predstavovať aj samotný webserver, ktorý klientov obsluhuje
- Webhosting - V poslednom rade nám nezostane nič iné, než kúpiť "nové železo" Toto je ale naozaj posledný bod a ako do neho dôjdeme, máme pomerne dosť možností ako aplikáciu zrýchliť, než naozaj prikúpime výpočtový výkon
Kedy optimalizujeme
Čo by to bolo za úvodný lekciu do optimalizačného kurzu, keď by sme si tu neuviedli jednu z najdôležitejších programátorských mantier:
Premature Optimization Is the Root of All EvilProgramátorská best practice
Vetu vyššie by sme mohli voľne preložiť ako "Predčasná optimalizácia je koreňom všetkého zla", teda:
Optimalizujeme, AŽ KEĎ JE POTREBNÉ!
Napr. kým nemáme príliš veľa užívateľov, nebudeme plytvať peniazmi na optimalizáciu našej aplikácie. Bez záťaže by sme navyše nemuseli ani správne odhadnúť, kde sú úzke hrdlá a optimalizovali by sme niečo, čo ani nie je potrebné. Vyčerpaním rozpočtu projektu v jeho prvých fázach môže ľahko dôjsť aj k jeho zlyhanie.
Bolo by dobré spomenúť, že dnešné ceny hardvéru sú pomerne nízko a tak často prvé, čo urobíme pri preťažení aplikácie, je dokúpenie výkonu servera. Napr. sprvu platíme 100 Sk, potom 500 Sk, potom 1000 Sk / mesačne. Platiť programátorov na optimalizácia je určite na začiatku drahšie. Cena hardvéru ale exponenciálne rastie a skôr či neskôr sa dostaneme do bodu, kedy je optimalizácia lacnejšie, než výkonnejší stroj. Toto je dôležitý moment, v ktorom ešte len začíname optimalizovať! Vtedy by sme napr. Za prevádzku neoptimalizované aplikácie inak platili 20.000 Kč / mesiac.
Len pre predstavu, hodina času seniorského programátora stojí asi 500 Sk a každá optimalizácia bude trvať minimálne niekoľko dní. Optimalizáciu tiež chápte určite ako investíciu do budúcnosti.
Myslím, že sme sa do danej problematiky slušne uviedli a namotivovali sa k ďalšiemu pokračovaniu. V budúcej lekcii, Optimalizácia výkonu webu - Databázové indexy , to vezmeme hneď od databázy a povieme si čo všetko tu môžeme optimalizovať a ako.