Jemné ladění zatížení vašeho webového serveru 4D je nyní hračkou. Počínaje verzí 4D 21 R5 již váš webový server není vystaven nechtěnému přetížení, ať už jde o nadměrný objem požadovaných dat, příliš mnoho příchozích požadavků nebo prudký nárůst počtu relací hostů.
Čtěte dál a dozvíte se vše, co potřebujete k vytvoření plně přizpůsobeného systému omezení rychlosti pro váš webový aplikační server.
V předchozím příspěvku na blogu věnovaném verzi 4D 21 R4 jsme představili způsob, jak omezit počet sad entit v relaci REST, což byla úvodní kapitola mnohem rozsáhlejšího příběhu. Dnes tento příběh dosahuje významného (i když ne konečného) milníku.
S verzí 4D 21 R5 lze váš 4D Web Server díky kvótám jemně vyladit tak, aby měl příchozí i odchozí provoz pod kontrolou.
Tato nová funkce nemění výchozí chování vašeho webového serveru: ve výchozím nastavení se žádné kvóty neuplatňují. V závislosti na vašich potřebách můžete čerpat z komplexní škály kvót: použijte jen jednu, použijte je všechny – míra detailnosti záleží zcela na vás.
HDI_WebServer_RateLimitingQuotas
Doplnění klasické webové ochrany o inteligenci aplikací
Tato funkce spíše doplňuje než nahrazuje reverzní proxy, WAF, firewally a další služby. Tyto technologie chrání perimetr sítě a filtrují nepřátelský provoz, zatímco 4D zajišťuje regulaci zátěže na úrovni aplikací uvnitř webového serveru.
Jeho přidaná hodnota spočívá v rozpoznávání relací 4D a kontextu aplikací: vývojáři mohou definovat globální kvóty i kvóty na úrovni relace pro požadavky, objemy dat, relace a sady entit. To umožňuje přímo v rámci aplikace kontrolovat nesprávně formátované nebo nadměrné využití, provoz MCP a pracovní postupy specifické pro daný podnik.
Kvóty na úrovni serveru a relace
Než se pustíme do podrobností: pro jemnější řízení lze většinu kvót nastavit na dvou úrovních:
- Úroveň serveru: omezuje aktivitu celého serveru
- Úroveň relace: vztahuje se individuálně na každou nově vytvořenou relaci
Můžete se spolehnout pouze na kvóty na úrovni serveru, pouze na kvóty na úrovni relace nebo kombinovat obojí.
Výhoda: kvóty na úrovni relace staví všechny uživatele na stejnou úroveň a zabraňují tomu, aby jeden uživatel nadměrně využíval zdroje vašeho webového serveru.
Co lze kvótami regulovat
Kvóty vám umožňují omezit:
- Příchozí provoz: počet přijatých bajtů, počet přijatých požadavků
- Odchozí provoz: počet odeslaných bajtů
- Relace: maximální počet aktivních relací
- Relace hostů: maximální počet relací, které ještě nebyly ověřeny pomocí setPrivileges().
- Sady entit: maximální počet sad entit povolených ve výchozím nastavení pro každou nově vytvořenou relaci REST
Základní princip: jakmile dojde k překročení kvóty, server odpoví stavovým kódem HTTP 429 – Too Many Requests.
Výhoda: jsou pokryty všechny aspekty, které by mohly přetížit váš webový server: nejen příchozí a odchozí bajty, ale i požadavky. Můžete omezit neaktivní relace hostů i počet souběžných uživatelských relací.
Kvóty elegantně regulují využití vašeho webového serveru a dávají uživatelům najevo, že server není mimo provoz ani nehavaroval, ale prostě dělá svou práci a reguluje zátěž, aby zůstal spolehlivě dostupný.
Jak to funguje: dva druhy kvót
Kvóty se dělí na dva typy:
- Kvóty omezující rychlost
- Kvóty pro souběžné připojení
Kvóty omezující rychlost
Tyto kvóty zahrnují:
- Počet přijatých bajtů
- Počet přijatých požadavků
- Počet odeslaných bajtů
Fungují na principu časových oken, a to jak na úrovni minut, tak hodin, takže můžete definovat maximální počet bajtů (nebo požadavků), které váš webový server a/nebo jeho relace zvládnou zpracovat během jednominutového nebo hodinového okna.
Jakmile dojde k překročení kvóty v rámci časového okna, server vrací stavový kód HTTP 429, dokud se neotevře další časové okno.
Tyto kvóty lze konfigurovat jak na globální úrovni serveru, tak na úrovni relace.
Výhoda: kombinace minutových a hodinových oken vám poskytuje velmi jemnou kontrolu, která vyrovnává minutové špičky a zároveň dodržuje hodinový limit.
Použijte stejnou logiku na úrovni relace a budete regulovat aktivitu každého uživatele individuálně, čímž zabráníte tomu, aby některý z nich vyčerpal veškerou vaši šířku pásma.
Kvóty pro souběžné připojení
Tyto kvóty zahrnují:
- Maximální počet relací
- Maximální počet relací hostů
- Maximální počet sad entit povolených ve výchozím nastavení pro každou nově vytvořenou relaci REST
Jedná se o absolutní počítadla: jakmile je kvóta překročena, server vrací HTTP 429, dokud se počet nesníží. Například jakmile se relace uzavře, uvolní se místo pro novou.
Výhoda: toto pěkně doplňuje kvóty omezující rychlost tím, že reguluje také počet uživatelů, nejen jejich provoz.
Nastavení kvót
Objekt WEB Server objekt poskytuje vlastnost `quotas `, což je objekt, který je přesněji řečeno instancí třídy 4D.QuotaManager třídy.
Existují tři způsoby konfigurace kvót: vyberte si ten, který nejlépe vyhovuje vaší architektuře:
1- Aktualizujte objektquotas za běhu, jakmile je webový server již spuštěn:
var $quotas : 4D.QuotaManager
$quotas:=WEB Server().quotas
$quotas.inBytesPerMin:=10000000
2- Při spuštění webového serveru předat objekt quotas:
var $quotas:={}
$quotas.inBytesPerMin:=20000000
WEB Server().start({quotas: $quotas})
3- Použijte konfigurační soubor HTTPQuotas.json, který se načte automaticky při spuštění:
{
"inBytesPerMin": 10000
}
Výhoda: naprostá flexibilita. Ať už vypadá vaše nasazení jakkoli, jedna z těchto možností se k němu bude hodit.
Konkrétní příklad
var $quotas:={}
// Maximum number of input bytes accepted in a one-minute time window on the web server
$quotas.inBytesPerMin:=20000000
// Maximum number of sent bytes in a one-minute time window in a session
$quotas.outBytesPerMinPerSession:=10000000
// Maximum number of allowed sessions on the web server
$quotas.nbSessions:=50
// Maximum number of not authenticated sessions on the web server
$quotas.nbGuestSessions:=10
// Maximum number of accepted requests in a one-minute time window on the web server
$quotas.nbRequestsPerMin:=500
// Maximum number of accepted requests in a one-hour time window on the web server
$quotas.nbRequestsPerHour:=20000
WEB Server().start({quotas: $quotas})
V ladicím programu uvidíte následující:

Poznámka:
nbRequestPerHour není jednoduše nbRequestPerMin × 60 (což by bylo 30 000). Je záměrně nastaveno na nižší hodnotu, a to 20 000. Tímto způsobem ani pracovní zátěž, která během několika minut vyčerpá minutovou kvótu, nedokáže udržet toto tempo po dobu téměř jedné hodiny, což vám poskytuje skutečný hodinový limit namísto pouhého přepočítání minutové kvóty.
Zatímco uživatelé pracují s aplikací, pokaždé, když dojde k překročení kvóty, server vrátí HTTP 429 – Too Many Requests.
V příslušných případech hlavička odpovědi Retry-After sdělí klientovi přesně, kolik sekund má počkat, než to zkusí znovu:

Vyzkoušejte si to sami pomocí podrobného HDI, prostudujte si všechny podrobnosti v dokumentaci a neváhejte se podělit o své zkušenosti na fóru.
Zapomeňte na zpomalení způsobené přetížením serveru. Využijte maximální výkon svého webového serveru ještě dnes.
K tomuto příspěvku zatím nelze přidávat komentáře.