
Jak jsme si shazovali cloud a nevěděli o tom
22. 5. 2025 | Ing. Tomáš Hojgr, MBA | majitel
V posledních dnech jsme zaznamenali několik 2-4 minutových výpadků a netušili, co je způsobuje. Už to víme.
Máme aktivní ochranu proti dotěrným botům
Botů, kteří skenují weby je stále víc. S nástupem AI jsou schopni analyzovat větší data a tak jsou stále dotěrnější, způsobují stále větší parazitní zátěž. Ta je nežádoucí.
Google a Seznam u nás mají vyjímku, nějaké výjimky má i Meta. Ostatní boty necháme fungovat, ale když přehánějí limity slušnosti (doporučené v robots.txt), řekneme jim to a případně jim zamezíme přístup.
Jak funguje naše ochrana proti botům
Logujeme každého návštěvníka. A když několik minut po sobě stahuje více stránek za sekundu, než by zvládl člověk, na chvíli jej omezíme. Řekneme, že to přehání a necháme jej stahovat jen určitý počet stránek za sekundu.
Když si nedá říct, na chvíli jej zablokujeme. A když nepřestane, nebo se za chvíli zblázní znovu, zablokujeme jej na dýl.
S botem lze komunikovat několika způsoby:
- Sdělit mu doporučený počet stránek za sekundu, který nám nevadí. To se dělá v robots.txt a slušní roboti to respektují.
- HTTP hlavičkou 429 sdělující přílišnou zátěž ze strany návštěvníka
- HTTP hlavičkou 503 sdělující dočasnou nedostupnost služby
Nově máme také loadbalancery
Loadbalancery jsou chytré servery, které rozdělují zátěž mezi jednotlivé aplikační servery (na těch běží e-eshopy).
Takže požadavek návštěvníka jde na loadbalancer. Ten má přehled o zbytku serverů a rozhodne, který aplikační server ten požadavek vyřídí.
A když je některý aplikační server loadbalancerem považován za přetížený, dočasně z něj provoz odkloní jinam a nechá mu čas na zotavenou. Za chvíli si jej osahá a provoz na něj případně vrátí.
Ochrana proti botům si nerozuměla s loadbalancery
A to byl kámen úrazu, který nebyl na první pohled jasný nám vývojářům, ani adminům serverů.
Když jsme botovi poslali robots.txt s našim doporučením o zátěži, loadbalanceru to nevadí.
Když jsme botovi poslali HTTP hlavičku 429, informující robota že to se zátěží přehání, loadbalanceru to taky nevadilo.
Když jsme ale botovi poslali HTTP hlavičku 503 s informací o dočasné nedostupnosti služby, byla to informace jen pro toho bota. Jenže loadbalancer ty hlavičky monitoruje a i podle nich se rozhoduje o zdraví každého z aplikačních serverů.
A tak nastala situace, že bot dostal informaci 503 a dostal ji mnohokrát po sobě - boti si umějí přijít pro stránku několiksetkrát za sekundu. A když loadbalancer viděl, že ten aplikační server návštěvníkům vrací chybu 503, odstavil jej. Obecně jsou chyby typu 500 považovány za chybu serveru. Loadbalancer se tedy choval zcela správně.
A bot byl obsluhován dalším aplikačním serverem, který se ale choval stejně a vracel botovi 503. Tak jej loadbalancer zablokoval také. A tak dál a dál, až byly zablokovány všechny aplikační servery.
Když byl aplikační server loadbalancerem odstaven, nevracel chyby typu 500 a tak mohl být loadbalancerem znovu aktivován, protože na kontrolním měřícím bodě pro loadbalancer odpovídal správně. A tak byl. A další servery postupně také. A celé to kolečko trvalo jak kdy, dvě až čtyři minuty.
Upravili jsme ochranu proti botům a vše nyní funguje jako na drátkách
Loadbalancery jsou pro nás nové. Nyní víme, že aplikace nesmí vracet chybu typu 500, a tak ji vracet nebudeme.
Ochrana bude botům vracet stále jen 429, když to budou přehánět, loadbalancery budou spokojené, aplikační servery zůstanou v provozu a vše bude fajn. A hlavně bez těch výpadků.
A my se můžeme jít po pár dnech trochu vyspat:)