Zum Hauptinhalt springen

Architektur

Das System besteht aus mehreren Komponenten, die in den folgenden Abschnitten kurz erklärt werden. Details finden sich auf den verlinkten Seiten.

Evaluation Stack

Ein Evaluation Stack ist eine Konfiguration, die für die Auswertung verwendet wird. Er besteht aus einer Umgebung (Tech-Stack) und einem Evaluator (Auswertungslogik).

Umgebung

Die Umgebung repräsentiert den Tech-Stack, der für die Auswertung verwendet wird. Sie stellt somit Software bereit, die für die Auswertung notwendig ist. Dazu zählen Compiler für Programmier- bzw. Auszeichnungssprachen, Frameworks und Testrunner. Docker Images sind Beispiele für Umgebungen. Grundsätzlich ist das Hostsystem aber auch bereits eine Umgebung, die verwendet werden könnte. Eva ist nicht fest an Docker gebunden.

Evaluator

Ein Evaluator führt Bash Skripte und Befehle auf der Umgebung aus. Anschließend verarbeitet er die Rückgabewerte und Ausgaben um das Auswertungsergebnis zu erstellen. Er standardisiert die Ergebnisse über bestimmte Austauschformate. Ein Evaluator kann alle Auswertungskriterien (Kompilierung, Test, Style, Coverage) unterstützen oder nur eine Teilmenge davon.

Dispatcher

Der Dispatcher ist für die Koordination der Auswertung zuständig. Er koordiniert die Anfragen von Clients, die ihm von einem RabbitMQ Broker zugewiesen werden. Es können mehrere Dispatcher-Instanzen existieren, die auf unterschiedlichen Systemen laufen (um horizontale Skalierbarkeit zu ermöglichen). Der Dispatcher kann insgesamt als Worker gesehen werden, der lokal auf der Maschine als Master fungiert, indem er die Systemressourcen so einsetzt, dass ihm zugewiesene Anfragen parallel verarbeitet werden. Der Dispatcher sorgt dafür, dass für jede Anfrage eine neue Instanz der geforderten Umgebung (z.B. Docker-Container) erstellt wird. Zudem erzeugt er eine Instanz des geforderten Evaluators und führt ihn auf der Umgebung aus. Nach erfolgter Auswertung wird das Ergebnis über den RabbitMQ Broker an den Client zurückgeschickt.

Registry

Die Registry dient der Auskunft über verfügbare Evaluation Stacks und stellt deren Metadaten zur Verfügung. Um Metadaten zu Umgebungen anzuzeigen, kann die Registry an GitLab angebunden werden.

Clients können die verfügbaren Stacks abfragen und anhand der Informationen eine Anfrage an einen der Evaluators adressieren.

Die Registry wurde aus den folgenden Gründen entwickelt:

  • Zentrale Auskunft: Das System wird von mehreren Clients verwendet. Um zu vermeiden, dass die Registry in jedem Client manuell gepflegt wird, erfolgt diese zentral.
  • Kapselung: Die Registry bietet beispielsweise Auskunft darüber, welche Umgebungen zur Verfügung stehen. Sie abstrahiert aber die Details, wie sie genau heißen oder wo sie liegen. Dadurch können Umgebungen, wie Docker Images, einfach umgezogen werden.