Zum Hauptinhalt springen

Systemarchitektur

Überblick

Gentrain ist eine browserbasierte Webanwendung. Nachfolgend sind die wichtigsten Komponenten der Anwendungsarchitektur aufgeführt.

System Komponenten

Komponenten

Frontend

Nutzeroberfläche

Technologien

React, Zustand

Da Sequenzanalysen nur auf der Serverseite durchgeführt werden, befindet sich die Mehrheit der Geschäftslogik im Frontend. Der Anwendungszustand zur Laufzeit wird mit der Zustand-Bibliothek für React verwaltet. Daten werden in einer lokalen Browser-Datenbank gespeichert, die von IndexedDB verwaltet wird.

Die React-Anwendung ist in separate Domains unterteilt. Diese Domains entsprechen den Seiten der Anwendung.

DomainBeschreibung
CoreGrundlegende Funktionen wie Anwendungsstart, Routing und Verwaltung der Browser-Datenbank.
DashboardFunktionen und Komponenten, die mit der Dashboard-Seite der Anwendung verbunden sind, einschließlich Dashboard-Graph-Canvas, zusätzlichen Informationsdiagrammen, Fallinformationen-Tabelle und Distanzmatrix.
Outbreak AnalysisFunktionen und Komponenten des Ausbruchsanalyse-Moduls, einschließlich Übersichtsseite der Analyse, Ausbruchsanalyse-Graph-Canvas, Einstellungsbereich und PDF-Export.
Data ManagementFunktionen und Komponenten zur Datenverwaltung der Anwendung, einschließlich Importbereich, Tabellenübersicht der Fälle, Ausbruchsverwaltung und Konfiguration automatischer Löschungen.
HelpFunktionen und Komponenten der Hilfeseite der Anwendung.
TutorialFunktionen und Komponenten des Tutorial-Moduls der Anwendung.

Die Anwendung verwendet IndexedDB zur Verwaltung der lokalen Browser-Datenbank. Da das Tutorial auf einem statischen Datensatz basiert, wurden zwei IndexedDB-Instanzen integriert: gentrain und gentrain_example. Während letztere nur während des Tutorials aktiv ist, ist die erste während der produktiven Nutzung der Anwendung aktiv. Zusätzlich wird die State-Management-Lösung Zustand zur Datenverwaltung während der Laufzeit verwendet. Zustand orchestriert den Anwendungszustand innerhalb sogenannter Stores. In GENTRAIN spiegeln diese Stores die Domains der React-Anwendung wider, mit Ausnahme der Help-Domain, die keinen entsprechenden Store hat. Die folgende Grafik zeigt die konkreten Datenquellen der React-Anwendung.

User Interface Data Sources

IndexedDB

Diese Low-Level-API bietet leistungsstarke und effiziente Datenbankfunktionen für die clientseitige Speicherung. Persönliche Daten werden ausschließlich in der lokalen Browser-Datenbank gespeichert. Da IndexedDB keine automatische Datenlöschung unterstützt, bietet die Anwendung zwei Optionen: Daten können entweder nach Ablauf der 24-Stunden-TTL gelöscht werden (nur während der produktiven Nutzung oder beim erneuten Laden der Anwendung) oder beim Neuladen bzw. Schließen des Tabs/Browsers (beforeunload-Ereignis). Erstere ist standardmäßig aktiviert, es ist jedoch möglich, beide Optionen zu deaktivieren.

Beim Laden der Seite werden die Pathogene in der clientseitigen Datenbank mit den persistierten Pathogenen in der Postgres-Datenbank verglichen und synchronisiert. Das Datenmodell der clientseitigen Datenbank ist unten dargestellt.

Entity Relationship Model (IndexedDB)

Details

Pathogen

TypName
intid
stringname
intgenetic_distance_threshold
intpathogen_type_id
booleanactivated
datetimecreated_at
datetimeupdated_at

Pathogen Type

TypName
intid
stringname
datetimeinitialized_at
datetimecreated_at
datetimeupdated_at

Case

TypName
intid
stringcase_id
stringfasta_id
datetimeregistered_at
stringcity
stringzip_code
stringstreet
stringlast_name
stringfirst_name
datetimecreated_at
datetimeupdated_at

Outbreak

TypName
intid
stringname
datetimecreated_at
datetimeupdated_at

Category

TypName
intid
stringname
datetimecreated_at
datetimeupdated_at

Group

TypName
intid
stringname
datetimecreated_at
datetimeupdated_at

Sequence Analysis

TypName
intid
stringhash
objectresult
stringschema
stringversion
datetimecreated_at
datetimeupdated_at

Distance Matrix

TypName
intid
datetimecreated_at
datetimeupdated_at

Distance

TypName
intid
intcase_id_1
intcase_id_2
intvalue
datetimecreated_at
datetimeupdated_at

Contact

TypName
intid
intcase_id_1
intcase_id_2
stringtype
typecontext
datetimecreated_at
datetimeupdated_at

Analysis

TypName
intid
stringname
objectsettings
datetimecreated_at
datetimeupdated_at

Backend

API

Technologien

Python (Flask), Flask-SocketIO, RQ, Prisma

Diese API erleichtert die Kommunikation mit dem Backend und bietet hauptsächlich Pathogen-Ressourcen und Dateidownloads, einschließlich Beispieldaten und Pathogen-Schemata. Um sicherzustellen, dass Aufgaben zuverlässig verarbeitet werden, werden langlaufende Aufgaben in Redis-Queues verarbeitet. Ein WebSocket-Server (SocketIO) ist daher in die API integriert, um eine bidirektionale, ereignisgesteuerte Kommunikation während der Sequenzanalyse zu ermöglichen. Redis-Queues für virale und bakterielle Sequenzanalysen werden mithilfe von Supervisord orchestriert und können in der Datei /backend/api/workers/supervisor.conf an aktuelle Anforderungen und Serverspezifikationen angepasst werden.

API Structure

Die Python-Anwendung ist in zwei Domains unterteilt, wie in der folgenden Tabelle dargestellt.

DomainBeschreibung
Pathogen RegistryOperationen im Zusammenhang mit Pathogenen. Dies umfasst das Abrufen von Informationen über persistierte Pathogene und das Herunterladen von Pathogen-Schemata und Beispieldaten.
Sequence AnalysisOrchestrierung der Sequenzanalyse. Dies umfasst das Verwalten von WebSocket-Ereignissen, das Ausführen von Sequenzanalyse-Jobs und das Vorbereiten von Sequenzanalyse-Antworten.

Admin Panel

Technologien

NodeJS + React (AdminJS), Prisma

Eine Benutzeroberfläche zur Verwaltung von Pathogen-Daten, insbesondere von Schemata.

Redis Cache

Langlaufende Aufgaben, wie Sequenzanalysen, werden über Redis-Job-Queues verwaltet und von Workern abgearbeitet. Der Redis-Cache wird außerdem verwendet, um WebSocket-Nachrichtendaten in Chunks zu speichern, indem Sequenzabschnitte temporär abgelegt werden. Zudem werden Sequenzanalysen 30 Minuten lang gespeichert, um Datenverlust zu vermeiden, falls Benutzer das Dashboard während der Verarbeitung verlassen.

PostgreSQL

Pathogene, Admin-Benutzer und Rollen werden in einer serverseitigen PostgreSQL-Datenbank gespeichert, die über das Admin Panel zugänglich und verwaltbar ist.

Entity Relationship Model (Postgres DB)

Details

Pathogen

TypName
intid
stringname
intgenetic_distance_threshold
intpathogen_type_id
stringexample_cases_key
stringexample_cases_size
stringexample_cases_bucket
stringexample_sequences_key
stringexample_sequences_size
stringexample_sequences_bucket
stringexample_contacts_key
stringexample_contacts_size
stringexample_contacts_bucket
datetimecreated_at
datetimeupdated_at

User

TypName
intid
stringusername
stringpassword
datetimeconfirmed_at
datetimecreated_at
datetimeupdated_at
idroleId

Role

TypName
intid
stringname
stringdescription

Logs

TypName
intid
intrecordId
stringrecordTitle
jsondifference
stringaction
stringresource
stringuserId
datetimecreatedAt
datetimeupdatedAt

Session

TypName
intsid
jsonsess
datetimeexpire

Docker Deployment

GENTRAIN wird in Docker-Containern bereitgestellt. Einige Container werden verwendet, um Anwendungs-Komponenten direkt bereitzustellen, während andere zum Erstellen von Produktionscode oder für Konfigurationsaufgaben genutzt werden. Die folgende Grafik zeigt die Abhängigkeiten zwischen den Containern für eine Produktionsumgebung. Gepunktete Pfeile kennzeichnen Abhängigkeiten beim Systemstart, während durchgezogene Pfeile Abhängigkeiten zur Laufzeit darstellen.

Docker Deployment

Nicht alle Container werden auch für die lokale Entwicklung verwendet, wie in der folgenden Tabelle dargestellt. Die Tabelle enthält auch Beschreibungen der Funktion jedes Containers.

ContainerZweckLokal verwendet?
gentrain-initEin einmaliger Initialisierungs-Container zur Konfiguration der Volume-Zugriffsrechte.
gentrain-frontendErstellt und liefert die kompilierten Assets der Benutzeroberfläche, die von gentrain-caddy bereitgestellt werden.
gentrain-apiFührt einen Flask-Server mit API-Endpunkten und WebSocket-Event-Handlern aus.
gentrain-workerFührt Hintergrund-Jobs über die gleiche Codebasis wie gentrain-api in Redis-Queues aus.
gentrain-dbHält eine Postgres-Datenbank für die zentrale serverseitige Datenspeicherung (Pathogene, Benutzer, Rollen).
gentrain-redisStellt den Redis-In-Memory-Cache bereit, der von gentrain-api und gentrain-worker zur Job-Queue-Verwaltung und zur Speicherung/Abruf von Sequenzanalyse-Ergebnissen genutzt wird.
gentrain-adminFührt eine AdminJS Node-Anwendung aus, um Pathogen-Informationen und Dateien zu verwalten.
gentrain-documentationBaut die Docusaurus-Dokumentation für gentrain-caddy zum Bereitstellen als statische Dateien.
gentrain-caddyDient als Produktions-Reverse-Proxy und statischer Dateiserver für gentrain-api, gentrain-frontend und gentrain-documentation.