“Mne to na notebooku funguje” 
Ako spraviť z webovej aplikácie, ktorá funguje vývojárovi na 
počítači škálovateľnú web aplikáciu 
Juraj Bednár juraj.bednar@digmia.com
Vývojár programuje aplikáciu… 
Fedora 30000 vo 
VirtualBox 
PHP 12 
NodeJS-git-HEAD 
MongoDB-nightly-build 
optimizator80000
Chce to vidieť zákazník… 
Fedora 30000 vo 
VirtualBox 
…. 
Žiadne zálohy 
Prístup na testovacej 
adrese 
Počet užívateľov: 5
Hurá ostrá prevádzka! 
Internet
Hurá “profi” ostrá prevádzka 
Internet
Nefunguje to! 
• Máte “starú” verziu (napr. RHEL 6 namiesto 
Fedora 30000) 
• PHP máte nižšej verzie a zabudli ste to 
skompilovať s týmto patchom a týmito 
špeciálnymi voľbami 
– Potrebujeme mať v php.ini všetko povolené 
• Nemáme nainštalovaný optimizator80000!
Nefunguje to! 
backport hosting upgradne 
Kto sa bude starať o bezp. upgrady? 
- OpenShift – supportovaný vs. 
nesupportovaný cartridge
Stále to nefunguje 
• (v tomto momente zákazník prichádza 
väčšinou k nám) 
• Dôvod: ľubovoľná kombinácia z: 
– nestíha to 
– padá to 
– hackli nás 
– admin nás má pokrk a nedvíha telefón / nemá na 
nás čas
Navrhneme architektúru… 
Datacentrum 1 Datacentrum 2 
provider independent IP 
Internet Internet 
BGP failover 
Cache/Load balancer 
App server ….. 
DB server 
Statika (img, css, js, video) 
Cache (memcached) 
….. 
Cache/Load balancer 
App server ….. 
DB server 
Statika (img, css, js, video) 
Cache (memcached) 
…..
Nefunguje statika 
• Aplikácia píše statické súbory na disk do 
lokálneho filesystému 
– Synchronizácia 
– CDN 
• Aplikácia sa odvoláva na statiku pod rovnakou 
subdoménou (treba spraviť static.domena.sk) 
– Vieme rýchlo servovať (nginx, varnish) 
– Cache je nastavená správne
HTTP Cache nepomáha 
• Nízky hitrate, lebo… 
– No-cache hlavičky 
• “nikto nemá nič cachovať, aby sa všetky zmeny prejavili 
hneď” 
• dobré na vývoj, nepoužiteľné v produkcii 
• Parametre cachovania treba nastaviť v 
aplikácii a na serveri servujúcom statiku 
– “nastavte si to vy” – my nevieme, ktorý obsah sa 
ako často mení, to vie aplikácia
Kedy to spadne? 
• Väčšina zákazníkov nevie, lebo nikto nerobil 
load-testy 
– Apache JMeter je skvelý nástroj, používajte ho 
– Škálovanie vtedy, keď je to potrebné, nie “keď to 
nestíha”
Rýchlo to vráťte naspäť! 
• Nové verzie sa majú testovať na testovacom prostredí 
– Vrátane load testov 
• Testovacie prostredie nie je: 
– Notebook vývojára 
– Fedora 30000 vo virtualboxe vo firme, kde sa to 
programuje 
• Testovacie prostredie by malo byť aspoň z hľadiska 
softvéru 100% zhodné s produkčným 
• Zmeny sa robia pomocou VCS (git, svn, mercurial, …), 
nikdy needitovať súbor mimo VCS! 
– Pekne to má vyriešené OpenShift
Aplikačný server 
• Apache je dobrý na vývoj, takmer nikdy 
nepoužívame v produkcii (ak sa nedá takmer 
úplne zacachovať) 
• Nikdy nie mod_php 
• Aplikácia nikdy nezapisuje lokálne na disk! 
(pomocné súbory, statika, …) 
– Problémy so session handlingom 
– Problémy s NFS lockmi 
• Nikdy sa nespolieha na to, že na jednej IP je DB, 
cache, … server 
– (ak sa na tom vyslovene nedohodneme…)
Databázový server 
• Nikdy nie je jeden 
– Master<->slave 
– Master<->master 
– + coldspare replika na zálohy 
• Pozor na vzájomné blokovanie queries 
• Pozor na zapisovanie 
– Invalidovanie cache (napr. Logy do DB) 
• Chýbajú indexy 
• Aplikácia zle volí DB server 
– Read-only replika na lokálnom app serveri (za istých 
okolností)
Všeobecné rady 
• Softvér, ktorý nemá stabilnú verziu s 
bezpečnostnou podporou (balíčkovací systém) 
neexistuje 
– …a neexistujúci softvér nemôžeme v aplikácii 
používať, lebo neexistuje 
• Má softvér long term podporu alebo nás 
vendor prinúti upgradovať na novšiu verziu (s 
nekompatibilným API)?
“Mne to na notebooku funguje” 
Ako spraviť z webovej aplikácie, ktorá funguje vývojárovi na 
počítači škálovateľnú web aplikáciu 
Juraj Bednár juraj.bednar@digmia.com

Mne to na notebooku funguje

  • 1.
    “Mne to nanotebooku funguje” Ako spraviť z webovej aplikácie, ktorá funguje vývojárovi na počítači škálovateľnú web aplikáciu Juraj Bednár juraj.bednar@digmia.com
  • 2.
    Vývojár programuje aplikáciu… Fedora 30000 vo VirtualBox PHP 12 NodeJS-git-HEAD MongoDB-nightly-build optimizator80000
  • 3.
    Chce to vidieťzákazník… Fedora 30000 vo VirtualBox …. Žiadne zálohy Prístup na testovacej adrese Počet užívateľov: 5
  • 4.
  • 5.
    Hurá “profi” ostráprevádzka Internet
  • 6.
    Nefunguje to! •Máte “starú” verziu (napr. RHEL 6 namiesto Fedora 30000) • PHP máte nižšej verzie a zabudli ste to skompilovať s týmto patchom a týmito špeciálnymi voľbami – Potrebujeme mať v php.ini všetko povolené • Nemáme nainštalovaný optimizator80000!
  • 7.
    Nefunguje to! backporthosting upgradne Kto sa bude starať o bezp. upgrady? - OpenShift – supportovaný vs. nesupportovaný cartridge
  • 8.
    Stále to nefunguje • (v tomto momente zákazník prichádza väčšinou k nám) • Dôvod: ľubovoľná kombinácia z: – nestíha to – padá to – hackli nás – admin nás má pokrk a nedvíha telefón / nemá na nás čas
  • 9.
    Navrhneme architektúru… Datacentrum1 Datacentrum 2 provider independent IP Internet Internet BGP failover Cache/Load balancer App server ….. DB server Statika (img, css, js, video) Cache (memcached) ….. Cache/Load balancer App server ….. DB server Statika (img, css, js, video) Cache (memcached) …..
  • 10.
    Nefunguje statika •Aplikácia píše statické súbory na disk do lokálneho filesystému – Synchronizácia – CDN • Aplikácia sa odvoláva na statiku pod rovnakou subdoménou (treba spraviť static.domena.sk) – Vieme rýchlo servovať (nginx, varnish) – Cache je nastavená správne
  • 11.
    HTTP Cache nepomáha • Nízky hitrate, lebo… – No-cache hlavičky • “nikto nemá nič cachovať, aby sa všetky zmeny prejavili hneď” • dobré na vývoj, nepoužiteľné v produkcii • Parametre cachovania treba nastaviť v aplikácii a na serveri servujúcom statiku – “nastavte si to vy” – my nevieme, ktorý obsah sa ako často mení, to vie aplikácia
  • 12.
    Kedy to spadne? • Väčšina zákazníkov nevie, lebo nikto nerobil load-testy – Apache JMeter je skvelý nástroj, používajte ho – Škálovanie vtedy, keď je to potrebné, nie “keď to nestíha”
  • 13.
    Rýchlo to vráťtenaspäť! • Nové verzie sa majú testovať na testovacom prostredí – Vrátane load testov • Testovacie prostredie nie je: – Notebook vývojára – Fedora 30000 vo virtualboxe vo firme, kde sa to programuje • Testovacie prostredie by malo byť aspoň z hľadiska softvéru 100% zhodné s produkčným • Zmeny sa robia pomocou VCS (git, svn, mercurial, …), nikdy needitovať súbor mimo VCS! – Pekne to má vyriešené OpenShift
  • 14.
    Aplikačný server •Apache je dobrý na vývoj, takmer nikdy nepoužívame v produkcii (ak sa nedá takmer úplne zacachovať) • Nikdy nie mod_php • Aplikácia nikdy nezapisuje lokálne na disk! (pomocné súbory, statika, …) – Problémy so session handlingom – Problémy s NFS lockmi • Nikdy sa nespolieha na to, že na jednej IP je DB, cache, … server – (ak sa na tom vyslovene nedohodneme…)
  • 15.
    Databázový server •Nikdy nie je jeden – Master<->slave – Master<->master – + coldspare replika na zálohy • Pozor na vzájomné blokovanie queries • Pozor na zapisovanie – Invalidovanie cache (napr. Logy do DB) • Chýbajú indexy • Aplikácia zle volí DB server – Read-only replika na lokálnom app serveri (za istých okolností)
  • 16.
    Všeobecné rady •Softvér, ktorý nemá stabilnú verziu s bezpečnostnou podporou (balíčkovací systém) neexistuje – …a neexistujúci softvér nemôžeme v aplikácii používať, lebo neexistuje • Má softvér long term podporu alebo nás vendor prinúti upgradovať na novšiu verziu (s nekompatibilným API)?
  • 17.
    “Mne to nanotebooku funguje” Ako spraviť z webovej aplikácie, ktorá funguje vývojárovi na počítači škálovateľnú web aplikáciu Juraj Bednár juraj.bednar@digmia.com