Update developer documentation authored by Kostrzewa Lisa's avatar Kostrzewa Lisa
......@@ -13,3 +13,78 @@
### Event Flow:
![fairregister_event_flow](uploads/6d38d8aa5c49c80534757e579191a42a/fairregister_event_flow.png)
### Übersicht:
**Microservices:**
In der Anwendung ist für jede einzelne Aufgabe separate Microservices entwickelt worden. Kubernetes wird für die Container-Orchestration verwendet. Kubernetes ist eine Open-Source-Plattform zur Automatisierung der Bereitstellung, Skalierung und Verwaltung von containerisierten Anwendungen.
Die Anwendung beinhaltet:
- Frontend-Service: stellt die Benutzeroberfläche für die Webanwendung bereit.
- Api-Serivce: wird bereitstellt, um anderen Anwendungen, wie fairregister und nextcloud, zu ermöglicht, auf seine Funktionen zuzugreifen.
- RabbitMQ-Service: ist Open-Source-Message-Broker-Software, die als Vermittler zwischen Anwendungen fungiert und Nachrichten über eine Message Queue überträgt.
- Hashing-Serivce: stellt die Metadaten in eine kryptografische Hash-Wert-Repräsentation umzuwandeln.
- Nginx-Service: ist ein Open-Source-Webserver, der als Reverse-Proxy und Load Balancer eingesetzt wird.
- MinIO-Serivce: ist ein objektbasierte Open-Source-Storage-Software, die für die Speicherung und den Zugriff auf unstrukturierte Daten wie Bilder, Videos oder Dokumente entwickelt wurde.
- IPFS-Service: implementiert das IPFS-Protokoll, damit Dateien in das IPFS-Netzwerk hochgeladen und von dort herunterzuladen werden zu können.
- KeyCloak-Service: dient als Identity Management System
- ProgresDB: ist eine relationale Datenbank, die für ihre Skalierbarkeit, Leistung und Zuverlässigkeit bekannt ist.
| Service | Funktion | Beschreibung | Version | Technologie |
|------------------|----------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|---------|
| Frontend-Service | Benutzeroberfläche | Verantwortlich für die Darstellung der Webanwendung und die Interaktion mit dem Benutzer. Das Frontend-Service verbindet sich über die REST-API-Schnittstelle mit dem Api-Service und stellt die erhaltenen Daten auf der Benutzeroberfläche dar. | |React und Tailwind |
| Api-Service | API | Der Api-Service stellt eine REST-API-Schnittstelle bereit, die anderen Anwendungen, wie fairregister und nextcloud, den Zugriff auf seine Funktionen ermöglicht. Der Api-Service greift auf die Funktionen der Microservices zu. In der Swagger-UI-Dokumentation (http://localhost:8080/api-service/swagger-ui/index.html) sind alle verfügbaren Endpunkte aufgelistet. | |Java Spring |
| RabbitMQ-Service | Message-Broker | Der RabbitMQ-Service ist ein Open-Source-Message-Broker-Software, die als Vermittler zwischen den verschiedenen Microservices fungiert und Nachrichten über eine Message Queue überträgt. Die Verwendung von RabbitMQ ermöglicht eine lose Kopplung zwischen den Microservices und eine erhöhte Skalierbarkeit der Anwendung. | |RabbitMQ |
| Hashing-Service | Hash-Funktion | Der Hashing-Service ist dafür verantwortlich, die Metadaten in eine kryptografische Hash-Wert-Repräsentation umzuwandeln. Dies erhöht die Sicherheit und Integrität der Daten, da Änderungen an den Daten sofort erkannt werden können. |- | SHA256|
| Nginx-Service | Webserver | Der Nginx-Service ist ein Open-Source-Webserver, der als Reverse-Proxy und Load Balancer eingesetzt wird. Der Reverse-Proxy ermöglicht eine Trennung von Frontend und Backend, indem er als Vermittler zwischen dem Benutzer und dem Server fungiert. Der Load Balancer verteilt eingehende Anfragen auf mehrere Server, um die Last auf der Anwendung zu verteilen und die Verfügbarkeit zu erhöhen. | |Nginx
| MinIO-Service | Objektspeicher | Ist ein objektbasierte Open-Source-Storage-Software, die für die Speicherung und den Zugriff auf unstrukturierte Daten wie Bilder, Videos oder Dokumente entwickelt wurde. | |MinIO
| IPFS-Service | Speicher-Protokoll | Implementiert das IPFS-Protokoll, damit Dateien in das IPFS-Netzwerk hochgeladen und von dort herunterzuladen werden zu können. | |IPFS
| KeyCloak-Service | Identitätsmanagement | Dient als Identity Management System. | |KeyCloak
| ProgresDB-Servce | Datenbank | Ist eine relationale Datenbank, die für ihre Skalierbarkeit, Leistung und Zuverlässigkeit bekannt ist. | | ProgresDB
Das Frontend, welches auf der JavaScript-Bibliothek React und der CSS-Bibliothek Tailwind verbindet sich mithilfe eines Api-Service. In dem Api-Service ist eine REST-API eingebaut, welche mit der Swagger UI dokumentiert ist (http://localhost:8080/api-service/swagger-ui/index.html). Für die Implementierung von der REST-API wurde Spring verwendet. Nginx der Webserver wird als Reverse-Proxy und Load Balancer eingesetzt. Als Message-Broker, also zentraler Knotenpunkt für den Austausch von Nachrichten zwischen den verschiedenen Microservices dient RabbitMQ. Als Objektspeicher dient MinIO zur Speicherung und den Zugriff auf unstrukturierte Daten wie Bilder, Videos oder Dokumente. IPFS dient als zusätliches Speicher-Protokoll, damit Dateien in das IPFS-Netzwerk hochgeladen und herunterzuladen werden zu können.
Der Registrierungsprozess läuft folgendermaßen ab:
Der/Die Benutzer:in muss sich mittels dem IDM Keycloak anmelden, um eine Datei registrieren zu könne. Eine Datei wird auf den Endpunkt (api-service/files/upload/presigned-url) hochgeladen, und der Dateiname und KeycloakID wird genutzt, um von dem MinIO Objektspeicher eine eindeutige presigned Upload URL zu generieren. Sobald die presigned URL im Frontend angekommen ist, kann die zweite Anfrage mit der Antwort durchgeführt werden, die die Datei endgültig hochlädt und weiterverarbeitet. Der/Die Benutzer:in schließt den Registrierungsprozess mit einem Klick auf den Registrierungsbutton ab, damit folgt die entgültige Registrierung in der Microservice-Architektur, da sie den Vorgang einleitet, der die Interaktion zwischen verschiedenen Microservices koordiniert. RabbitMQ, einem Open-Source-Messaging-System, fungiert dabei als Vermittler zwischen verschiedenen Services. Die Datei und all die unveränderlichen Metadaten werden immer in den Hashing-Service in einem kryptografische Hash-Wert-Repräsentation umgewandelt.
Der nächste Schritt ist, falls der/die Benutzer:in die Funktion auswählt, wird das Datei in das IPFS-Netzwerk hochgeladen wird. Der Metadata-Service speichert die Metadaten in die PostgresDB.
**Detailiert:**
Detailierten Systemkonzept?
- React + Tailwind
In der Benutzeroberfläche kam zum Einsatz React, als JavaScript-Bibliothek, und Tailwind als CSS-Bibliothek. React basiert auf einer Komponentenarchitektur, bei der einzelne Komponenten in der Anwendung wiederverwendet werden können.
Die Komponentenarchitektur von React ermöglicht es schnell und effizient komplexe Benutzeroberflächen zu erstellen. React ist auch bekannt für seine virtuelle DOM (Document Object Model), die die Leistung verbessert, indem nur die Teile der Seite aktualisiert werden, die sich geändert haben.
Tailwind ermöglicht es schnell und einfach Benutzeroberflächen zu gestalten. Tailwind bietet eine umfangreiche Sammlung von vordefinierten Klassen an, die auf Elementen in HTML-Dateien angewendet werden können. Dadurch können Entwickler schnell und einfach grundlegende Layouts, Farbschemata und Formatierungen erstellen, ohne jedes Mal eigene CSS-Regeln schreiben zu müssen. Tailwind ist auch bekannt für seine hohe Anpassungsfähigkeit, da eigene Klassen und Stile erstellt werden können, um spezielle Anforderungen zu erfüllen. React und Tailwind sind auch gut skalierbar und für die Entwicklung von großen und komplexen Webanwendungen geeignet sind.
- MinIO: gewählt weil? Aufbau?
ID Generierung usw.
- RabbitMQ: gewählt weil? Aufbau?
??? Bei der Microservice Architektur wurde ein Nachrichten-basierter Ansatz ausgewählt.??
- IPFS-Service: Erklären warum umstieg von Blockchain in dem detailierten Systemkonzept?
- Spring:
ORM?
Spring bietet ein Modul namens Spring MVC (Model-View-Controller), das für die Erstellung von Webanwendungen verwendet wird und RESTful-Webservices unterstützt. Mit Spring MVC können Sie einfach Controller-Klassen definieren, die HTTP-Anfragen entgegennehmen und HTTP-Antworten zurückgeben. Sie können auch Daten in verschiedenen Formaten (wie JSON oder XML) senden und empfangen.
Darüber hinaus bietet Spring auch Unterstützung für die Dokumentation von RESTful-Webservices mit dem Swagger-Modul. Swagger generiert automatisch eine Dokumentation für Ihre RESTful-Webservices, die Sie anzeigen und Ihren Benutzern zur Verfügung stellen können.
- work-api
GET
/works/{workId}
PUT
/works/{workId}
POST
/works/register
GET
/works/{workId}/certificate
GET
/works/filter
- user-api
GET
/users/{userId}/works
- work-file-api
GET
/files/upload/presigned-url
\ No newline at end of file