Neagresivní čtení RSS

Dnes nastraží uši zejména autoři weblogy.cz, jinak je za ně vytahám... ;)

RSS je jedním z pojmů, které jsou zmiňovány v každém Kiddies2.0 článku, takže si odpustím úvodní tlachy na téma "Co to je RSS a proč to je...?" a půjdu rovnou k věci.

Na Bloguje je několik tisíc RSS kanálů k odběru (když počítám i RSS pro komentáře a pro jednotlivé rubriky, tak několik desítek tisíc). V únoru bylo 4.5% požadavků na server právě na soubor rss.xml. Nemusí se to zdát moc, ale co do počtu dotazů to je hezké druhé místo, hned za požadavkem na úvodní stránky blogů (4.91%). Když k tomu přičtu přístupy na comments.xml, tak je to nastejno.

Bývalo hůř. Před rokem bylo požadavků na rss.xml téměř jedenáct procent. Když se dívám do přehledu useragents, vidím zřetelný ústup stand-alone čteček (na třetím místě byl v březnu 2006 FeedReader; dnes ve statistice Top20 chybí úplně). Nemohu z toho však usuzovat na nějaký masivnější nástup online RSS čteček. Ty se objevují pouze ve statistice požadavků na RSS kanály, mezi referery vidět nejsou...

Kromě RSS čteček se na utěšeném trafficu podílí i online agregátory. Bohužel, jejich autoři velmi často neřeší situaci "co bude až...", takže jejich robot pracuje na prostém principu "přečtu, jdu dál, přečtu znovu za X". Problém nastává ve chvíli, kdy agregátor začne agregovat víc zdrojů z jednoho serveru. To pak přístupy naskakují a situace začíná připomínat nepovedený DoS útok.

Samosebou že řešení existuje. Řešení existuje vždy, když je dobrá vůle k dohodě. V tomto směru je moje zkušenost s autory českých agregátorů velmi tristní (s čestnými výjimkami). Dovolte dvě ilustrační historky:

Provozovatel prvního agregátoru, dnes již neexistujícího, mi na upozornění, že jejich stroj nám dělá vyšší traffic než je zdrávo odpověděl, že ONI jsou největší agregátor, a že taky proto mají hodně požadavků, že to tak prostě je a že změna algoritmu by byla u jejich zaběhnutého systému velmi složitá, což si jistě dovedu představit, takže nashledanou. K rozumu přišel až po známém triku s "deny from ..." a implementoval řešení, které jsem mu od počátku navrhoval. Od té doby nebyl problém. S nimi.

Přišli jiní. Situace se opakovala – mnoho dotazů, "deny from ...", po čase otázka PROČ jsou zablokovaní, zase povídání o největším agregátoru (okořeněné řečmi o tom, jak "nám přivádějí uživatele"), tlachy typu "nezatěžujeme vás, čteme zdroje jednou za šest hodin" (ale při počtu který četli se stávalo, že přišlo 80 dotazů za 40 sekund), na můj návrh odpověď ve stylu "to se nám nevyplatí kvůli vám to předělávat...", kontranávrh ("Tak nám posílejte PING vždy když bude nový příspěvek") a po těchto žertovných mailech s neskrývanými osobními antipatiemi nakonec i oni přistoupili na řešení, které jsem navrhoval.

Autoři agregátorů by si měli uvědomit, že efekt "přivádíme vám čtenáře" je pro velký blogovací server nicotný v porovnání s efektem "my máme ta data, bez nichž je vaše služba nanic", a měli by se chovat ke zdrojům těch dat šetrněji. Podojit, ale ne z nich cedit krev. (Při pohledu do statistik vidím dokonce velmi silný nepoměr mezi tím, jak agregátory přistupují a kolik přivedou lidí; dle počtu "přivedených lidí" je efekt agregátorů mizivý jak relativně, tak absolutně.)

Jaké je to "šetrné řešení", které jsem navrhoval? Prosté. Využít globálního agregovaného RSS kanálu, který Bloguje nabízí a který obsahuje u každé ITEM položky i tag source. Agregátor stáhne tento kanál a roztřídi si příspěvky k těm kanálům, které sleduje. Stejné agregované RSS nabízí i další blogoservery (jen nemají parametr SOURCE, takže je jejich parsování o něco těžší).

Když už se budete, milí autoři čteček a agregátorů, dívat do té RSS specifikace, tak se podívejte i na tagy ttl, skipHours   a skipDays. Sice jsem je zatím skoro nikde neviděl, ale jistě se začnou objevovat, s tím jak jejich potřeba bude časem narůstat.

Za naprostou samozřejmost považuji alespoň minimální inteligenci robota, kterému dojde, že když v čase T nebyl žádný nový příspěvek, v čase T+5 minut taky ne, v T+10 taky ne a v T+15 opět ne, tak že je nesmysl číst v T+20 a nejspíš i v T+25, že by stačilo bohatě čtení v T+30, T+45, T+60 a když ani pak nebude nic nového, tak se přijít podívat za dvě hodiny, za tři, za šest... Pokud jste ale "posedlí aktuálností", tak nezbyde než prohlížet agregované RSS.

Děkuji za pozornost, doufám že jste si vzali ponaučení a když ne, tak – sejdeme se v .htaccess :)

Dne 16.02.2007

Twittni

Přidej do: asdf.sk StumbleUpon Toolbar Stumble It!

Komentáře

[1] (Lokutus - WWW) 16.02.2007, 10:53:55 [X] [D]
"Tak nám posílejte PING vždy když bude nový příspěvek"

Ježiškriste. Socanské myšlení v plné parádě. Převést vlastní odpovědnost na protistranu.

[2] (Arthur Dent ) 16.02.2007, 11:06:49 [X] [D]
[1] Pozor pozor, Lokute... Ten pán to nazýval "systémovým řešením"! Odpověděl jsem mu, že "oni chtějí data, oni ať se tedy starají", že my nijaký extra zájem na tom jim je dávat nemáme. :)

[3] :-)) (Roj - WWW) 16.02.2007, 11:07:09 [X] [D]
Posledni vetous me odboural :-)

[4] (Lokutus - WWW) 16.02.2007, 11:17:10 [X] [D]
[2] Systémově s někým vyjebat umí dneska kdekdo. Spousta lidí na to má i vysokou.

[5] Jestli-Sezměnilo-Od (dgx - WWW) 16.02.2007, 11:33:15 [X] [D]
Nevím, jestli jsi to nezmínil, protože jde o samozřejmost, ale jako klíčovou vlastnost příjemce a zdroje RSS dat považuji podporu HTTP hlaviček If-Modified-Since, etag apod.

Tedy RSS čtečka nebo robot agregátora se zeptají "Je něco nového od pátku osmi hodin ráno?". Zdroj odpoví: "ne" a tím komunikace končí. Samozřejmě je nutné, aby odpověď zdroje měla minimální nároky na výkon serveru, tedy řešení: sestavím odpověď, udělám MD5 a porovnám - je špatné.

A dále pak musí webový agregátor, nyní jakožto zdroj RSS kanálu, umět takto komunikovat i s čtečkou. Aby řekl "Ne", a neposílal vždy celý kanál. Šetří trafik uživateli, ale také obrovský trafic sám sobě.

Mezi svými RSS kanály mám tuším jen dva, co to neumí a data posílají vždy. A taky tuším, že jeden z těch dvou jsou právě zmiňované Weblogy ;)

[6] (Arthur Dent - WWW) 16.02.2007, 11:43:07 [X] [D]
[5] Taky proto se mi zdá rozumné mít RSS předgenerované na disku jako normální XML soubor. Server pak nemusí tápat a ptát se, ale prostě koukne na Last-Modify-Timestamp :)

Od čtečky/robota to vyžaduje aby onu Jestliže-Změněno-Od posílal, páč bez toho je to nanic. A můžeme pro zajímavost udělat takový drobný quis: "Posílá vaše čtečka If-Modified-Since?" Doporučené pomůcky: Ethereal. :) To se, mám dojem, teprv zasmějeme :)

[7] (dgx - Mail - WWW) 16.02.2007, 11:47:25 [X] [D]
> Za naprostou samozřejmost považuji alespoň minimální inteligenci robota, kterému dojde, že když v čase T nebyl žádný nový příspěvek, v čase T+5 minut taky ne, v T+10 taky ne...

- "Mami, už tam budeme?"
- "Ne."
- "Už tam budeme?"
- "Ne."
- "Už tam budeme?"
- "Ještě ne."
- "Už tam budeme?"
- "Ne."
- "Už tam budeme?"
- "Ne."

Prostě jak cestování s dítětem :-)

[8] (Věroš - WWW) 16.02.2007, 12:10:30 [X] [D]
Případně pro jednoduché a rychlé testování (vedlejší produkt RSS agregátoru) je možné použít http://rss.na-mytince.cz/ - otestuje na Etag a Last-Modified.

[9] (SuE ) 16.02.2007, 12:19:11 [X] [D]
pro cestování s dítětem je lepší tato časová smyčka:
-kdy tam budeme?
-až tam dojdeme
-a kdy tam dojdeme?
-až tam budeme

[10] (Lokutus - WWW) 16.02.2007, 12:23:17 [X] [D]
[9] -a už jsme tam dojeli?

[11] (paranid ) 16.02.2007, 12:59:05 [X] [D]
Když už jsme u těch RSS. Neznám způsob, jak Bloguje generuje komentářové RSS, ale chtěl zeptat, jestli by bylo složité, aby se generovaly odkazy typu http://zapisnik.maly.cz/486172-neagresivni-cteni-rss.html#cmt_5 místo prostého http://zapisnik.maly.cz/486172-neagresivni-cteni-rss.html ? Btw, úprava description potěšila. Děkuji.

[12] (Arthur Dent ) 16.02.2007, 13:06:39 [X] [D]
[11] Zamyslím se, ale mám dojem, že to problém je :)

[13] (dgx - Mail - WWW) 16.02.2007, 13:09:40 [X] [D]
[11] no jasně, já si říkal, že ještě jedna věc mi tam vadila, ale nemohl jsem si vzpomenout. Arthure, tohle je poslední!

[14] (Arthur Dent ) 16.02.2007, 14:07:14 [X] [D]
[11][13] Check it now...

[15] (rony ) 16.02.2007, 15:08:09 [X] [D]
[8] very vdaka za http://rss.na-mytince.cz/ mi ukazalo, ze moj http://spravodaj.madaj.net/rss.php nie je totozny s http://spravodaj.madaj.net/rss.xml a musim to php zlepsit.

k problemu online agregatorov: ja do nich nevidim ale mam pocit, ze to tak niekto najde na webe kniznicu typu magpie a napadne ho myslienka: a teraz spacham webku. ti lepsi najdu simplepie.

co nie je problem ak si na svoju domacu "webovku" pichnete RSS svojich dvoch oblubenych webov, moze problem byt ak sa magpie bude starat o stovky RSSiek...

a cloviecik skonci na tom, ze tu kniznicu nedokaze nijako nekonfliktne preprogramovat pretoze ma minimalne skusenosti s myslenim na globalne problemy ;-)

no a vzdy sa s bastlenim uspokojime stotinu sekundy po zisteni, ze to funguje.

spoliehat sa na to, ze stovky webov zacnu generovat v rss cosi naviac co sa neda ale da sa spisat strucny text so zasadami, ktore by sme ako producenti RSS mali dodrzovat ako pismo svate bez debatovania o vyzname jednotlivych bodov :-)

zatial som sa nedopatral k takemu strucnemu a pochopitelnemu zoznamu :-)

1. bod by mohol byt: generujte do RSS prispevky za niekolko poslednych dni a zaroven nikdy nie viac ako 15. Nehanbite sa mat "prazdne" RSS ak ste dva tyzdne nic nenapisali.

2. celkova velkost RSS suboru by nemala presiahnut XXX bajtov.

3. predtym ako idete robit zasahy v uz zverejnenom RSS kanali, tak najprv si odladte skript v testovacej kopii a az po dokladnom otestovani vymente povodny skript za novy.

4. RSS negenerujte dynamicky ale pripravujte ho offline ako staticky subor vzdy iba ked sa naozaj prida novy prispevok na webe. Tymto bodom usetrite zdroje svojho servra ale aj odberatelov.

5. pre dodatocne informacie mimo nadpis, anotaciu a adresu, vyuzivajte vyvinutejsie a modernejsie formaty RSS a Atom a nikdy nespajajte dve rozne informacie do jedinej polozky (typicky nespajajte nadpis prispevku s menom autora)

6. pred prvym zverejnenim adresy RSS kanalu a jeho prihlasenim do online katalogov si dokladne premyslite jeho adresu a snazte sa ju uz naveky ponechat nezmenenu! V pripade vymeny publikacneho systemu smerujte prostriedkami webservera poziadavky na staru adresu na novu.

7. vyuzivajte polozky ako "posledna zmena", "cas po ktorom je povolene opatovne stiahnutie RSS" a nastavte tieto hodnoty na SKUTOCNU dobu - ak pisete jeden prispevok denne, tak nastavte 24 hodin.

8. nedavajte do RSS cele siahodlhe texty clankov a nikdy taketo RSS kanaly nepropagujte v online katalogoch a pouzivajte ich iba v "utajenom rezime" ak take nieco niekto naozaj bude potrebovat.

...

[16] (rony - WWW) 16.02.2007, 15:16:43 [X] [D]
tak som sa rozhodol, ze v pondelok publikujem tieto body ako clanok s moznostou mi aktivne komentovat a prispiet k lepsej formulacii tychto bodov, tieto som napisal naozaj narychlo z hlavy ;-)

[17] Super (paranid ) 16.02.2007, 16:12:06 [X] [D]
[14] Děkuji. Hodně rychle vyřešený problém. :-)

[18] (Věroš - WWW) 16.02.2007, 17:56:18 [X] [D]
[15] Ještě prosím **používejte** element `guid`.

[19] (Radek Hulán - WWW) 16.02.2007, 18:26:20 [X] [D]
[7] přesně kvůli tomu mám v autě GPS. Teď stačí říci "koukni se na GPS a mlč!" ;-) (pro neznalé, GPS navigace ukazuje i odhad času, za jak dlouho člověk bude v cíli)

[20] globus (kahi - WWW) 16.02.2007, 21:24:49 [X] [D]
Díky za zajímavý článek. Jen bych se chtěl zeptat... neměl by lastBuildDate a pubDate v globálním bloguje feedu být identický s hodnotami posledního postu?

[21] (Arthur Dent - WWW) 16.02.2007, 21:35:51 [X] [D]
[20] Ne nutně. Globální RSS je cachován a generován nezávisle jednou za pět minut, nikoli při každém příspěvku, takže nejnovější příspěvek nemusí v globálním RSS po svém vydání být. Bude tam za pět minut. :)

[22] díky za cookies (kahi - WWW) 16.02.2007, 22:14:47 [X] [D]
[21] Posledním postem jsem myslel poslední z toho feedu (nejnovější, první item :). Pokud se dobře dívám, tak v lastBuildDate a pubDate se vypisuje aktuální čas. Který mi tam nepřijde smysluplný. (Zvlášť když by měl být feed čten z cache :-).)

[23] (Arthur Dent - WWW) 16.02.2007, 22:24:45 [X] [D]
[22] Díky, opraveno. Mrška cache byla až ZA tou hlavičkou. Proč, to netuším :) Díky.

[24] díky za ty ryby (kahi - WWW) 16.02.2007, 22:36:17 [X] [D]
Není za co, jsem altruista. :)

[25] (Arthur Dent - WWW) 16.02.2007, 22:38:53 [X] [D]
[24] Fuj! Běž s tím k doktorovi dřív, než se ti to zanítí. Zatím si to máčej v hypermanganu a dvakrát denně kloktej Savo.

[26] (rony ) 17.02.2007, 10:48:31 [X] [D]
[20] [21] [22] to ma privadza k myslienke, ze nahradou za absentujuci lastbuilddate a pubdate moze pre inteligentny agregator byt datum publikovania prveho item.

dokonca inteligentnejsi agregator si moze porovnat intervaly publikovania jednotlivych item a tak si stanovit cas nasledujuceho nacitania RSS daneho zdroja.

cize ak najnovsi prispevok bol publikovany pred 2 dnami, tak sa na dane RSS pozriem o 2 dni :-) - to by mohlo vies k spekulaciam kedy by RSS spammer umelo menil datumy publikovania, voci tomu inteligentnu ochranu treba vymysliet :-) - cojaviem pamatat si, ze toto URL bolo publikovane v dany cas ale cistou nahodou sa to teraz zmenilo, co by mohol system proste ignorovat a brat ako platny udaj ten prvy.

[27] (kahi - WWW) 17.02.2007, 21:45:14 [X] [D]
[26] - určitě, inteligentní agregátor by mohl dokázat spočítat průměrný rozdíl v čase mezi dvěma příspěvky... chvíli jsem uvažoval, že altruisticky vyplivnu i php kód, ale pak jsem si to rozmyslel :-)

[28] (Arthur Dent ) 17.02.2007, 21:56:55 [X] [D]
[27] Je vidět, že to Savo zabralo...
[26] Nevím, ale prostou úvahou se mi to zdá jako dost blbej nápad, navíc k ničemu. Zítra se na to podívám podrobněji...

[29] (M - WWW) 18.02.2007, 00:40:10 [X] [D]
Díky za upozornění.

[30] (Arthur Dent ) 18.02.2007, 00:45:59 [X] [D]
[29] Podrobnosti by nebyly? :)

[31] díky (lední brtník ) 18.02.2007, 00:53:52 [X] [D]
řeší se tu sice rss pro agregátory a já jsem pouze svůj uživatel, ale předpokládám že to tu hlavní programátor čte :) tak nechám vzkaz:
komentářům přes comments.xml pro přehlednost chybělo odlišení, když ne jméno autora tak nadpisy, ale ty nikdo nevyplňuje - tento týden se tam začaly vkládat začátky příspěvků. a teď je to doplněno názvem příslušného článku. dík za to.

[32] (Arthur Dent ) 18.02.2007, 01:01:44 [X] [D]
[31] Jméno autora v comments.xml samosebou je. Je tam tak, jak specifikace předepisuje, tedy v tagu AUTHOR. Bohužel některé čtečky toto pole nezobrazují. Začátky komentářů jsem dodělal, protže mě prudilo koukat na desítky {bez nadpisu}; název článku si přála Žirafka, poděkuj jí...

[33] magpieRSS (tomáš ) 18.02.2007, 23:50:54 [X] [D]
[15] zdravím, tohle se mě přímo dotklo, zrovna jsem si něco takovýho udělal :) bez mučení se přiznám že nemám znalosti abych porozuměl celýmu magpie, chtěl bych se zeptat jak až je to zatěžující prvek pro poskytovatale rss? ono to má sice nějaké svoje kešování a ale...

díky

[34] (Arthur Dent ) 18.02.2007, 23:58:52 [X] [D]
[33] Jak psal Rony v [15] - pokud je Magpie použit k čtení jednoho, dvou, pěti RSS kanálů, tak s tím problém není. Pokud bude číst třeba 200 kanálů z jednoho serveru, tak už by stálo za úvahu udělat to nějak jinak.

[35] (tomáš ) 19.02.2007, 00:36:35 [X] [D]
ok, jde o více serverů a malé množství, takže pohoda. díky

ještě by mě zajímalo na jaké řešení přistoupili (agregátor), v článku není napsáno jaké bylo.

[36] (Arthur Dent ) 19.02.2007, 00:41:06 [X] [D]
[35] V článku to napsáno je, je to odstavec začínající slovy: "Jaké je to šetrné řešení, které jsem navrhoval?" ...

[37] (endlife - Mail - WWW) 19.02.2007, 07:05:26 [X] [D]
Tak mě napadá, že když robot očekoval rss a nic nového tam nebylo před 25 minutami, ani před 20 minutami, ani před 15 minutami a ani před 10 minutami a ani před 5 minutami, tak spíš vzrůstá pravděpodobnost, že by se zrovna teď měl objevit nový článek, když už tak dlouho žádný nebyl, a měl by to tedy vyzkoušet třeba už za tři minuty a pak dále zrychlovat, ne?

:)

[38] (dgx - Mail - WWW) 19.02.2007, 12:04:47 [X] [D]
[37] případně poslat autorovi blogu email, že co jako?

[39] (Arthur Dent ) 19.02.2007, 12:11:39 [X] [D]
[38] Doporučuju prověřenou formulaci: "Ještě toho svým čtenářům hodně dlužíš!"