abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 04:55 | Nová verze

    OpenJS Foundation, oficiální projekt konsorcia Linux Foundation, oznámila vydání verze 22 otevřeného multiplatformního prostředí pro vývoj a běh síťových aplikací napsaných v JavaScriptu Node.js (Wikipedie). V říjnu se verze 22 stane novou aktivní LTS verzí. Podpora je plánována do dubna 2027.

    Ladislav Hagara | Komentářů: 0
    dnes 04:22 | Nová verze

    Byla vydána verze 8.2 open source virtualizační platformy Proxmox VE (Proxmox Virtual Environment, Wikipedie) založené na Debianu. Přehled novinek v poznámkách k vydání a v informačním videu. Zdůrazněn je průvodce migrací hostů z VMware ESXi do Proxmoxu.

    Ladislav Hagara | Komentářů: 0
    dnes 04:11 | Nová verze

    R (Wikipedie), programovací jazyk a prostředí určené pro statistickou analýzu dat a jejich grafické zobrazení, bylo vydáno ve verzi 4.4.0. Její kódové jméno je Puppy Cup.

    Ladislav Hagara | Komentářů: 0
    včera 22:44 | IT novinky

    IBM kupuje společnost HashiCorp (Terraform, Packer, Vault, Boundary, Consul, Nomad, Waypoint, Vagrant, …) za 6,4 miliardy dolarů, tj. 35 dolarů za akcii.

    Ladislav Hagara | Komentářů: 3
    včera 15:55 | Nová verze

    Byl vydán TrueNAS SCALE 24.04 “Dragonfish”. Přehled novinek této open source storage platformy postavené na Debianu v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    včera 13:44 | IT novinky

    Oznámeny byly nové Raspberry Pi Compute Module 4S. Vedle původní 1 GB varianty jsou nově k dispozici také varianty s 2 GB, 4 GB a 8 GB paměti. Compute Modules 4S mají na rozdíl od Compute Module 4 tvar a velikost Compute Module 3+ a předchozích. Lze tak provést snadný upgrade.

    Ladislav Hagara | Komentářů: 0
    včera 04:44 | Nová verze

    Po roce vývoje od vydání verze 1.24.0 byla vydána nová stabilní verze 1.26.0 webového serveru a reverzní proxy nginx (Wikipedie). Nová verze přináší řadu novinek. Podrobný přehled v souboru CHANGES-1.26.

    Ladislav Hagara | Komentářů: 0
    včera 04:33 | Nová verze

    Byla vydána nová verze 6.2 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Přehled změn v příslušném seznamu. Tor Browser byl povýšen na verzi 13.0.14.

    Ladislav Hagara | Komentářů: 0
    včera 04:22 | Nová verze

    Byla vydána nová verze 30.0.0 frameworku pro vývoj multiplatformních desktopových aplikací pomocí JavaScriptu, HTML a CSS Electron (Wikipedie, GitHub). Chromium bylo aktualizováno na verzi 124.0.6367.49, V8 na verzi 12.4 a Node.js na verzi 20.11.1. Electron byl původně vyvíjen pro editor Atom pod názvem Atom Shell. Dnes je na Electronu postavena celá řada dalších aplikací.

    Ladislav Hagara | Komentářů: 2
    včera 04:11 | Nová verze

    Byla vydána nová verze 9.0.0 otevřeného emulátoru procesorů a virtualizačního nástroje QEMU (Wikipedie). Přispělo 220 vývojářů. Provedeno bylo více než 2 700 commitů. Přehled úprav a nových vlastností v seznamu změn.

    Ladislav Hagara | Komentářů: 0
    KDE Plasma 6
     (72%)
     (9%)
     (2%)
     (17%)
    Celkem 729 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Dotaz: Používání cache na HTTP serverech

    8.8.2017 12:56 Kit | skóre: 45 | Brno
    Používání cache na HTTP serverech
    Přečteno: 786×
    V diskuzi o starších serverech jsme se dostali k tématu http://www.abclinuxu.cz/poradna/hardware/show/427914#34. V minulosti jsem tento postup s oblibou používal tam, kde hosting nenabízel PHP. Stránky jsem si vygeneroval lokálně v PHP a na server putovaly soubory v HTML, JS, CSS apod.

    Dnes už téměř každý webserver nabízí nějaké dynamické generování stránek a statické předgenerování HTML či jiného obsahu upadl do polozapomnění. Nebo snad ne?

    Objevily se nejrůznější cache, z nichž nejméně mi dávají smysl cache v aplikaci - Memcache, Redis v roli cache apod. Dále máme cache databázové, souborové, proxy a další, které umí svůj obsah udržovat v čistotě a z našeho pohledu jsou transparentní. Jen je správně nakonfigurovat.

    Jaké používáte cache na webových serverech a jak je konfigurujete, abyste dosáhli maximálního výkonu aplikace?
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.

    Odpovědi

    Josef Kufner avatar 8.8.2017 14:08 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Používání cache na HTTP serverech
    Dnes už téměř každý webserver nabízí nějaké dynamické generování stránek a statické předgenerování HTML či jiného obsahu upadl do polozapomnění. Nebo snad ne?
    Naopak. Statické weby prodělaly před pár lety renesanci díky Github Pages (a později se přidal i Gitlab). Vyrojilo se spousty generátorů a právě v kombinaci s Gitem a continuous integration/deploy to je velmi užitečná a pohodlná věc. Ve výsledku upravíš lokalní soubor např. v Markdownu, commitneš změny, CI na serveru se pushem vzbudí, vyrobí nový web a nahraje změny na statický hosting.

    Pro jednoduché prezentace projektů a dokumentace programů je to ideální. Sám takto mám dva weby, jeden jsem konvertoval právě z letitého PHP na Jekyll. Pokud už máš web rozběhnutý a chceš udělat nějaké menší změny či něco připsat, vystačíš si s mobilem (MGit) a línou wifi z baru na pláži (vyzkoušeno).
    Hello world ! Segmentation fault (core dumped)
    8.8.2017 19:23 Kit | skóre: 45 | Brno
    Rozbalit Rozbalit vše Re: Používání cache na HTTP serverech
    Díky za inspirující seznam generátorů. Některý z nich se mi určitě bude hodit alespoň jako polotovar.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    10.8.2017 00:15 Petr
    Rozbalit Rozbalit vše Re: Používání cache na HTTP serverech
    A co kvalita? Treba typos? Zadny review proces? Davat veci rovnou do produkce z gitu je mozna rychle, ale bez zaruky kvality.
    Josef Kufner avatar 10.8.2017 00:45 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Používání cache na HTTP serverech
    Naopak. Automatizace procesu přináší daleko vyšší záruky kvality.

    Na to, aby mohlo proběhnout review a nešlo to do produkce rovnou, máme merge requesty a větve. Tedy udělá se feature branch, jakmile je odladěno, vytvoří se merge request, proběhne review, mergne se do masteru, z masteru se udělá staging, ten se otestuje a pokud projde, posune se produkce. Všechny či jen vybrané větve pak mohou mít automaticky generované a deployované testovací prostředí, kde si to můžeš prohlédnout bez vlivu na produkci.

    A nebo to je prostě nějaký malý web, kde nevadí, když bude chvilku nějaká chyba a necháš posílat master rovnou do světa. I tak je ale výhoda v tom, že v deploy procesu neuděláš chybu a na nic nezapomeneš. Navíc není problém tam mít nějaké testy, které deploy zastaví (selže generátor), či aspoň varují (mám takto automatické kontroly odkazů, ale až po deploy).
    Hello world ! Segmentation fault (core dumped)
    Josef Kufner avatar 8.8.2017 14:20 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Používání cache na HTTP serverech
    Objevily se nejrůznější cache, z nichž nejméně mi dávají smysl cache v aplikaci - Memcache, Redis v roli cache apod. Dále máme cache databázové, souborové, proxy a další, které umí svůj obsah udržovat v čistotě a z našeho pohledu jsou transparentní. Jen je správně nakonfigurovat. Jaké používáte cache na webových serverech a jak je konfigurujete, abyste dosáhli maximálního výkonu aplikace?
    Memcache je ptákovina. Tím, že tam je socket a stejně se komunikuje po síti, je to zhruba stejně rychlé jako MySQL s jednoduchým dotazem. Pokud je databáze dobře udělaná, memcache akorát zdržuje. Daleko lepší je nastavit větší cache databázovému serveru, neboť to pomůže víc a aplikace se zjednoduší.

    Redis jsem poslední dobou viděl hodně používat na ukládání sessions. Zdá se, že to funguje. Přijde mi však, že ve většině případů to je zbytečná komplikace navíc. Pokud ale je aplikace nasazená v cloudu, tak už to má opodstatnění (lokální soubory, kam se to defaultně ukládá, nejsou sdílené mezi servery). Otázkou je, zda malá SQL tabulka neudělá stejnou práci.

    Souborové cache jsou zajímavé, pokud se to kombinuje s nějakým dalším mechanismem. Pokud HTTP server umí X-SendFile, tak stačí nakešovat do souboru a předat jméno souboru serveru, ať už to pošle sám. PHP frameworky zas často generují PHP soubory (např. Twig a snad všechny DI kontejnery), které pak PHP nakešuje do OPcode cache, takže to vlastně zůstává předkompilované v paměti.

    Další hezká věc byla APCu, což bylo docela jednoduché key-value úložiště ve sdílené paměti. Sice taková cache je sdílená jen v rámci jednoho serveru, ale za to je neskutečně rychlá. Škoda, že už se to nevyvíjí (skončilo to s PHP5).
    Hello world ! Segmentation fault (core dumped)
    9.8.2017 21:38 Kit | skóre: 45 | Brno
    Rozbalit Rozbalit vše Re: Používání cache na HTTP serverech
    • Memcache - souhlas
    • Sessions v Redisu zní zajímavě, ale Redis toho umí víc a je mi docela líto ho používat na takovou prkotinu. Ostatně PHP má podporu pro sessions v MySQL a když se použije engine MEMORY...
    • Měl jsem na mysli souborové cache, které jsou součástí systému a jsou zcela transparentní. Když stejný konfigurační soubor čteš třeba tisíckrát za sekundu, tak to na disk hrábne jen napoprvé
    • APCu by mělo jít pro PHP7 přidat přes PECL. Nezkoušel jsem
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    Josef Kufner avatar 10.8.2017 00:04 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Používání cache na HTTP serverech
    APCu by mělo jít pro PHP7 přidat přes PECL. Nezkoušel jsem
    No právě. Už to není hezky v základu, takže to bude na serverech skoro vždy chybět.
    Hello world ! Segmentation fault (core dumped)
    9.8.2017 22:40 Sten
    Rozbalit Rozbalit vše Re: Používání cache na HTTP serverech
    Memcache je ptákovina? To je zase rada. Memcache se samozřejmě nepoužívá jako náhrada SQL cache, ale třeba pro ukládání vygenerovaných částí stránek nebo celých stránek, kdy je nelze cachovat na webserveru (třeba kvůli tomu, že jsou závislé na session). Nebo data získaná z pomalých zdrojů, jako třeba předparsované logy nebo data pushnutá z dalších serverů či generovaná asynchronní operací.

    Ukládání session do SQL? Možná u malého webu to funguje, ale cokoliv víc zatíženého bude mít velký problém, když najedou každý request bude generovat zapisující transakce (potřebujete přinejmenším prodloužit platnost session), což kromě serializace všech requestů nad jednou tabulkou také zlikviduje SQL cache a vydrtí disky.
    Josef Kufner avatar 10.8.2017 00:30 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Používání cache na HTTP serverech
    Memcache jsem párkrát potkal právě v místě, kdy se někdo snažil urychlit SQL dotazy (samozřejmě to víc zdržovalo než zrychlovalo). Takže vyhození Memcache a opravení databáze výrazně pomohlo.

    Kešování kusů vykreslených stránek sice zní lákavě, ale neskutečně to komplikuje aplikaci. Navíc ten dotaz na memcache chvíli trvá a šablonovací systémy nejsou zas tak pomalé. Smysl to může mít u pomalých zdrojů dat, nebo když je potřeba něco složitě počítat, ale v takových případech zas ta data obvykle mívají nějakou strukturu, kterou je dobré zachovat a nějak ji využít (nad logem se hodí mít index, data pushnutá z dalšího serveru bude vhodné aktualizovat po částech, …). To pak je Memcache už moc slabý nástroj. A pokud je potřeba obsloužit opravdu hodně uživatelů, raději bych sáhnul po APCu, kdy odpadne komunikace po socketu (jinak to je prakticky totéž).

    Co se session v SQL týče, Innodb si zamyká při updatu jednotlivé řádky, takže by to paralelizaci nemělo rozbít (ale je to dobrá připomínka). Co se SQL cache a disků týče, pro méně navštěvované weby to není problém. Pokud se tabulka se sessions vleze celá do cache, tak tam prostě bude a stačí nechat cache dostatečně velkou. Zápisy lze snadno omezit tím, že se session bude prodlužovat jen občas – například pokud už vypršela alespoň čtvrtina životnosti session, takže pokud uživatel jen čte a udělá 1 rq/min v session, která je na hodinu, zapíše se na disk jednou za 15 minut a ani si toho nevšimne. Pro delší session to je zcela bezproblémové.
    Hello world ! Segmentation fault (core dumped)
    11.8.2017 00:14 trekker.dk | skóre: 72
    Rozbalit Rozbalit vše Re: Používání cache na HTTP serverech
    A pokud je potřeba obsloužit opravdu hodně uživatelů, raději bych sáhnul po APCu, kdy odpadne komunikace po socketu (jinak to je prakticky totéž).
    Až na to, že to bude fungovat jenom u mod_php nebo za použití posix shared memory - přičemž obojímu je lépe se vyhnout.
    Innodb si zamyká při updatu jednotlivé řádky, takže by to paralelizaci nemělo rozbít
    InnoDB na sessions? No potěš koště.
    Zápisy lze snadno omezit tím, že se session bude prodlužovat jen občas
    Pokud ovšem do té session nezapisujete data, což aplikace dost často dělají.
    Quando omni flunkus moritati
    10.8.2017 00:42 Kit | skóre: 45 | Brno
    Rozbalit Rozbalit vše Re: Používání cache na HTTP serverech
    Memcache je líná potvora, která jenom zdržuje. I ten Redis je rychlejší a přitom je o dva řády lepší ve schopnostech.

    Když už bych do Memcache něco ukládal, tak ne v HTML, ale v XML, aby se to dalo snadno umístit do výstupní šablony. A než se piplat s XML, je lepší to tahat rovnou z SQL.

    Serializaci session nedělá SQL, ale PHP, tedy databázi to nijak nezatěžuje. Transakce se nepoužívají, neboť nejsou potřebné. Cache se nezlikviduje, session je typicky velmi krátký string. Souborové systémy s tím také nemají problémy, proč by měla mít databáze?

    Možná nejlepším řešením pro sessions bude starý dobrý ramdisk.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    10.8.2017 09:18 MP
    Rozbalit Rozbalit vše Re: Používání cache na HTTP serverech
    Nojo. Ale k cemu ramdisk, kdyz obvykle tu session potrebujete sdilet mezi servery. To je hlavni pouziti memcache(d). Redis je druha varianta na toto pouziti, ale ponekud slozitejsi na konfiguraci a HA. A davat session do databaze je sice mozne, ale zbytecne zatezujici, pokud to zase neni primo v nejake cache.
    10.8.2017 10:34 Kit | skóre: 45 | Brno
    Rozbalit Rozbalit vše Re: Používání cache na HTTP serverech
    Když databáze používá engine MEMORY, tak se cache nedělá - byla by zbytečná.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    11.8.2017 10:31 MP
    Rozbalit Rozbalit vše Re: Používání cache na HTTP serverech
    To neznam, ale muze to tak byt. Jenze v pripade databaze stale musite resit funkcionalitu z hlediska HA.
    11.8.2017 12:26 Kit | skóre: 45 | Brno
    Rozbalit Rozbalit vše Re: Používání cache na HTTP serverech
    Neřeší to náhodou databáze sama?
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    8.8.2017 17:46 cronin | skóre: 49
    Rozbalit Rozbalit vše Re: Používání cache na HTTP serverech
    Mám už nejaký ten rok skúsenosť s vývojom a nasadzovaním enterprise aplikácií a prakticky vždy platilo, že kdekoľvek sa píše "cache", číta sa "problém". Niektorí architekti navrhujú Varnish medzi dvomi Nginxami, Nginx medzi dvomi Varnishmi, replikovaný klaster Memcache serverov pristupovaný cez Mcrouter a podobné obskurnosti bez toho, aby sa niekto reálne unúval zmerať, aký je rozdiel vo výkonnosti bez cache a s ňou.

    Mantra je "measure, don't guess", a ak sa do infrašturktúry pridá komponent, ktorý vlastne ani sám o sebe neposkytuje business funkcionalitu, musí tento komponent merateľne riešiť signifikantne viac problémov, ako prináša.

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.