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?
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.