S verzí 4D 21 R4 získáte díky novému mechanismu správy kvót ještě větší kontrolu nad zdroji vašeho REST serveru.S rozšiřováním vašich aplikací mohou vaše data využívat nejrůznější klienti: webové aplikace, mobilní aplikace, služby třetích stran, vlastní integrace a nyní dokonce i nástroje využívající umělou inteligenci prostřednictvím serverů MCP.
Každý klient komunikuje s vašimi REST API svým vlastním způsobem a generuje požadavky s různou úrovní složitosti a frekvencí.Pro zajištění optimálního výkonu v každé situaci je důležité udržovat kontrolu nad tím, jak jsou zdroje serveru využívány.
Kvóty – proč?
Na serveru 4D REST mohou být požadovaná data uložena v paměti jako sady entit, což zvyšuje efektivitu a usnadňuje navigaci.
V dobře navržených aplikacích se tyto sady entit uvolňují, jakmile již nejsou potřebné. Ve velkých a rozmanitých ekosystémech však není vždy možné předvídat, jak se budou klienti chovat, ani zda budou všechny přidělené zdroje řádně uvolněny.
Bez kvót může neefektivní správa sad entit v jedné relaci ovlivnit výkon, který vnímají ostatní uživatelé.
Proto 4D 21 R4 zavádí kvóty relací pro sady entit. Pouhými několika řádky kódu můžete definovat limity zdrojů, které pomáhají udržet využití paměti pod kontrolou, chrání váš server před nadměrnou spotřebou a zajišťují konzistentní dostupnost pro všechny uživatele.
Výsledkem je odolnější REST server, snazší správa a větší jistota při zpřístupňování vašich dat stále rostoucímu počtu uživatelů.
Nastavení kvót pro aktuální relaci REST
Příkaz Session vrací objekt reprezentující relaci REST. Tento objekt obsahuje vlastnost quotas vlastnost object (instance třídy 4D.QuotaManager ).
Příklad
Zde je objekt Session.quotas .
{
"nbEntitySets": 100,
"maxEntitySetTimeout": 420,
"defaultEntitySetTimeout": 300,
"currentValues": {}
}
Poskytuje následující vlastnosti, které lze použít ke konfiguraci kvót pro aktuální relaci:
– nbEntitySets: maximální povolený počet sad entit v paměti
–> Příliš mnoho sad entit může spotřebovávat nadměrné množství paměti a ovlivnit výkon REST serveru. Tato vlastnost umožňuje omezit počet sad entit, které mohou být současně uloženy v paměti pro aktuální relaci.
– defaultEntitySetTimeout: výchozí časový limit nečinnosti povolený pro sady entit.
–> Úprava této vlastnosti pomáhá zabránit nadměrnému využití paměti, protože sady entit se automaticky uvolní, pokud zůstávají nepoužívané déle než po stanovenou dobu.
– maxEntitySetTimeout: maximální časový limit nečinnosti pro sady entit
–>Úprava této vlastnosti zabraňuje vytváření sad entit s nadměrně dlouhými časovými limity nečinnosti.
Kromě toho currentValues tato vlastnost také poskytuje nbEntitySetsatribut, který udává počet sad entit aktuálně uchovávaných v paměti pro danou relaci.
Poznámka: Hodnota „Undefined“ znamená , že není použita žádná kvóta a server REST používá své výchozí chování.
Omezení počtu sad entit
Chcete-li to provést, aktualizujte vlastnost nbEntitySets vlastnost.
Session.quotas.nbEntitySets:=100
V níže uvedeném příkladu je relace omezena na maximálně 100 sad entit v paměti a již bylo vytvořeno 100 sad entit:
{
"nbEntitySets": 100,
"currentValues": {
"nbEntitySets": 100
}
}
Při dalším pokusu o vytvoření sady entit dojde k vrácení chyby, dokud v paměti zůstane 100 sad entit:
{
"__ERROR": [
{
"message": "Max number of entitysets has been reached for this session.",
"componentSignature": "dbmg",
"errCode": 2017
}
]
}
konkrétnější příklad
Režim forceLogin poskytuje základní úroveň ochrany tím, že zabraňuje vytváření sad entit v neověřených relacích. I po ověření však můžete chtít dále omezit počet sad entit, které mohou být vytvořeny konkrétními uživatelskými rolemi.
V následujícím příkladu je režim forceLogin povolen.
Uživatel s rolí Guest má omezení na maximálně 100 sad entit.
exposed Function authentify($credentials : Object) : Boolean
var $result:=False
Session.clearPrivileges()
If ($credentials.identifier="Guest")
Session.setPrivileges("")
Session.quotas.nbEntitySets:=100
$result:=True
Else
// Authenticate other users
// ...
Session.quotas.nbEntitySets:=200
$result:=True
End if
return $result
Samozřejmě, pokud režim „forceLogin“ nepoužíváte, lze kvóty nastavit stejným způsobem pomocí příkazu „ Session “.
Nastavení výchozího časového limitu nečinnosti pro sady entit
Ve výchozím nastavení je časový limit nečinnosti pro sady entit dvě hodiny. Můžete jej změnit aktualizací vlastnosti defaultEntitySetTimeout vlastnosti (v sekundách).
Session.quotas.defaultEntitySetTimeout:=300 // 5 minutes
Sady entit vytvořené požadavkem, jako je například:
/rest/People?$filter='ID>=1'&$method=entityset
budou automaticky uvolněny po pěti minutách, pokud během této doby nebudou použity (tj. pokud není v požadavku výslovně zadán časový limit nečinnosti).
Nastavení maximálního časového limitu nečinnosti pro sady entit
Maximální časový limit nečinnosti povolený pro sady entit můžete definovat úpravou maxEntitySetTimeout vlastnosti (v sekundách).
Session.quotas.maxEntitySetTimeout:=420 // 7 minutes
Pokud je sada entit vytvořena s časovým limitem nečinnosti, který tento limit překračuje, bude automaticky omezena na 420 sekund.
Například u následujícího požadavku:
/rest/People?$filter=ID>=4&$method=entityset&$timeout=600
bude sada entit uvolněna po 420 sekundách, protože požadovaný časový limit 600 sekund je ignorován.
Vyzkoušejte přiložený soubor HDI a okamžitě zvyšte odolnost svých aplikací!
K tomuto příspěvku zatím nelze přidávat komentáře.