logo
21.01.2020 21:50
1
Prosím o nápovědu, jak nejlépe vyřešit traffic shaping na Linuxu, který by zbrzdilo HTTP requesty směřující na server, naopak odpovědi serveru potřebuji nechat rychlé.

Který nástroj byste mi doporučili?

Co se právě děje na Webtrhu?

21.01.2020 22:04
2
proč?

Pokud to je pro webové aplikace, nejlepší je to řešit na přes http proxy (nginx, haproxy) pomocí jejich QoS.
21.01.2020 22:26
3
V nastavení QoS na nginx jsou různé zrady:

NGINX Rate Limiting

HAproxy vypadá lépe:

HAProxy Rate Limiting: Four Examples - HAProxy Technologies

ale pomocí traffic shapingu bych to vyřešil asi jednodušejí.

Ono to vypadá asi takto:

klient <-> reverzní proxy cache <-> zpracování dat <-> origin server

přičemž většina requestů se rovnou odbaví z reverzní proxy cache, potřebuji brzdit jen HTTP requesty z reverzní proxy cache na zpracování dat, odpovědi na ně nechť jsou již rychlé :-)
21.01.2020 23:12
4
a proč to potřebuješ dělat?

Ono to totiž nejde tak jednoduše jak si myslíš, tcp komunikace je oboustranná, pro odeslání dat potřebuji přijmout ACK paket. Traffic shaping přidá obvykle delay (ale i pro ACK pakety) nebo omezuje velikost bufferu a pak dropuje pakety, opět neumí rozlišit data od ACK.

Naopak rate limiting v nginx/haproxy/varnish pracuje na mnohem vyšší úrovni, umožňuje nechat požadavky ve frontě a pouštět je na backend postupně.

Co myslíš těmi zradami? U obou můžeš nastavit jiné chování pro upstream (backend) url a pro ty odbavené přes cache. Co potřebuješ řešit? Podle mě na to jdeš špatně, takovéhle řešení jsem v produkcích ještě neviděl.

Pokud máš problém s přetěžováním backendu, kdy tam jde hodně požadavků najednou, můžeš hodit za sebe dva nginxy (jde to ale nastavit i v jednom, ale takhle to může být pro tebe jednodušší) nebo použít třeba varnish, který na rozdíl od ostatních umí hodit při paralelních dotazech na stejný zdroj na beckend pouze jeden request a vrátit ho všem najednou. U těch chudých, kteří nemají na F5 nasazuji tohle.