
Jelikož zastávám přesvědčení, že se nemá ztrácet čas s tím, co udělali jiní a lépe, je použitá klasická relační databáze. Nejdřív MS SQL (proto také ty historické koncovky .asp), nyní když je TOPlist LAMP (je hezké, že se dá zkratka použít pro Perl i Python, ještě by to chtělo nějaký jazyk P a P-shell), používám MySQL. Zatím ve verzi 4.0 a přemýšlím, jestli použít 4.1 nebo počkat až na 5.0. Pro zajímavost jsem vytáhl graf zátěže. Zelená čára je aktuální počet dotazů za vteřinu a modrá je průměr od startu.

Pochopitelně, v případě že se jedná o zatíženější aplikaci (mimochodem, minulé pondělí, ze kdy je ten graf, byla poprvé překonána hranice 60 miliónů měření za den, běžně je nad 55 miliónů) je potřeba pečlivý návrh a trochu se věnovat nastavení. Ovšem, i příslušný hardware.
Na TOPlistu mi databáze běží na IBM xSeries 345. V konfiguraci 2xXeon 3GHz, 2 GB RAM a 3+1 36GB (proč plus jedna bude dál) disky. Jedná se o rackový server velikosti 2U. Tradičně výborně je řešené uchycení. Lyžiny se nasazují tím, že se natáhnou západky, které se pak "nastřelí" do lišt ve skříni. A server se pak už jen na ně položí a zajistí. Takže žádné šroubování deseti šroubků a hledání zapadlých mezi kabeláží, ale s trochou cviku je za dvě minuty všechno vyřízeno. Jediný zádrhel může nastat s délkou. Většina hostingů má skříně pouze 80cm hluboké. A vzhledem k délce 70cm a prostoru potřebného k proudění chladícího vzduchu je potřeba použít skříň alespoň s metrovou hloubkou.
Na serverovně jsem ho zkusil vyfotit na mobilu. Když jsem to viděl, tak jsem si říkal, že tam někdy musím vzít digiták. Ale nakonec jsem se rozhodl pro tuhle, protože je taková autentická ("Proč jsou vždycky záběry UFO rozmazaný?" Hellboy). Dokonce se mi podařila stihnout zachytit i rozsvícená LEDka disku :-). Chtěl jsem původně všechny tři, ale po asi dvaceti pokusech jsem byl rád aspoň za tu jednu. Je tam vidět i jeden z webserverů, ale o těch třeba až jindy.

Takže k těm diskům. Někdy v půlce července odešel jeden z disků v poli. Díky RAIDu 5 vše běželo. Během dvou dnů IBM poslala nový a vyměnil se. Ale přecejen to bylo trochu nervoznější období, protože jak píše Terry Pratchett, jestli má něco pravděpodobnost jedna ku miliónu, můžete si být jistí, že se to stane (tedy v případě, že je to něco nepřijemného). Rozhodl jsem se proto využít jednu z funkcí, kterými se liší skutečný RAID řadič od toho, který za něj vydávají výrobci motherboardů. Přidal jsem hot-spare disk. Nyní je to ten vlevo dole.
Pro ty, kteří si nehrají se servery: jak název napovídá, jedná se o disk, který za normálních okolností "leží ladem". Ovšem ve chvíli, kdy některý z aktivních disků vykáže chybu a je odpojen, monitoring pošle SMSku a řadič sám automatický začne pole vytvářet na tomto záložním. Rozbitý disk se pak vymění a stane se z něj hot-spare. Možná vás napadlo, co se stane ve chvíli, když by odešel během vytváření další disk. Ano, pak by přišly ke slovu zálohy :-) Ovšem pravděpodobnost, že během hodiny (co trvá přestavění pole) odejdou dva disky je taková, že už Pratchettovi věřit nebudu. Není to sice součin obou pravděpodobností (takže ne jedna ku miliónu na druhou :-)), ale i tak je taková, že se spíš stane něco úplně jiného.
Instalace byla také docela jednoduchá. Disk se strčil do zásuvky, přes ipssend SCANDRIVES se řadiči řeklo, že má zjistit změny (tj. přidaný disk) a pak už jen SETSTATE HSP pro nastavení stavu. Disk dvakrát zablikal jako že jo a pak už jen GETCONFIG hlásí: State: Hot spare (HSP).
Tento příspěvek je víceméně odpověď Jirkovi Pallasovi v komentáři k předchozímu, ale třeba bude zajímat i někoho dalšího :-)
Po přibližně 14. dnech provozu je situace následující.
Průměrný provoz je přes 500 čtení a 300 nastavení za vteřinu. Při objemu dat kolem 170 MB je procesor P4@2.8GHz zatížený asi na 5%. A to ještě běží na 2.4 jádru, tj. bez podpory epollu [viz. libevent]. Na jiném projektu jej už používáme (Debian sarge a 2.6 jádro). Proklamované zrychlení o řády se sice nekonalo, ale "alespoň" v násobcích to bylo.
Doteď jsem informace o právě aktivních sessions ukládal klasicky do databáze.
Jelikož se nyní dosti zvedlo množství sledovaných návštěvníků, obsahovala ve špičce přes 3 milióny záznamů (součet všech online návštěvníků na všech měřených serverech) a počet dotazů do ní byl v řádech stovek za vteřinu. Proto jsem se rozhodl vyzkoušet na jejich uložení paměťový daemon. Nejsem příznivcem akademického "urob-si-sám" a tak jsem použil memcached, který už na jiných projektech nějakou dobu používáme.
Jedná se o jednoduchý prográmek, který umožňuje uložení víceméně libovolné struktury (klientské knihovny jsou pro Perl, Python, PHP, C ad. - samotný protokol je také primitivní) pod klíč.
Během dneška uvidím, jaký vliv to bude mít na samotné statistiky, ale metodika zůstává nezměněná (proč taky měnit to, co 8 let funguje), tj. min. 30 minut interval mezi návštěvami jednoho uživatele.
To hlavní už zmínil Yuhů. Já k tomu ještě dodám upřesnění. Filtr je podobný jako u refererů, tj. nepočítají se záznamy z kategorií Anglicky a Erotika.
Jinak se skutečně neměří na unikátní uživatele, ale návštěvy. Čímž, jak Dušan zmiňuje, je zohledněn nejen celkový počet, ale též aktivita zákazníků jednotlivých providerů.
K jeho tabulce za neděli připojuji pro ukázku TOP10 ze včerejška (pondělí 9.2.2004).
| 1. vol.cz | 4.72 % |
| 2. tiscali.cz | 4.29 % |
| 3. iol.cz | 4.17 % |
| 4. mistral.cz | 3.78 % |
| 5. eurotel.cz | 2.76 % |
| 6. aol.com | 2.28 % |
| 7. contactel.net | 2.11 % |
| 8. indos.cz | 2.08 % |
| 9. contactel.cz | 1.89 % |
| 10. karneval.cz | 1.29 % |
Rozdíl je vidět hlavně v poklesu podílu velkých providerů ve prospěch připojení ze škol a firem.
Jelikož:
a) se teď webserver celkem fláká
b) jsem si chtěl vyzkoušet mod_rewrite
c) mě štve Google tou svojí ignorací dynamických stránek
nastavil jsem Apache tak, aby bral i linky do kategorií jako adresáře. Takže žebříček weblogů nyní funguje i na adrese http://www.toplist.cz/weblogy. Odstránkování se děje přes "podadresář", např. http://www.toplist.cz/weblogy/50.
Když už jsem byl v tom, tak jsem zprovoznil i jednodušší přístup k podrobným statistikám, které jsou přes adresář stat a ID. Viz. http://toplist.cz/stat/50427.
Původní cesty přes dynamické adresy zůstávají zachovány.
Takže přesun byl v noci proveden podle plánu. Až na ignoraci hodinové expirace DNS záznamu u některých providerů (Contactel, Tiscali aj.) vše proběhlo relativně hladce.
Co se týče výkonu, má systém nyní dost velkou rezervu a navíc možnost snadného upgradu.
Yuhůů mne přemluvil, abych vytvořil stránku s nějakými celkovými statistikami TOPlistu. První verze je na adrese http://www.toplist.cz/global.html. Stránka je generována jednou denně.
Zatím jsou na ní podíly prohlížečů a op. systému podle kategorií za předchozí den (tj. ten den, jehož datum tam je napsáno :-)). Zobrazeny jsou pouze ty typy, které mají alespoň v jedné kategorii podíl nad 0,1%.
Ještě je tam tabulka s průběhem návštěvnosti během posledního týdne.
Další statistiky budou postupem času přibývat. Když mi dáte vědět, co chcete, pokusím se je vytvořit.
Ze statistik určitě vyčtete něco zajímavého. Já upozorním alespoň na to, co je přímo do očí bijící. Tím je skutečnost, jak moc se liší weblogová komunita od ostatních (jediná kategorie, kde má Gecko nad 10%, FreeBSD nad 0,1% apod. :-)).
Vím o tom, že probíhá diskuse nad rozdělením kategorie Weblogy na víc podkategorií (přehled je třeba u Každého blogujícího :-))
Nad tím jsem v minulosti už i přemýšlel (např. chovatelé by šli rozdělit na pejskaře, kočičkáře ad.). Nerad bych ale opustil výhody "jedné úrovně" - např. možnost rychlého přechodu z kategorie do kategorie pomocí selectu, odkaz na všechno hned z homepage apod. A zároveň nechci mít z TOPlistu katalog. V první řadě slouží k měření návštěvnosti.
Pokud vás ale napadne nějaký jednoduchý a účinný způsob jak to vyřešit, není problém jej aplikovat. Vaše náměty a připomínky jen uvítám buď v diskusi nebo na mailu.
UPDATE - Robert reagoval s námitkou, že by se měl filtrovat erotický obsah. Tohle TOPlist ovšem dělá odjakživa (viz. výpis všech kategorii či hledání, kde nejsou erotické stránky). Jen je někdy těžší rozhodnout, jestli je to víc osobní stránka exhibicionisty, blog nebo porno. Podobně dilema jako třeba v případě obchodu s erotickým zbožím. Je to erotika nebo virtuální obchod?
Dneska poodhalím trochu ze zákulisí TOPlistu. Pokud vás zajímá hardware, na kterém běží, tak vězte, že se jedna o:
MB MSI KT3 Ultra2
CPU Athlon 1800+
RAM 1GB
SCSI SEAGATE Model: ST318453LW @ Tekram DC-390U2W
A jak na tom běží mySQL můžete vidět třeba na http://www.toplist.cz/images/mysql.png. Jedná se o graf množství dotazů za vteřinu během několika posledních hodin.
Dnes to nebude ani tak funkce, jako spíš pomůcka k lepší funkcionalitě TOPlistu. Množina rozeznávaných prohlížečů a op. systémů má asi 99% podíl na trhu (za to, že jich dohromady je asi 20 druhů můžem třeba Billovi nadávat, ale prostě je to skutečnost. Pochopitelně, bylo by hezké počítat všechno, ale musím zase brát ohled na poměr cena/výkon, resp. počet/zatížení procesoru).
Pokud máte podezření, že váš prohlížeč či operační systém, jehož podíl se neblíží k nule, není detekován správně, můžete si jej ověřit na stránce http://www.toplist.cz/cgi-bin/test.pl, kde bude vypsáno co si myslí TOPlist a co o sobě tvrdí váš prohlížeč. A pokud to nebude souhlasit, tak mi prosím dejte vědět na pavel@toplist.cz.
| únor 2010 | ||||||
| Po | Út | St | Čt | Pá | So | Ne |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |