Was ist .NET Aspire?

Abgeschlossen

Cloud-Ökosysteme wie Microsoft Azure und Amazon Web Services (AWS) sind tief in die IT-Branche eingebettet und beliebte Hostinglösungen für Webanwendungen und Webdienste. Es ist wahrscheinlich, dass ein Cloudhostingsystem die Standardauswahl für Ihre Anwendungen ist, sodass Sie sicherstellen müssen, dass die von Ihnen erstellten Anwendungen so konzipiert sind, dass sie maximal von dem System profitieren können.

Eine cloudnative Anwendung ist eine Anwendung, die Sie speziell für die Ausführung in der Cloud entwerfen. Die Anwendungen weisen häufig bestimmte Architekturmuster auf, damit Leistung, Skalierbarkeit und Zuverlässigkeit optimal sind.

Stellen Sie sich vor, Sie arbeiten für ein Outdoor-Bekleidungs- und Geräteunternehmen. Der Vorstand hat Sie gebeten, eine neue eShop-Web-App für die Haupt-Kundenwebsite des Unternehmens zu entwickeln. Ihr Team ist mit dem Microservices-Modell vertraut und Sie möchten wissen, ob die Verwendung von .NET Aspire das Projekt einfacher macht.

In dieser Lektion erfahren Sie mehr über cloudnative Architekturen und sehen die Herausforderungen, die bei der Erstellung auftreten können. Sie werden auch sehen, wie .NET Aspire diese Herausforderungen bewältigen kann.

Was ist eine cloudnative Anwendung?

Eine cloudnative Anwendung ist eine Anwendung, die so entwickelt wird, dass sie die Cloudinfrastruktur optimal nutzt, um die beste Leistung, Verfügbarkeit und Resilienz zu erzielen. Es gibt sechs Säulen der cloudnativen Softwarearchitekturen:

  • Cloudinfrastruktur. Cloudnative Anwendungen werden in Cloudhostinglösungen und nicht in lokalen Serverfarmen bereitgestellt.
  • Microservices. Cloudnative Anwendungen werden als eine Reihe von Microservices implementiert, von denen jede einen kleinen Teil der Geschäftsfunktionalität implementiert.
  • Container. Microservices und andere Teile der Anwendung werden in Containern entwickelt und bereitgestellt, um eine konsistente Ausführungsumgebung sicherzustellen.
  • Sicherungsdienste. Zusätzliche Ressourcen, z. B. Datenbanken und Zwischenspeicherungsdienste, können verwendet werden, um gemeinsame Funktionen für Microservices bereitzustellen.
  • Modernes Design. Cloudnative Anwendungen entsprechen der Zwölf-Faktor-Anwendungsmethodik, die Prinzipien wie CI/CD (Continuous Integration und Continuous Delivery), Disposability, Portbindung usw. umfasst.
  • Automatisierung. Cloudnative Anwendungen verwenden Infrastruktur als Code (IaC), um die Plattformbereitstellung und -implementierung zu automatisieren.

Konzeptionelles Diagramm mit den sechs Säulen von cloudnativen Anwendungen.

Um Flexibilität zu bieten, besteht eine cloudnative Anwendung aus einer Reihe von Microservices. Jeder Microservice:

  • Implementiert einen Teil der gesamten Funktionalität.
  • Wird in einem eigenen Prozess ausgeführt und von den anderen isoliert, häufig in einem dedizierten Container.
  • Wird von einem separaten Team erstellt.
  • Kommuniziert mit den anderen, ist aber lose gekoppelt.

Jedes Team wählt die Sprachen und Technologien aus, die sie bevorzugen, um ihren Microservice zu implementieren. Jeder Microservice wird unabhängig von den anderen bereitgestellt und skaliert.

Das folgende Diagramm veranschaulicht die Unterschiede zwischen einer herkömmlichen monolithischen Webanwendung und einer Webanwendung, die aus Microservices besteht.

Konzeptionelles Diagramm, das die Unterschiede zwischen einer monolithischen Webanwendung und einer Anwendung zeigt, die aus Microservices besteht.

Cloudnative Apps können viele Vorteile für Ihr Unternehmen realisieren. Zum Beispiel:

  • Indem Sie Ihre App in der Cloud hosten, müssen Sie keine Infrastruktur wie Hostingserver, Betriebssysteme und unterstützende Dienste selbst erstellen und verwalten.
  • Da jeder Microservice unabhängig entwickelt wird, können Sie kontinuierlich neue Funktionen darin bereitstellen, ohne auf andere Teams oder Meilensteine der Hauptversion warten zu müssen.
  • Da jeder Microservice in einem oder mehreren Containern ausgeführt wird, wissen Sie, dass die Umgebung in allen Test-, Staging- und Produktionsumgebungen identisch ist.
  • Sie können ein Container-Orchestrierungssystem wie Kubernetes verwenden, um zusätzliche Instanzen schnell bereitzustellen, um auf zusätzliche Anforderungen zu reagieren.

Herausforderungen durch cloudnative Anwendungen

Eine cloudnative Anwendung, die aus mehreren Microservices mit vielen Features besteht, kann komplex werden und stellt Herausforderungen dar, die bei monolithischen Apps nicht entstehen. Zum Beispiel:

  • App-Definition. Sofern nicht sorgfältig dokumentiert, kann es für Entwickler schwierig sein, zu verstehen, aus welchen Komponenten die vollständige cloudnative App besteht.
  • Kommunikation. Jeder Microservice muss möglicherweise Nachrichten oder Daten mit anderen Microservices austauschen, um eine Antwort auf eine Benutzeranfrage zu formulieren. Während Sie eine solche Kommunikation aktivieren müssen, müssen Sie dies auf eine Weise tun, die einen Microservice nicht eng mit einem anderen verbindet. Sie benötigen auch Kommunikation, um in Zeiten hoher Nachfrage oder während Dienstausfällen zuverlässig zu bleiben.
  • Resilienz: Kein Hostingdienst kann 100 % verfügbar sein. Sie müssen sicherstellen, dass die App in seltenen Fällen, in denen ein Microservice nicht verfügbar ist, Fehler robust verarbeitet und Anforderungen speichert, bis der Dienst wieder verfügbar ist.
  • Verteilte Daten. Jeder Microservice implementiert eine eigene Datenspeicherebene und verwendet möglicherweise nicht denselben Datenbankserver wie die anderen. Sie müssen überlegen, wie Sie Daten aus mehreren Microservices abfragen und wie Transaktionen implementiert werden.
  • Geheimnisse. Wenn Ihre App vertrauliche Daten verarbeitet, muss jeder Microservice jede empfangene Anforderung authentifizieren, bevor eine Antwort zurückgegeben wird. Häufig werden geheime Schlüssel wie asymmetrische und symmetrische Verschlüsselungsschlüssel verwendet, um Daten zu schützen und anrufende Benutzer und Microservices positiv zu identifizieren. Sie müssen berücksichtigen, wie diese Geheimnisse in Ihrer cloudeigenen App gespeichert und ausgetauscht werden.
  • Entwickler-Onboarding. Neue Entwickler müssen in der Lage sein, die Architektur der App zu verstehen und schnell damit zu arbeiten. Sie müssen sicherstellen, dass neue Entwickler ohne viel domänenübergreifendes Wissen oder lokales Setup schnell auf dem Laufenden sind.

In letzter Zeit hat das cloudeigene Anwendungsdesign an Popularität gewonnen, aber Herausforderungen wie die in diesem Abschnitt verhindern, dass einige Teams dieses Muster nutzen. .NET verfügt beispielsweise über alle Features, die zum Lösen dieser Probleme erforderlich sind, aber die Lösungen benötigen möglicherweise erhebliche Investitionen in Schulungen und benutzerdefinierten Code.

Was ist .NET Aspire?

.NET Aspire ist ein neuer cloudfähiger Stapel, der für .NET entwickelt wurde, um Entwicklern die schnelle und einfache Erstellung von cloudeigenen Anwendungen zu ermöglichen. Sehen wir uns die Features von .NET Aspire an, die versuchen die Herausforderungen zu lösen, die wir gesehen haben.

Orchestrierung

Microservices und ihre lose gekoppelte Art erhöhen die Flexibilität Ihrer bereitgestellten App, können aber die Konfiguration erschweren. Die Liste der Dienste, aus denen die App besteht, kann unübersichtlich werden, und der Endpunkt, in dem ein Microservice verfügbar ist, kann schwer zu identifizieren sein. .NET Aspire bietet Orchestrierungsfunktionen für Folgendes:

  • Sie können für alle Teams eindeutig die .NET-Projekte, Container, ausführbare Dateien und Cloudressourcen angeben, aus denen die Anwendung besteht.
  • Microservices können Endpunkte für alle Komponenten der Anwendung automatisch ermitteln. .NET Aspire führt diese Dienstermittlung aus, indem Verbindungszeichenfolgen verwaltet und bei Bedarf in Microservices eingefügt werden.

Wenn Sie eine .NET Aspire-Lösung erstellen, wird ein neues Projekt in der Lösung namens <SolutionName>.AppHost angezeigt. Dieses Projekt implementiert die Orchestrierung für Ihre App und Sie sollten sicherstellen, dass es sich um das Startprojekt für die Lösung handelt.

Komponenten

Microservices verfügen in der Regel über funktionale Anforderungen für komplexe Sicherungsdienste, die ihre Features untermauern. Zum Beispiel:

  • Datenspeicher: Um Daten zur Unterstützung von Produktkatalogen, Einkaufswagen, Identitätsspeichern und anderen Features zu behalten, müssen Microservices Daten in strukturierten oder halbstrukturierten Stores speichern.
  • Zwischenspeichern. Um die Leistung zu maximieren, können Microservices partielle oder vollständige Antworten in einem Cache speichern, sodass nachfolgende ähnliche Anforderungen schneller erfüllt werden können.
  • Messaging: Lose gekoppelte Microservices müssen miteinander kommunizieren, und Sie müssen sicherstellen, dass diese Kommunikation auch dann zuverlässig ist, wenn der Datenverkehr hoch ist oder Netzwerkbedingungen eine Herausforderung darstellen. Ein Dienst, der Nachrichten von Absendern an Empfänger in die Warteschlange stellt und verteilt, ist eine häufige Anforderung.

In .NET Aspire ist es einfach, diese Sicherungsdienste in jedem Microservice zu implementieren, da der Stapel .NET Aspire-Komponenten enthält. Jede Komponente ist ein NuGet-Paket, das Sie Ihrer Lösung hinzufügen und eine Standardschnittstelle für einen Sicherungsdienst implementieren können. Diese Standardschnittstelle stellt sicher, dass Ihr Microservice eine konsistente und nahtlose Verbindung mit seinen Sicherungsdiensten herstellt.

Die einsatzbereiten .NET Aspire-Komponenten umfassen:

  • Datenspeicherkomponenten wie solche für PostgreSQL, SQL Database, Azure Cosmos DB und MongoDB.
  • Zwischenspeichern von Komponenten wie der Komponente für Redis.
  • Messaging-Komponenten, z. B. für RabbitMQ und Azure Service Bus.

Wichtig

.NET Aspire umfasst viele Komponenten, die mit Azure-Diensten funktionieren, z. B. Azure Storage und Azure Service Bus, aber Azure ist für .NET Aspire-Projekte nicht erforderlich, und sie funktionieren gleichermaßen gut mit Sicherungsdiensten außerhalb von Azure, wie RabbitMQ und MongoDB.

Tools

.NET Aspire ist ein weiteres Tool, das Entwicklern in Visual Studio zur Verfügung steht. Zum Beispiel:

  • Mit neuen Projektvorlagen können Sie .NET Aspire-Lösungen mit wenigen Schritten in einem Assistenten erstellen.
  • Das .NET Aspire-Dashboard ist eine Weboberfläche, die immer dann angezeigt wird, wenn Sie die Lösung aus Visual Studio starten. In diesem Dashboard werden alle Microservices und Sicherungsdienste für die App angezeigt, und Sie können sie zu Testzwecken aufrufen. Außerdem werden Leistungs- und Überwachungstools angezeigt.
  • Zusätzliche Menüelemente werden angezeigt, mit denen Sie eine .NET Aspire-Komponente hinzufügen, ein Projekt für .NET Aspire Orchestrator-Unterstützung registrieren oder andere Aufgaben ausführen können.

Hinweis

Weitere Informationen zu den .NET Aspire-Tools finden Sie später in diesem Modul.

Weitere Informationen