Best Practices für die Architektur der Zukunft

share

Der technologische Fortschritt bewegt sich in schnellem Tempo, insbesondere in der Welt der Architektur, wo sich die Praktiken ständig weiterentwickeln. Die moderne digitale Transformation erfordert die neuesten architektonischen Praktiken, um den wachsenden Anforderungen von Unternehmen und der Software-Skalierung gerecht zu werden. Dieser Artikel befasst sich mit den wichtigsten Architekturpraktiken der nächsten Generation und ihren Vorteilen:

  1. Token-basierte Authentifizierung
  2. Verbesserte DevOps-Pipeline
  3. Auf Containerisierung basierendes Code-Erstellungsmodell
  4. Service-basierte Architektur
  5. Begrenzung von Stored Procedures

Bewährte Architektur-Praktiken

1 – Token-basierte Authentifizierung

Es gibt verschiedene Arten von Authentifizierungsverfahren, von denen das Cookie-Verfahren das gebräuchlichste ist. Ein Cookie-basierter Authentifizierungsserver speichert eine Liste aller Datenbankverbindungen auf der Client-Seite des Cookies, die als Session Identifier im Browser gespeichert wird.

Die Cookie-basierte Authentifizierung hat jedoch Einschränkungen:

  • Die Cookie-basierte Authentifizierung ist zustandsabhängig und beeinträchtigt die Skalierbarkeit.
  • Cookies funktionieren nur in einer einzigen Domäne.
  • Enge Kopplung zwischen Client und Server.

Für die Architektur der nächsten Generation empfehlen wir die Token-basierte Authentifizierungstechnik, da sie zustandslos ist. Es gibt mehrere Token-basierte Authentifizierungsverfahren, darunter das bekannteste und am häufigsten verwendete JWT (Json Web Token). Dabei führt der Server keine Aufzeichnungen darüber, welche User eingeloggt sind oder welche JWTs ausgestellt wurden. Stattdessen wird jede Anfrage auf dem Server von einem Token begleitet, mit dem der Server die Authentizität der Anfrage verifiziert.

Das Token wird im Allgemeinen als zusätzlicher Authorization-Header in Form von Bearer {JWT} gesendet. Es kann auch entweder im Body oder als Query-Parameter einer POST-Anforderung gesendet werden. Zu den Vorteilen der Token-basierten Authentifizierung gehören:

  • Zustandsloser Authentifizierungsmechanismus.
  • Verbesserte Skalierbarkeit und Leistung.

2 – Verbesserte DevOps-Pipeline

Anschließend wird eine automatisierte CI/CD-Pipeline (Continuous Integration/Continuous Deployment) für die Codebasis eingerichtet. Diese Pipeline sollte den Code in verschiedenen Umgebungen bereitstellen, z. B. Entwicklung, Qualitätssicherung, Produkt usw.

Hier ein Beispiel für eine CI/CD-Pipeline für .NET-Projekte. Wie die Pipeline zeigt, handelt es sich bei den Code-Repositories um einen AzureDevOps-Code, der mit dem .NET-Nuget-Paketmanager-Tool erstellt und mit NUnit getestet wird.

Die statische Codeanalyse des Codes wird zunächst mit einem SonarQube- oder Resharper-Tool durchgeführt. Anschließend werden dynamische und Sicherheitstests mit Veracode durchgeführt. Der Code wird dann mit dem Octopus-Tool bereitgestellt und kann mit einem Funktions- oder Leistungstest weiter getestet werden.

Hier sind die Vorteile der Verwendung einer automatisierten CI/CD-Pipeline:

  • Automatischer Code-Einsatz in verschiedenen Umgebungen, z. B. QA, Pre-Prod, Produkt
  • Häufige Releases
  • Integrierte Unit-Tests in der CI/CD-Pipeline
  • Integrierte statische Code-Analyse
  • Integrierte Sicherheitsüberprüfung
  • Verbessert die Codequalität und den konsistenten Code-Wartungsprozess.

3 – Container-basierter Code zum Runtime Docker Application Build Model

Die Codeerstellung und -bereitstellung sollte mit einem container-basierten Ansatz erfolgen. Docker ist die führende Containerisierungstechnologie. Der Basiscontainer umhüllt die Anwendung und ihre Abhängigkeiten, um eine Laufzeitumgebung für die Anwendung zu schaffen.

Diese Docker-Laufzeitanwendung enthält Funktionen, die sich reibungslos auf jede Umgebung anwenden lassen – Dev, QA, Prod usw. Nachstehend finden Sie einen Verweis auf ein Architekturdiagramm für den laufenden Code von Docker-Containern.

Vorteile:

  • Alle Anwendungscodes (API/Service) und ihre Abhängigkeiten werden als Docker-Image verpackt und als Docker-Container ausgeführt.
  • Verschieben Sie Docker-Images in verschiedene Umgebungen (QA, CERT, Pre prod, Prod), pflegen Sie verschiedene Docker-Versionen für Images.
  • Geringerer Zeitaufwand und geringere Betriebskosten beim Einrichten einer neuen Umgebung.
  • Dieser container-basierte Dienst kann weiter skaliert werden, um unabhängig durch einen Container-Orchestrator-Dienst wie Kubernetes verwendet zu werden.

4 – Service-basierte Architektur

Durch eine servicebasierte Architektur rund um verschiedene Geschäftsbereiche kann alles als Rest-API oder GraphQL gewartet werden, die leicht von anderen Anwendungen genutzt und wiederverwendet werden können. Ganze Unternehmen können als eine Reihe von unabhängigen und zugänglichen APIs betrachtet werden.

Im Folgenden wird ein Diagramm der dienstbasierten Architektur dargestellt. Das gesamte Unternehmen kann als eine Reihe von Rest-API-Diensten betrachtet werden, die von den Geschäftsfunktionen leicht genutzt werden können. Auf diese Weise lassen sich Versionskonflikte vermeiden, Probleme mit der Anwendungskompatibilität beseitigen und die Einheitlichkeit der Geschäftsfunktionen gewährleisten.

5 – Stored Procedures einschränken

Während der Anwendung sollten gespeicherte Prozeduren so weit wie möglich eingeschränkt werden, um zu vermeiden:

  • SPROCs auf einer Datenbank, die ein monolithisches System schaffen, das nicht einfach skaliert werden kann.
  • Einschränkungen bei automatisierten Tests, Debugging, Fehlerbehandlung und Wartbarkeit.

Wenden Sie diese Schritte an, um gespeicherte Prozeduren zu reduzieren und gleichzeitig auf die Geschäftsschicht (API) zu verlagern:

  • Verschieben Sie die Logik der gespeicherten Prozedur in die Geschäftsschicht der Rest-API/GraphQL-Handler. ORM-Tools wie NHibernate/Entity Framework können ebenfalls verwendet werden.
  • Rufen Sie die entsprechenden SQL-Skripte über DAPR (Micro ORM) in der Rest-API auf.

Die Vorteile dieses Ansatzes liegen in der einfacheren Wartung des Codes und der Fehlersuche, der Fehlerbehandlung und dem Schreiben automatisierter Unit-Tests sowie in der Verbesserung der Skalierbarkeit.

Fazit

Die oben genannten Architekturpraktiken der nächsten Generation können an alle Projekte in jeder Größenordnung angepasst werden und bringen mehrere Vorteile für die Wartung des Projekts mit sich. Die Anwendung dieser Best Practices für die Architektur führt zu lose gekoppelten, statuslosen Anwendungen, die sich leichter erstellen, warten, testen und bereitstellen lassen.

Author

Mohammad Ashfaque

Senior Lead, Engineering

View all Articles

Blog category

Blog Categories

Top Authors

Andrii Kulshan

Andrii Kulshan

Consultant, Business Solutions

Oleksandra Skybina

Oleksandra Skybina

Manager, Quality Assurance

Marek Galant

Marek Galant

Manager, Sales Enablement

Thomas Griesser

Thomas Griesser

Senior Marketing Consultant

Anchit Sharma

Anchit Sharma

Director, Engineering