Zum Inhalt

Grundlegende Plattformeinstellungen


Plattformarchitektur

Die Plattform basiert auf einer Microservice-Architektur, die Modularität, Skalierbarkeit und Flexibilität bietet. Die wichtigsten Merkmale der Architektur umfassen:

  • Microservice-Architektur: Das System ist in separate Microservices unterteilt, von denen jeder eine bestimmte Funktion erfüllt und unabhängig arbeitet.
  • Verteilte Verarbeitung: Microservices können auf verschiedene Knoten verteilt werden, was Lastverteilung und erhöhte Systemresilienz bietet.
  • Containerisierung und Orchestrierung: Die Verwendung von Docker zur Containerisierung von Microservices und Kubernetes zur Orchestrierung erleichtert die Bereitstellung, Skalierung und Verwaltung der Anwendung.
  • Modularität und Interoperabilität von Microservices: Modularität wird durch klare Abgrenzung von Funktionen zwischen Microservices erreicht, und die Kommunikation zwischen ihnen erfolgt über spezifische APIs und Interoperabilitätsprotokolle.

Das System besteht aus elf Docker-Container-Images:

Dienst Zweck
catalogs Speicherung und Verarbeitung von Benutzerdaten; RLS-Unterstützung
data-flow Verarbeitung und Speicherung benutzerdefinierter Datenskripte
file-storage Binärdatenspeicherung
identity Benutzerverwaltung und Authentifizierung
notification Benachrichtigungen senden
scheduler Ereignisplaner im System; alle Ereignisse werden über den Bus aufgerufen
template-service Arbeiten mit Vorlagen
view-service Speicherung von Systemmetadaten; Orchestrierung von Metadaten-Aktualisierungsprozessen
workflow Skripting über die State Machine
web-studio Anwendungsentwicklungs-Webteil
web-workplace Webteil zum Ausführen von Anwendungen


Technologie-Stack

  • Grundlage: Die Plattform basiert auf Net Core 8.0, einer modularen Open-Source-Softwareentwicklungsplattform.
  • Entwicklungssprache: C# wird als primäre Programmiersprache verwendet.

Zusätzliche Infrastruktur

  • PostgreSQL (Version ≥13.0): Objektrelationales Datenbankverwaltungssystem für die primäre Datenspeicherung.
  • Redis (Version ≥5.0): Eine nicht-relationale Datenbank zur Daten-Caching.
  • RabbitMQ (Version ≥3.0): Ein Software-Message-Broker zur Behandlung von Systemereignissen und Warteschlangen.

Web-Teile

  • Verwendet das Blazor-Frontend-Web-Framework, Teil von Net Core, zum Erstellen von Webkomponenten.
  • Web-Teile werden als clientseitiges WebAssembly (WASM) ausgeführt.

Installationsanforderungen

  • Kubernetes: Kubernetes-Cluster ist für die Cluster-Version des Produkts erforderlich.
  • Mindestkonfiguration:
    • 1 x Master (2 vCPU, 4GB RAM, 20GB SSD) - 3 Knoten mit Master-Rolle werden empfohlen.
    • 1 x Ingress (4 vCPU, 8GB RAM, 20GB SSD)
    • 3 x Worker (16 vCPU, 32GB RAM, 60GB SSD)
  • Betriebssystem: Ubuntu Server 22.04 LTS

Netzwerk und Ports

  • Der gesamte Netzwerkverkehr verwendet das TCP/IP-Protokoll.
  • Standardmäßig stellt jeder Microservice (außer web-studio) zwei Ports bereit:
  • 80: Öffentliche API (HTTP/1.1).
  • 5001: Private API (HTTP/2).
  • Web-studio: Stellt nur Port 80 für die Bereitstellung statischer Ressourcen bereit.
  • Alle Microservices, mit Ausnahme von web-studio, müssen Zugriff auf PostgreSql, Redis und RabbitMQ haben.

Verwendete Protokolle

  • HTTP/1.1: Für öffentliche API.
  • GRPC: Für private API.
  • WebSocket: Für den Notification-Dienst.
  • SIP over WebSocket: Optional, für Integration mit SIP in einem Web-Workplace.
  • RTC/RTCP: Optional, für Integration mit SIP in einem Web-Workplace.

Datenspeicherung

Jeder Microservice verwaltet sein eigenes Schema in der Datenbank, ohne sich mit anderen zu überschneiden.

Dienst Schema
catalogs catalogs
data-flow dataflow
file-storage file_storage
identity identity
notification notification
scheduler scheduler
template-service template
view-service view_service, maintenance
workflow workflow, wfc_persistence
web-workplace workplace-host


Jeder Microservice ist für die Erstellung und Migration der Metadaten seiner Schemas verantwortlich.

Der Catalogs-Dienst, der für die Speicherung von Benutzerdaten verantwortlich ist, erstellt eine zusätzliche Partition in seinem Schema für jeden Datentyp, der von der primären Tabelle geerbt wird, sowie zusätzliche Partitionen zur Implementierung von RLS, falls erforderlich. Wenn diese Partitionen gebildet werden, werden alle zusätzlichen Indizes und externen Schlüssel generiert.

Die Zusammensetzung von Indizes und externen Schlüsseln hängt von der Konfiguration der Anwendung ab, die Sie auf der Plattform erstellen.

Autorisierung & Berechtigungsverwaltung

  • Lokale Autorisierung mit JWT-Tokens.
  • Möglichkeit, externe Autorisierungssysteme anzuschließen (oAuth, OpenId Connect, Windows-Autorisierung, SAML).
  • RBAC (Role-Based Access Control) für Zugriffskontrolle.

Sammeln von Metriken und Traces

Alle Dienste, außer web-studio, stellen Metriken im 'Prometheus'-Format bereit. Metriken sind über den relativen Pfad /metrics verfügbar. Um die Verfügbarkeit des Dienstes zu überprüfen, werden zwei Pfade bereitgestellt /hc und /liveness:

  • hc - detaillierte Informationen zu allen Überprüfungen;
  • liveness - eine kurze Antwort über die Verfügbarkeit des Dienstes.

Logs werden vom System selbst gesammelt, alle Logs werden in das Maintenance-Schema geschrieben, und die Protokollansicht ist im Web-Studio verfügbar. Der Logging-Level für jeden Dienst wird separat über das Web-Studio im Abschnitt "Maintenance" konfiguriert. Zwei Systeme, Zipkin oder Jaeger, können zum Sammeln von Traces angeschlossen werden. Die Trace-Sammlung wird auf der Ebene der Dienstparameter konfiguriert. Wenn Sie Traces nach Jaeger exportieren möchten, benötigen Sie mindestens Version 1.35.