Queue timen ollessa >0.1 tipahtaa 429. Itsekin viime Tapparan pelissä huomasin että kaikki 429:t johtuivat >0.1 queue timestä (ne joiden mukana tuli performance headerinä tieto queue timestä).
Muistaakseni kun queue timeä säädettiin 0.3, niin siinä oli jokin sivuvaikutus että kyykkäsi isomminkin, mutta ehkä sitä nyt uskaltaisi taas koittaa nostaa kun on kannat eri raudalla?
Discoursen kehittäjien mukaan nuo “max reqs per ip” -rajat “eivät käytännössä ikinä ylity”, mutta jos tuolla ollut jotain vaikutusta niin sitä voisi koittaa jotenkin lokeista tutkia onko siellä tosiaan X IP:stä aikarajojen sisällä tosiaan niin monta pyyntöä että tuo limitti paukkuisi.
Tässä on tosiaan melkoinen trappi vastassa, tai suorastaan sipulipuolustus. Sinänsähän nuo rajoittimet toimivat täysin oikein, eli sivusto ei kyykkää kokonaan vaikka millainen käyttävyöry osuisi kohdalle. Samaan aikaan rajoittimet ovat vähän liian agressiivisia, koska ne iskevät päälle pienestäkin aktiviteettipiikistä.
Yksisäikeisenä ajettu Redis meni tukkoon ja kun saatiin sopivasti Redis päivitys, joka mahdollisti multi-threading toiminnon, niin sitten alkoivat kuormat nousemaan korkeiksi.
Tästä seuraa read-only-tila, eli sivustoa aletaan näyttämään käyttäjälle kuten kirjautumattomalle, joka on nähdäkseni tosi huono UX. Tämä extreme load -rajoitin näyttää sekin perustuvan jonon pituuden seurantaan, eikä esimerkiksi CPU kuormaan.
Eli jos:
Nostamme per IP rajoituksia, tai disabloimme ne kokonaan.
Mutta sitten pitäisi vielä päästä nostamaan tuota exteme load -rajoitinta, jotta Discourse sietäisi hetkellistä kuormaa ilman rajoittamista?
Meidän käyttötapauksessa aktiviteettipiikit ovat kuitenkin suht lyhyitä. Ensin tulee pelitilanteeseen perustuva piikki, ja tätä seuraa minuutin-parin ajan kohonnut aktiviteetti. Tämän jälkeen palaudutaan kuitenkin lähelle tilannetta edeltänyttä tasoa.
Poikkeus on pelit joissa turpaan tulee oikein kunnolla, sillä niissä varsin mielenkiintoisesti yleisaktiivisuus ja lukijoiden määrä nousee käytännössä loppupelin ajaksi.
Discoursea yhtään tuntematta, mitähän tämän laittaminen warn- tai none-asentoon mahtaisi tehdä:
# global rate limiter will simply warn if the limit is exceeded, can be warn+block, warn, block or none
max_reqs_per_ip_mode = block
En tiedä missä kaikkialla Discoursessa tuota rate limitingiä tehdään, mutta tuo extreme load päätyy rate_limit-funktioon, jossa heti kättelyssä tutkitaan tuo max_reqs_per_ip_mode:
Tuon nimenomaan diasabloin (taas) U20-pelin mainoskatkolla. Eli on nyt “none” ja kun kelaat viestiketjua ylemmäs, niin tuota on kokeiltu aikaisemminkin.
Jep, mutta periaatteessa oireet sopisivat noihin kahteen parametriin eli kannattaisiko niitä seuraavassa livessä kokeilla vai mitä mieltä ihmiset ovat?
Kysyin Discoursen Samilta, että onko olemassa ympäristömuuttujaa jolla voisimme vaikuttaa extreme load -rajoittimen raja-arvoon. Sain kerrassaan loistavan vastauksen, että yleensä sitä ei ole tarpeen muuttaa
Tämä nyt on tällaista nysväämistä, jolla tuskin saavutetaan lopullista voittoa, mutta voi silti yrittää hakea vähiten huonoa kompromissia. Yhdistelin tässä syksyn aikana kokeiltua ja opittua, jonka perusteella tuunasin parametrit asentoon jolla 429:iä saadaan vähennettyä, mutta jätetään serverin suojarajoittimet silti päälle. Ylikuormituksessa on riskinä extreme load -rajoitin, joka on loppukäyttäjälle kaikkein ikävin.
Nukahdin aamulla kesken Suomen pelin, mutta Chromessa oli Developer Tools käynnissä ja pelin aikana tuli yksi poll-requestin 429 ja siinä timeoutiksi oli arvottu 34 sekuntia.
Tänään ja huomenna on sitten viimeinen näytös sille, että onko tälle asialle omin neuvoin tehtävissä mitään.
U20-peleistä tuli todettua, että hyvin pieni keskustelijoiden joukko saa nykyään tuon 429:n aikaan. Kuvaavasti maaliskuussa onnistuimme viemään juuri KooKoota vastaan pelatun yleisöttömän matsin läpi, vaikka joku taisi mainita saaneensa extreme load -varoituksen.
Sellainen parannus on saatu aikaiseksi, että pystyn nyt säätämään asetuksia vain n. 30-60 sek palvelukatkoksella, eli hienosäätöä voidaan vielä tehdä vaikka erätauolla.
Onkohan tämä nyt sitten sama jono, jossa meillä on 0.2 raja-arvo? Tarvittaisiin enemmän pöhinää peliin, että näkee miten kurmitus käyttäytyy, ennen kuin nostaa raja-arvoa nykyisestä.
Extreme load -rajoitin on kuitenkin käyttäjän kannalta haitallisin.
Se ei liittynyt live-seurantaan vaan Discourse haki muiden päivittyneiden ketjujen tietoja samaan aikaan ja se aiheutti 429:n live-seurantaan (tai varmaankin joka paikkaan, mutta tuon huomaa ainoastaan live-seurannassa). Discoursehan hakee taustalla kaikkia päivittyneitä, kun näyttää itselle tulleet notifikaatiot.
Kolmas erä ilman 429:ä, mutta lopussa tuli pollista (queue time 0.332245) ja posts.jsonista (queue-time 0.597030).
Kun piikeissä tulee noin iso queue-time kuin posts.jsonista niin ei noita taida voida välttää muuta kuin nostamalla raja-arvoa tosi isoksi.
Edit. Itseasiassa tuo posts.json on eri ongelma, siinä arvotaan vain se 5-10 sekunnin paussi, poll on se jossa arvotaan 30-150 sekuntia ja tässä tapauksessa sekin oli vain tuo 0.3 eli seuraavaksi ehkä voisi kokeilla 0.4).
Sama tulos itsellä, ei yhtään POLLia. Kännykällä osallistuminen jäi vähän huonommaksi, mutta sen mitä ehdin niin ei jumeja.
3kpl jäi logiin noita posts.json 429 virheitä ja x-queue-timet minullakin 0.5…0.6 tietämissä.
Edit:
Livenä asetusten muuttaminen ja testaaminen on siitä ongelmallista, että keskustelun intensiteetti nousee luonnollisesti pelin loppua kohden. Viestejä yleensä vähiten 1. erässä.