skokové zvýšení návštěvnosti přes noc, nemáte tipy co dělat?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
mcmatak
Člen | 504
+
0
-

jeden projekt mne překvapil a přes noc vyrostl z 2000 unikatů denně na 10000 unikátů

a co je horší ti lidé klikají jak zběsilý, každou sekundu více než 200req, už jsem koupil dva nové procesory takže nějak se to snad bude řešit, ale stejně

máte někdo tipy na tyto problémy?

třeba nějaký článek o hlavičkách js/css aby se cachovali, aby to vůbec se serveru neptalo, vzhledem k tomu, že stejně webloader checkuje podle filemtime nazev css/js spritu tak není potřeba ještě odesílat uživateli nebo něco kontrolovat, aktuálnost je zajištěna na straně nette

přiznám se že kešovaným hlavičkám sem nikdy neporozuměl, vždy např. eshop stejně potřebujete mít neustále aktuální jak to chcete cachovat? vždyť je tam strašně moc dynamických prvků

nebavím se teď o cache na straně nette, kdy nemusím šahat do dtb apod., ale cache mezi prohlížeči, o tom že mám s každým req 62 subreq na obrázky, css, js atd.

nAS
Člen | 277
+
0
-
  • statická data (js, css, img, …) dej na jiný server a použij tam např. lighttpd, hlavně ne Apache
  • pokuď tam máš hodně požadavků na js a css, zkus spojit související js do jednoho (a stejně css)
  • malé obrázky taky můžeš spojit do jednoho (css sprites)
  • o hodně můžeš snížit počet requestů tak, že si při každém deployi vygeneruješ nějaký hash a ten přidáváš do URL všech statických dat (např.: http://example.com/img.jpg?… ) a pak můžeš odesílat hlavičku, že stačí soubor kontrolovat třeba 1× za den. A při dalším deployi se změní hash, prohlížeč to bere za nový soubor a zase si ho vyžádá.
  • případně dej statická data na nějaké CDN a máš to pořešené (ale zase za to zaplatíš)
Patrik Votoček
Člen | 2221
+
0
-

nebavím se teď o cache na straně nette, kdy nemusím šahat do dtb apod., ale cache mezi prohlížeči, o tom že mám s každým req 62 subreq na obrázky, css, js atd.

v tom případě to na tohle fórum nepatří

EDIT: kua zase pozdě

mcmatak
Člen | 504
+
0
-
  1. css/js sprity jak říkám používám webloader, nicméně ten prostě když spojuje 20 souborů tak udělá 20× filemtime a to je problém
  2. image sprity no o nich vím, ale doporučujete udělat sprite na celý náhled? protože ono těch buttonů a ikonek je dohromady tak 5–10 víc prostě ne, ale jo je mi jasné že je to jedna z věcí
  3. CDN, jiný server hmmm, jen si říkám jestli je to reálné pořizovat další hosting? nebo další server?
  4. varnish mi nic neříká zkusím prohledat

tohle taky zajímavé
o hodně můžeš snížit počet requestů tak, že si při každém deployi vygeneruješ nějaký hash a ten přidáváš do URL všech statických dat (např.: http://example.com/img.jpg… ) a pak můžeš odesílat hlavičku, že stačí soubor kontrolovat třeba 1× za den. A při dalším deployi se změní hash, prohlížeč to bere za nový soubor a zase si ho vyžádá.

to musím promyslet

Editoval mcmatak (8. 2. 2012 14:35)

Nox
Člen | 378
+
0
-
  1. Tak si to uprav ať se výsledek cachne a kontroluje se jen existence toho výsledku…při změně to smažeš = –19× filemtime. Obecně mi přijde účinnější než zkoušet něco zrychlit je se pokusit to úplně přeskočit.
  2. –9 requestů je málo? bez dlouhé expires to je –1800 requestů za sekundu

Koukni třeba na youtube: http://s.ytimg.com/…flcB5eQ_.png

Editoval Nox (8. 2. 2012 16:17)

mcmatak
Člen | 504
+
0
-
  1. To nejde cache je pravé založena na těch 19 filemtime, nevím jak to obejít
  2. 10 ikonek na cely projekt jsou třeba dva Buttony na page tady toho moc nenazenu, mě spis zajímá jestli existuje něco aby prohlížeč si vůbec o cachnute obrázky neříkal?
iguana007
Člen | 970
+
0
-

Já mám na statický content (obrázky apod.) samostatný server s krátkou doménou (něco jak má výše zmíněný Youtube) a ten rozdíl je hned znát :)

mcmatak
Člen | 504
+
0
-

Jo to beru to zni dobře ale kolik me to bude stát? Jak to zařídit další server není žádná sranda

Nox
Člen | 378
+
0
-

Proč by to nešlo? Říkám → přepiš si to. Jestli to chápu dobře, tak ten skript ověřuje aktuálnost těch různých zdrojových souborů ⇒ zruš to. Bude jen ověřovat existenci finálního souboru. Takže jediný rozdíl bude, že při změně nějakého z těch souborů tento finální soubor smažeš, místo aby se detekovala změna ve zdrojích sama a za to dostaneš –3800× filemtime / sec.

Panda
Člen | 569
+
0
-

nginx + PHP FastCGI Process Manager, tím získáš poměrně snadno nějaký výkon i bez dalšího serveru (zvlášť co se týče toho statického obsahu, ale i to PHPčko se bude pak mnohem lépe vypořádá se zátěží).

Jinak pro obrázky, JS a CSS přidat expires, obsah předgzipovat, nasadit APC (pokud ještě není), upravit ten WebLoader…

Melmen
Člen | 132
+
0
-

Panda napsal(a):

Ohledně toho NGINXu, na serveru jsem ho používal spolu s apache jako reverzní proxy. Nginx mi běžel na portu 80, přijímal požadavky. Statistické stránky (obrázky, css a js) zpracovával sám, zbytek se poslal na apache kterej běžel na localhost:8283 – pro každý virtualhost jiný port. A hlavně jsem mohl používat „apačský .htaccess“ :)

Editoval Melmen (8. 2. 2012 19:46)

Panda
Člen | 569
+
0
-

A právě nginx nic jako „apačský .htaccess“ nezná a proto může mít takový výkon. ;-)

.htaccess je k ničemu. Je to soubor, který se modifikuje jen jednou za několik měsíců/let a pak se z něj jen milionkrát za den zbytečně čte. A přitom to jde všechno pohodlně nastavit v configuráku vhostu. Pokud někomu na projektu vadí 19× filemtime, tak první, čeho by se měl zbavit, je právě .htaccess.

Mimochodem: zkus si poslat 500 současných PHP požadavků na Apache + mod_php a pak nginx + PHP FPM. Druhá konfigurace se s tím vypořádá mnohem lépe.

mcmatak
Člen | 504
+
0
-

Nox: Nj ale já nevím jak to přepsat, název souboru je přece unikátní a závisí na aktualni verzi všech 20 souboru a proto je tvořen nejakym hash z jejich nazvu jak jinak to uděláš?

Panda: gzip děla server automaticky, apc mám,

Obrázky, css, js expres nastuduji ale jak vyřešit aby se na ne browser vůbec neptal?tak jako tak to bude req ne?

Nginx bude pro mého správce asi moc divoká voda

Ale ty benchmarky mne docela zajimaji

Nox
Člen | 378
+
0
-

mcmatak napsal(a):

Nox: Nj ale já nevím jak to přepsat, název souboru je přece unikátní a závisí na aktualni verzi všech > 20 souboru a proto je tvořen nejakym hash z jejich nazvu jak jinak to uděláš?

Dáš to tak, aby metoda příjmala identifikátor, který pak použije pro vytvoření jména … podobně jako u cache->save používáš nějaký key místo aby to byl hash obsahu

mcmatak
Člen | 504
+
0
-

Nox: jeden z nás to nedomyslel do konce, jak určit ten identifikátor? Na zaklade čeho? Protože obvykle to bude nejvyšší filemtime nebo názvy ale jak ten identifikátor vytvořit?

iguana007
Člen | 970
+
0
-

mcmatak napsal(a):

Nox: jeden z nás to nedomyslel do konce, jak určit ten identifikátor? Na zaklade čeho? Protože obvykle to bude nejvyšší filemtime nebo názvy ale jak ten identifikátor vytvořit?

Co to je za web, že to tak strašně řešíš? Přeci stačí ty soubory přegenerovat, pouze když tam něco změníš … nebo ty css a js se ti tam mění nějak za chodu samy?
Při deploy nové/upravené verze nevidím zas tak velký problém smazat nějaký výsledný vygenerovaný soubor, aby se přegeneroval znovu sám.
Spíše bych se zaměřil na ten statický obsah, expire, cache apod.

Nox
Člen | 378
+
0
-

iguana007
Myslim že mcmatak řeší vše, jen u tohoto jsme se zatím ještě nepochopili, tak je k tomu více příspěvků. Ale jde tu zmínit vše, co může dopomoct k lepšímu výkonu.

mcmatak napsal(a):

Nox: jeden z nás to nedomyslel do konce, jak určit ten identifikátor? Na zaklade čeho? Protože obvykle > to bude nejvyšší filemtime nebo názvy ale jak ten identifikátor vytvořit?

Proto jsem ti tam dal příklad s cachí, identifikátor/klíč si vybereš stejně jako u cache si vymyslíš vhodný řetězec. Jednoduše tam kde by webloader generoval název teď místo toho použije tebou dosazený → zruší se tahle závislost na daných souborech. Viz iguana007 přepokládám, že nemáš nějaký hyperdynamický systém, takže když budeš ty CSS/JS deployovat, tak ten jeden cachovaný soubor mázneš a je to.

Editoval Nox (8. 2. 2012 23:58)

Patrik Votoček
Člen | 2221
+
0
-

mcmatak napsal(a):

Nox: Nj ale já nevím jak to přepsat, název souboru je přece unikátní a závisí na aktualni verzi všech 20 souboru a proto je tvořen nejakym hash z jejich nazvu jak jinak to uděláš?

Pokud mám hodně navštěvovaný projekt měl by statický obsah (JS, CSS, obrázky) servírovat přímo HTTP server (právě z důvodů snížení zátěže). Proto bych se vykašlal na celej webloader (nebo jak se to jmenuje). A řešil vytvoření jednoho minifikovaného CSS / JS souboru už při deploymentu.

… ale jak vyřešit aby se na ne browser vůbec neptal?tak jako tak to bude req ne?

Pošleš patřičné hlavičky. Neco o tom je v tom videu o Varnish cache nebo http://symfony.com/…aris2011/574 nebo tady http://webexpo.cz/…ie-kesovani/

Nginx bude pro mého správce asi moc divoká voda

Tohle je ale jedna z věcí, která dokáže serveru doopravdy hodně ulehčit.

mcmatak
Člen | 504
+
0
-

Ad. Webloader stejny název souboru no a co na to prohlížeč který uz si takový název stáhl? Jak to pak funguje jak ho donutím si ho změnit

Každopádně jdu nastudovat ty materiály ať se máme o čem bavit

Nox
Člen | 378
+
0
-

Už se o tom tady mluvilo: expires header a/nebo hash https://forum.nette.org/…ipy-co-delat#…

llook
Člen | 407
+
0
-

mcmatak napsal(a):

Obrázky, css, js expres nastuduji ale jak vyřešit aby se na ne browser vůbec neptal?tak jako tak to bude req ne?

To vyřešíš posíláním správných hlaviček, především Expires. Nevím teď přesně zápis, ale nějak lze v Apachi nastavit třeba tak, aby každý JPG/GIF/PNG/CSS/JS soubor vracel Expires: Sun, 9 Feb 2020 12:05:01 GMT a pak se na ty soubory prohlížeč hodně dlouho ptát nebude.

Tady je to docela vyčerpávajícně popsáno: http://www.jakpsatweb.cz/…slation.html

Někde bych si pak nadefinoval kód, který bych v šabloně přidal ke všem těm odkazům na statické soubory:

<img src='obrazek.jpg?{$version}>

Když změníš $version, pro prohlížeč se tím změní adresa obrázku a načte si ho znova.

Panda
Člen | 569
+
0
-

mcmatak napsal(a):

Panda: gzip děla server automaticky, apc mám,

To určitě dělá, ale při každém požadavku a pak výsledek zapomene. :-) To předgzipování je kvůli tomu, aby se nemuselo při každém požadavku znovu komprimovat a aby se mohl načítat menší soubor.

Jinak mě ještě napadla jedna věc, jak poměrně levně zvýšit hodně výkon – RAM disk. Pokud bys tam dal ten obsah, ke kterému se často přistupuje (JS/CSS + třeba PHP, ale s APC to asi nemá moc význam), tak by to mohlo hodně ulehčit disku a snížit přístupové doby.

V první řadě bych ale analyzoval, co nejvíc zpomaluje a nasadil ten nginx + PHP FPM. Na konfiguraci není nijak složitý a ulehčí opravdu hodně.

ic
Člen | 430
+
0
-

Sice to přímo nesouvisí s nette, ale hodně pomůže zmenšit počet obrázků… jednak obrázky použité na jedné stránce sloučit do jednoho (viz google: http://www.google.cz/…_logo102.png) a posouvat pak zobrazenou část pomocí css.

No a pak taky není na škodu některé obrázky vyházet a nahradit je nějakou z novinek css3… pak lze bez obrázku mít kulaté rohy, přechody, stíny textu i elementů, natočené boxíky a mnoho dalších. Těch co by to jejich prohlížeče nezobrazili stále ubývá.

iguana007
Člen | 970
+
0
-

ic napsal(a):

Sice to přímo nesouvisí s nette, ale hodně pomůže zmenšit počet obrázků…

To už tady padlo, jedná se o výše zmíněné CSS sprites

CSS3 je taky cesta, ale bohužel ještě ten support ze strany prohlížečů není úplně tak, jak bychom si to představovali…

srigi
Nette Blogger | 558
+
0
-

Celkom dobre tipy na zrychlenie Apache sa nachadzaju v .htaccess projektu HTML5Boilerplate. Odporucam prestudovat kazdemu.