Mit 4D 21 R4 erhalten Sie dank eines neuen Mechanismus zur Quotenverwaltung noch mehr Kontrolle über die Ressourcen Ihres REST-Servers.Wenn Ihre Anwendungen wachsen, können Ihre Daten von einer Vielzahl unterschiedlicher Clients genutzt werden: Webanwendungen, mobile Apps, Dienste von Drittanbietern, benutzerdefinierte Integrationen und nun sogar KI-gestützte Tools über MCP-Server.
Jeder Client interagiert auf seine eigene Weise mit Ihren REST-APIs und generiert dabei Anfragen mit unterschiedlicher Komplexität und Häufigkeit.Um in jeder Situation eine optimale Leistung zu gewährleisten, ist es wichtig, die Kontrolle über die Nutzung der Serverressourcen zu behalten.
Kontingente – warum?
Auf dem 4D REST-Server können angeforderte Daten zur Verbesserung der Effizienz und Navigation als Entitätssätze im Arbeitsspeicher gespeichert werden.
In gut konzipierten Anwendungen werden diese Entitätssätze freigegeben, sobald sie nicht mehr benötigt werden. In großen und vielfältigen Ökosystemen lässt sich jedoch nicht immer vorhersagen, wie sich Clients verhalten werden oder ob jede zugewiesene Ressource ordnungsgemäß freigegeben wird.
Ohne Quoten kann eine ineffiziente Verwaltung von Entitätssätzen in einer einzelnen Sitzung die Leistung für andere Benutzer beeinträchtigen.
Aus diesem Grund führt 4D 21 R4 Sitzungsquoten für Entitätssätze ein. Mit nur wenigen Zeilen Code können Sie Ressourcenbeschränkungen definieren, die dabei helfen, die Speicherauslastung unter Kontrolle zu halten, Ihren Server vor übermäßigem Verbrauch zu schützen und eine konsistente Verfügbarkeit für alle Benutzer sicherzustellen.
Das Ergebnis ist ein ausfallsicherer REST-Server, eine einfachere Verwaltung und mehr Sicherheit, wenn Sie Ihre Daten einer stetig wachsenden Zahl von Nutzern zur Verfügung stellen.
Quoten für die aktuelle REST-Sitzung einrichten
Der Befehl `Session` gibt ein Objekt zurück, das die REST-Sitzung repräsentiert. Dieses Objekt enthält eine quotas Objekt-Eigenschaft (eine Instanz der Klasse ` 4D.QuotaManager `).
Beispiel
Hier ist das „ Session “.quotas Objekt.
{
"nbEntitySets": 100,
"maxEntitySetTimeout": 420,
"defaultEntitySetTimeout": 300,
"currentValues": {}
}
Es stellt die folgenden Eigenschaften bereit, mit denen Kontingente für die aktuelle Sitzung konfiguriert werden können:
– nbEntitySets: Die maximal zulässige Anzahl von Entitätsmengen im Arbeitsspeicher
–> Zu viele Entitätssätze können übermäßig viel Speicher beanspruchen und die Leistung des REST-Servers beeinträchtigen. Mit dieser Eigenschaft können Sie die Anzahl der Entitätssätze begrenzen, die für die aktuelle Sitzung gleichzeitig im Speicher abgelegt werden können.
– defaultEntitySetTimeout: Das standardmäßige Zeitlimit für die Inaktivität von Entitätsmengen.
–> Durch Anpassen dieser Eigenschaft lässt sich eine übermäßige Speicherbelegung verhindern, da Entitätssätze automatisch freigegeben werden, wenn sie länger als der angegebene Zeitraum ungenutzt bleiben.
– maxEntitySetTimeout: Das maximale Inaktivitäts-Timeout für Entitätssätze
–>Durch die Anpassung dieser Eigenschaft wird die Erstellung von Entitätsmengen mit übermäßig langen Inaktivitäts-Timeouts verhindert.
Darüber hinaus bietet die currentValues Eigenschaft bietet zudem ein nbEntitySetsAttribut, das die Anzahl der Entitätssätze angibt, die derzeit für die Sitzung im Speicher gehalten werden.
Hinweis: Ein Wert von „Undefined“ bedeutet, dass keine Quote angewendet wird und der REST-Server sein Standardverhalten verwendet.
Anzahl der Entitätssätze begrenzen
Aktualisieren Sie dazu die nbEntitySets Eigenschaft.
Session.quotas.nbEntitySets:=100
Im folgenden Beispiel ist die Sitzung auf maximal 100 Entitätssätze im Speicher begrenzt, und es wurden bereits 100 Entitätssätze erstellt:
{
"nbEntitySets": 100,
"currentValues": {
"nbEntitySets": 100
}
}
Beim nächsten Versuch, eine Entitätsmenge zu erstellen, wird ein Fehler zurückgegeben, solange noch 100 Entitätsmengen im Speicher vorhanden sind:
{
"__ERROR": [
{
"message": "Max number of entitysets has been reached for this session.",
"componentSignature": "dbmg",
"errCode": 2017
}
]
}
Ein konkreteres Beispiel
Der „forceLogin“-Modus bietet eine erste Schutzebene, indem er das Anlegen von Entitätsmengen in nicht authentifizierten Sitzungen verhindert. Doch auch nach der Authentifizierung möchten Sie möglicherweise die Anzahl der Entitätsmengen, die von bestimmten Benutzerrollen angelegt werden können, weiter einschränken .
Im folgenden Beispiel ist der „forceLogin“-Modus aktiviert.
Ein Benutzer mit der Rolle„Guest“ ist auf maximal 100 Entitätsmengen beschränkt.
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
Wenn Sie den „forceLogin“-Modus nicht verwenden, können Kontingente natürlich auf dieselbe Weise mithilfe des Befehls „ Session “ festgelegt werden.
Richten Sie das Standard-Inaktivitäts-Timeout für Entitätssätze ein
Standardmäßig beträgt das Inaktivitäts-Timeout für Entitätssätze zwei Stunden. Sie können diesen Wert ändern, indem Sie die defaultEntitySetTimeout Eigenschaft (in Sekunden).
Session.quotas.defaultEntitySetTimeout:=300 // 5 minutes
Entitätssätze, die durch eine Anfrage wie die folgende erstellt wurden:
/rest/People?$filter='ID>=1'&$method=entityset
werden nach fünf Minuten automatisch freigegeben, wenn sie während dieses Zeitraums nicht verwendet werden (d. h., wenn in der Anfrage kein Inaktivitäts-Timeout explizit angegeben wurde).
Einrichten des maximalen Inaktivitäts-Timeouts für Entitätssätze
Sie können das maximal zulässige Inaktivitäts-Timeout für Entitätssätze festlegen, indem Sie die maxEntitySetTimeout Eigenschaft (in Sekunden).
Session.quotas.maxEntitySetTimeout:=420 // 7 minutes
Wird ein Entitätssatz mit einer Inaktivitäts-Timeout-Zeit erstellt, die diesen Grenzwert überschreitet, wird sie automatisch auf 420 Sekunden begrenzt.
Beispiel für die folgende Anfrage:
/rest/People?$filter=ID>=4&$method=entityset&$timeout=600
wird die Entitätsmenge nach 420 Sekunden freigegeben, da das angeforderte Zeitlimit von 600 Sekunden ignoriert wird.
Probieren Sie die beigefügte HDI aus und verbessern Sie sofort die Robustheit Ihrer Anwendungen!
Für diesen Beitrag sind derzeit keine Kommentare verfügbar.