Diese Dokumentation wurde automatisch von KI übersetzt.
Normalerweise laufen alle Dienste einer NocoBase-Anwendung in derselben Node.js-Instanz. Wenn die Funktionalität innerhalb der Anwendung mit zunehmendem Geschäftsumfang komplexer wird, können einige zeitintensive Dienste die Gesamtleistung beeinträchtigen.
Um die Anwendungsleistung zu verbessern, unterstützt NocoBase im Cluster-Modus die Aufteilung der Anwendungsdienste auf verschiedene Knoten, um dort ausgeführt zu werden. Dies verhindert, dass Leistungsprobleme eines einzelnen Dienstes die gesamte Anwendung beeinträchtigen und somit die normale Beantwortung von Benutzeranfragen verhindert wird.
Andererseits ermöglicht es auch, bestimmte Dienste gezielt horizontal zu skalieren und so die Ressourcenauslastung des Clusters zu verbessern.
Bei der Cluster-Bereitstellung von NocoBase können verschiedene Dienste aufgeteilt und auf unterschiedlichen Knoten ausgeführt werden. Die folgende Abbildung zeigt die Struktur der Aufteilung:

Dienst-KEY: workflow:process
Workflows im asynchronen Modus werden nach dem Auslösen in eine Warteschlange gestellt und dort ausgeführt. Diese Workflows können als Hintergrundaufgaben betrachtet werden und erfordern in der Regel nicht, dass Benutzer auf die Rückgabe eines Ergebnisses warten. Insbesondere bei komplexen und zeitaufwändigen Prozessen und einem hohen Auslösevolumen wird empfohlen, diese auf unabhängige Knoten aufzuteilen und dort auszuführen.
Dienst-KEY: async-task:process
Dazu gehören Aufgaben, die durch Benutzeraktionen wie asynchronen Import und Export erstellt werden. Bei großen Datenmengen oder hoher Parallelität wird empfohlen, diese auf unabhängige Knoten aufzuteilen und dort auszuführen.
Die Aufteilung verschiedener Dienste auf unterschiedliche Knoten wird durch die Konfiguration der Umgebungsvariable WORKER_MODE erreicht. Diese Umgebungsvariable kann gemäß den folgenden Regeln konfiguriert werden:
WORKER_MODE=<leer>: Wenn nicht konfiguriert oder leer, ist der Worker-Modus identisch mit dem aktuellen Einzelinstanz-Modus; er empfängt alle Anfragen und verarbeitet alle Aufgaben. Dies ist kompatibel mit zuvor nicht konfigurierten Anwendungen.WORKER_MODE=! Der Worker-Modus verarbeitet nur Anfragen und keine Aufgaben.WORKER_MODE=workflow:process,async-task:process: Konfiguriert mit einem oder mehreren Dienst-Identifikatoren (durch Kommas getrennt), ist der Worker-Modus so eingestellt, dass er nur Aufgaben für diese Identifikatoren verarbeitet und keine Anfragen verarbeitet.WORKER_MODE=*: Der Worker-Modus verarbeitet alle Hintergrundaufgaben, unabhängig vom Modul, verarbeitet aber keine Anfragen.WORKER_MODE=!,workflow:process: Der Worker-Modus verarbeitet Anfragen und verarbeitet gleichzeitig Aufgaben für einen bestimmten Identifikator.WORKER_MODE=-: Der Worker-Modus verarbeitet keine Anfragen und Aufgaben (dieser Modus wird innerhalb des Worker-Prozesses benötigt).Zum Beispiel in einer K8S-Umgebung können Knoten mit derselben Aufteilungsfunktionalität dieselbe Umgebungsvariablenkonfiguration verwenden, was die horizontale Skalierung eines bestimmten Diensttyps erleichtert.
Angenommen, es gibt drei Knoten, nämlich node1, node2 und node3. Diese können wie folgt konfiguriert werden:
node1: Verarbeitet nur Benutzer-UI-Anfragen, konfigurieren Sie WORKER_MODE=!.node2: Verarbeitet nur Workflow-Aufgaben, konfigurieren Sie WORKER_MODE=workflow:process.node3: Verarbeitet nur asynchrone Aufgaben, konfigurieren Sie WORKER_MODE=async-task:process.Angenommen, es gibt vier Knoten, nämlich node1, node2, node3 und node4. Diese können wie folgt konfiguriert werden:
node1 und node2: Verarbeiten alle regulären Anfragen, konfigurieren Sie WORKER_MODE=!, und ein Load Balancer verteilt die Anfragen automatisch auf diese beiden Knoten.node3 und node4: Verarbeiten alle anderen Hintergrundaufgaben, konfigurieren Sie WORKER_MODE=*.Beim Entwickeln von Geschäfts-Plugins können Sie ressourcenintensive Dienste je nach Anforderungsszenario aufteilen. Dies kann auf folgende Weisen erreicht werden:
my-plugin:process, für die Umgebungsvariablenkonfiguration und stellen Sie eine Dokumentation dazu bereit.app.serving()-Schnittstelle, um die Umgebung zu prüfen und zu entscheiden, ob der aktuelle Knoten einen bestimmten Dienst basierend auf der Umgebungsvariable bereitstellen soll.