Web server a SQL pro 100K návštěv

Tom_as

Web server a SQL pro 100K návštěv
« kdy: 02. 03. 2011, 07:30:28 »
Zdravim,

poradil by nekdo jaka je dobra alternativa za apache2 a mysql pri tak velke navstevnosti?

Diky :)
« Poslední změna: 02. 03. 2011, 10:46:28 od Petr Krčmář »


Pindal

Re: Jaky web server a SQL pro 100 000 za den.
« Odpověď #1 kdy: 02. 03. 2011, 07:37:37 »
LOL. Žádná. Je třeba změnit myšlení. Hint: reverse proxy, CDN, cluster, cloud.

Re: Jaky web server a SQL pro 100 000 za den.
« Odpověď #2 kdy: 02. 03. 2011, 08:10:01 »
A co tak nginx namiesto apache?

Cpt.Nemo

Re: Jaky web server a SQL pro 100 000 za den.
« Odpověď #3 kdy: 02. 03. 2011, 08:12:40 »
Apache může zůstat, MySQL když tak nahradit PostgreSQL, ale hlavně nejřív udělat zátěžové testy. Pokud jsou prachy, tak pomocí Load Runneru (sám o sobě je drahý, ale dá se udělat pronájem) /WAPT(taky placený, ale není tak drahý)/jMeter(free). Rozhodně web server a SQL server jako sólo stroje. Mno a po zátěžových, ev. stress testech se rozhodnout, jestli bude stačit jenom posílit HW a nebo udělat round robin/cluster.

Otázka je co je to vlastně za aplikaci ... Někdy stačí jenom optimalizace a výkon aplikace letí nahoru a někdy je potřeba změni běhovou technologii ...

Misak

Re: Jaky web server a SQL pro 100 000 za den.
« Odpověď #4 kdy: 02. 03. 2011, 09:26:20 »
Optimalizovat aplikaci, zvazit nasazeni loadbalancingu.


Mordae

Re: Web server a SQL pro 100K návštěv za den
« Odpověď #5 kdy: 02. 03. 2011, 11:22:09 »
Mam blbej dotaz... a kolik je tam ve spicce nejvic requestu soucasne? Protoze to by pro Vas melo byt primarni.

Priklad 1: mate online hru, ktera vyzaduje, aby si lide jednou za 15 minut klikli na ikonku a tim mozna chytili mys (neco v duchu Mousehuntu na FB). Hraje to 100.000 lidi. Jsou to fakt zavislaci a tak klikaji vsichni 12 hodin denne, co 15 minut. Pri spravnem navrhu aplikace je vetsina loadu rovnomerne rozprostrena, takze 111rps + omacka kolem, obcas nekdo steluje nastaveni atp., takze o neco vic. Pak musite zmerit, kolik pozadavku tohoto typu obslouzite za sekundu a pripadne nasadit load-balancer. Nezapomente na rezervu.

Priklad 2: mate obchod, na ktery leze 100.000 lidi denne. Ve dvouhodinove spicce tam vleze cca 1/3, takze dejme tomu 30.000 lidi. Kazdy vygeneruje prumerne 10 pozadavku. To je 42rps. Staticky obsah bude dost objemny, protoze produkty maji urcite spoustu obrazku. Navic lidi budou prohlizet, takze Etagy jsou k nicemu a mozna bude treba servirovat obrazky ze separatniho stroje.

Priklad 3: mate web s televiznim programem (neco jako http://tvprogram.sms.cz/), leze tam 100.000 lidi denne, ale kazdy tak jednou. Vetsina zateze je odpoledne po ctvrte tak do desiti, dejme tomu 80%. To mame 80.000 pozadavku za 6 hodin, 3rps. To muze bezet na cemkoliv, ale je potreba spravne servirovat staticky obsah, protoze tam bude asi dost obrazku a zadny request se neopakuje, takze nepomuze Etag.

Pokud se pri pozadavcich saha do databaze, tak se snazte nacpat veskera data do pameti a zmerte si jestli se vse chova spravne napriklad pomoci saru, lepe muninem. Chcete aby vase disky stihaly zapisy a nikdy se nemuselo cist. Pokud to databaze nestiha kvuli procesoru, tak musite vymyslet, jak rozlozit zatez mezi vice databazi. Uvazoval jste o BigCouch? A nebo treba odhlehcit DB o nekriticka data pomoci redisu. Cacheovat data, ktera mohou byt stara pomoci memcached? Samozrejme ale jako prvni zkontrolujte, ze pouzivate indexy a ze netridite nesmyslne velka data.

Pak je tu jeste staticky content. Tady muze prijit vhod CDN, ale dost casto staci proste servirovat staticky obsah rovnou z nginx balanceru misto z pomaleho apache, nebo nedej boze cherrypy (nebo na cem bezi aplikace). Pokud to nestaci, pridejte server na staticky obsah a nechte nginx ho brat odtud. A nebo rovnou pouzijte jinou adresu a tahejte staticke veci ze static.mysupershop.tld.

Hlavni je porad merit. Sehnat realne statistiky zateze, zjistit co se taha, proc, kolik a nadimenzovat si reseni dle potreby. V nejhorsim pripade staci vzit logy weboveho serveru/load balanceru a proste je projet skriptem, ktery tu zatez v jednotlivych hodinach vytahne a vyplivne csv.