Sziasztok!
Szeretnék valami programot írni arra, hogy ha X helyről túl sok kérés érkezik egyszerre és leterheli a szervert, akkor valamilyen módon csökkenteném a terhelést. Automatikusan.
Konkrétan arról van szó, hogy fut a web szerver, és időnként bejönnek robotok amik 10 IP-ről másodpercenként 10 kérést csinálnak, és nagyon terhelik a gépet. Ami a felhasználhatóság rovására megy. Nem szeretném letiltani őket, mert annak káros hatása lenne (keresőmotor kizárja a keresésből mert "nem elérhető"). Viszont azt sem szeretném, hogy a normál felhasználók szívjanak miatta. Mivel nem keep-alive-oznak ezért a bandwidth throttle nem használható. Általában egy IP-ről egyszerre csak egy kapcsolódás van, ezért a TCP queue méret változtatása se segít. Valami olyan működést szeretnék, hogy ha kapcsolódik akkor egy megadott ideig várakoztatja a tűzfal mielőtt tovább engedi a csomagot. Ez nyilván csak akkor működik normálisan, ha egy IP-ről csak egy TCP setup érkezik és a küldő szép türelmesen megvárja a választ. De ezek a robotok pont ilyenek. Szóval jön a TCP setup, a tűzfal megfogja a csomagot egy időre, és utána tovább engedi. A várakoztatás idő az elején nulla, de egy log analyzer automatikusan állítja ha kell. Ha mondjuk az utolsó 20 másodpercben volt legalább 30 kérés, akkor a várakoztatási időt beállítja 1 másodpercre. A "normál" felhasználók így nem vesznek észre semmi lassulást, a robotok meg pont annyit, hogy a gép jobb reakció idővel tudja kiszolgálni a normál felhasználókat.
Ez lenne az elmélet. Viszont a gyakorlatot nem tudom. ipfw-ben csak a bandwidth limitert ismerem, nem tudok olyat hogy "kapcsolat kiépítés késleltetése" szabály. Persze meg lehetne oldani mással is, nem csak tűzfallal. Ha async szerver lenne akkor egyszerű lenne a szerverben implementálni. Ez a web szerver egy apache, ami multi threaded. Esetleg van erre apache modul?
- 638 megtekintés
Hozzászólások
- A hozzászóláshoz be kell jelentkezni
Ezt nem ismertem de jónak tűnik! Feltéve hogy lehet futás közben változtatni a várakoztatási szabályokat. De úgy látom lehet, saját függvény írásával.
- A hozzászóláshoz be kell jelentkezni
Ezt is érdemes elolvasni:
https://www.haproxy.com/blog/use-a-load-balancer-as-a-first-row-of-defe…
Lazán kapcsolódik, csomag késleltetés tc+iptables-el:
https://engineeringblog.yelp.com/2015/04/true-zero-downtime-haproxy-rel…
Nyilván lehet ipfw+dummynet -el is:
https://serverfault.com/questions/555881/simulating-latency-to-a-url-us…
- A hozzászóláshoz be kell jelentkezni
Na ezt a delay opciót se ismertem. A haproxy-val szemben ennek több előnyét látom. Semmit nem kell újraindítani hozzá, mindenféle web szerverrel működik, és egyetlen plusz thread-et se foglal.
- A hozzászóláshoz be kell jelentkezni
Ha csak TCP-ben akarsz varázsolni akkor valóban egyszerűbb...., de nem is tud annyit mint a haproxy hasonló funkciói... (lásd ddos-os cikk)
- A hozzászóláshoz be kell jelentkezni