Datenbank für eine BPaaS-Plattform

Die Business Processes, die auf der Plattform angelegt und genutzt werden, müssen in einer Datenstruktur abgelegt werden. So sind die Prozesse dann gespeichert und auch jeder Zeit verfügbar für die Nutzer.
Wir haben uns für die Datenbank MongoDB entschieden, weil diese im Docker unkompliziert mit portainer eingerichtet werden kann und sie JSON Files speichert, was unserem Datenformat der BP Spezifikation entspricht. Um die Einrichtung hat sich Vince gekümmert und auch um die Kommunikationsschnittstelle mit RabbitMQ.
Damit die anderen Komponenten die BP Daten bekommen, müssen sie die Daten auf der Datenbank abfragen können.
Ich habe die Anforderungen der Abfragen von der API bzw. von Frontend und BPExecuter eingeholt und diese dann in Abfragen umgesetzt.
Als Resultat habe ich dann folgende Abfragen definiert:

Datenbankabfragen
Beschreibung
getBP Gibt einen Business Process zurück
getAllBPs Gibt eine Liste an Business Processes zurück
getBPService Gibt einen Business Process Service zurück
getAllBPServices Gibt eine Liste an Business Process Services zurück
putBP Einen Business Process einfügen
putBPService Einen Business Process Service einfügen

Diese habe ich dann in Code niedergeschrieben und Vince hat sie angepasst mit in die Einrichtungsdatei der Datenbank übernommen.
Dadurch können Frontend und BPExecuter Daten über die API abfragen. Die API sendet dann je nach Anforderung die richtige Datenbankabfrage an den RabbitMQ Channel der Datenbank und erhält als Antwort die Daten zurück, die die API dann an die richtige Komponente weitergibt.

Hier einmal ein Beispiel wie die Abfrage in JavaScript aussieht, um einen bestimmten BP aus der Datenbank zu bekommen.
funcs.getBP = async function (json) {
 if (!checkDataId(json.data)) return
 let bp = await mongo.collection('bp').findOne({ id: json.data.id })
 removeMongoId(bp)
 sendToQueue(channel, json.queue, {
  id: json.id,
  data: bp
 })
}

Die Funktion erwartet eine json Datei beim Aufruf. Das Format wurde folgendermaßen von Vince definiert:
{
    queue: "Name der Return-Queue auf der geantwortet werden soll",
    func: "Name der Funktion, die ausgeführt werden soll. Z.B. 'getBP'",
    id: "Wird zur Identifizierung zurückgesendet. Type: any",
    data: "Object"
}
Mit Hilfe dieser wird die ID des BP an die Abfrage übergeben und kann aus der Mongo Collection bp den richtigen BP heraussuchen.
Mit sentToQueue wird dann eine Antwort mit Folgendem Format zurückgesendet:
{
    id: "Identifikation",
    data: "type: any"

}
Die ID wird zur Identifizierung der Abfrage mit zurückgesendet und data ist in diesem Fall das BP Objekt aus der Collection. Die Antwort wird an die Queue zurückgesendet, die auch im json mitgegeben wurde.

Kommentare

Beliebte Posts aus diesem Blog

Projektergebnis

TTI Vorlesung

Cloud Computing Patterns