Freigeben über


Microsoft Orleans

Orleans ist ein plattformübergreifendes Framework, das das Erstellen verteilter Apps vereinfacht. Ob die Skalierung von einem einzelnen Server auf Tausende von Cloud-basierten Apps erfolgt, bietet Orleans Tools zur Unterstützung beim Verwalten der Komplexität verteilter Systeme. Es erweitert vertraute C#-Konzepte auf Multiserverumgebungen, sodass Entwickler sich auf die Logik der App konzentrieren können.

Hier erfahren Sie, was Orleans zu bieten hat.

  • Es ist darauf ausgelegt, elastisch zu skalieren. Fügen Sie Server hinzu oder entfernen Sie sie, und Orleans passt sich entsprechend an, um Fehlertoleranz und Skalierbarkeit aufrechtzuerhalten.
  • Sie vereinfacht die Entwicklung verteilter Apps mit einem gemeinsamen Satz von Mustern und APIs, sodass sie auch für die neuen verteilten Systeme zugänglich ist.
  • Es ist cloudnativ und wird auf Plattformen ausgeführt, auf denen .NET unterstützt wird – Linux, Windows, macOS und vieles mehr.
  • Es unterstützt moderne Bereitstellungsoptionen wie Kubernetes, Azure App Service und Azure Container Apps.

Orleans wird häufig als "Verteiltes .NET" bezeichnet, da der Fokus auf dem Aufbau robuster, skalierbarer cloudnativer Dienste liegt. Sehen wir uns das Akteurmodell als Nächstes an.

Das Akteurmodell

Orleans basiert auf dem Akteurmodell. Ab Anfang der 1970er Jahre ist das Akteurmodell nun eine Kernkomponente von Orleans. Im Akteurmodell ist jeder Akteur ein einfaches, gleichzeitiges, unveränderliches Objekt, das einen Zustand und ein entsprechendes Verhalten kapselt. Akteure kommunizieren ausschließlich mit asynchronen Nachrichten. Orleans erfand vor allem die Abstraktion des virtuellen Akteurs , wo Schauspieler dauerhaft existieren.

Anmerkung

Akteure sind rein logische Entitäten, die immer existieren, virtuell. Ein Akteur kann nicht explizit erstellt oder zerstört werden, und seine virtuelle Existenz ist nicht von dem Fehler eines Servers betroffen, der ihn ausführt. Da Akteure immer vorhanden sind, sind sie immer adressierbar.

Dieser neuartige Ansatz hilft bei der Erstellung einer neuen Generation von verteilten Apps für die Cloud-Ära. Das Orleans Programmiermodell schränkt die Komplexität in hoch parallel verteilten Apps ein, ohne Funktionen einzuschränken oder Einschränkungen zu erzwingen.

Weitere Informationen finden Sie unter Orleans: Virtuelle Akteure über Microsoft Research. Ein virtueller Aktor wird als Orleans-Grain dargestellt.

Was sind Getreide?

Grains gehören zu den Orleans-Primitiven. Im Hinblick auf das Akteurmodell ist ein Korn ein virtueller Akteur. Der Grundbaustein jeder Orleans-Anwendung sind Grains. Körner sind Entitäten, die eine benutzerdefinierte Identität, ein Verhalten und einen Zustand umfassen. Betrachten Sie die folgende visuelle Darstellung eines Korns:

Ein Korn besteht aus einer stabilen Identität, einem stabilen Verhalten und einem Zustand.

Kornidentitäten sind benutzerdefinierte Schlüssel, wodurch Getreide immer für Aufrufe zur Verfügung steht. Andere Körner oder eine beliebige Anzahl externer Clients können Getreide aufrufen. Jedes Korn ist eine Instanz einer Klasse, die eine oder mehrere der folgenden Schnittstellen implementiert:

Getreide kann veränderliche oder persistente Zustandsdaten enthalten, die in einem beliebigen Speichersystem gespeichert sind. Grains partitionieren implizit Anwendungszustände, ermöglichen automatische Skalierung und vereinfachen die Wiederherstellung nach Fehlern. Orleans behält den Kornzustand im Arbeitsspeicher bei, während das Korn aktiv ist, was zu geringerer Latenz und weniger Auslastung von Datenspeichern führt.

Der verwaltete Lebenszyklus eines Orleans Getreides.

Die Orleans Laufzeit instanziiert getreide automatisch bei Bedarf. Körner, die nicht für eine Weile verwendet werden, werden automatisch aus dem Arbeitsspeicher entfernt, um Ressourcen freizugeben. Diese Entfernung ist aufgrund ihrer stabilen Identität möglich und ermöglicht den Aufruf von Körnern, unabhängig davon, ob sie in den Speicher geladen werden oder nicht. Dies ermöglicht auch eine transparente Wiederherstellung von Fehlern, da der Aufrufer nicht wissen muss, auf welchem Server ein Korn zu einem beliebigen Zeitpunkt instanziiert wird. Getreide verfügt über einen verwalteten Lebenszyklus, wobei die Laufzeit für die Orleans Aktivierung/Deaktivierung und Das Platzieren/Auffinden von Getreide nach Bedarf verantwortlich ist. Dies ermöglicht das Schreiben von Code, als ob alle Grains immer im Speicher wären.

Was sind Silos?

Ein Silo ist ein weiteres Beispiel für einen Orleans Grundtyp. Ein Silo hostet ein oder mehrere Körner. Die Orleans Laufzeit implementiert das Programmiermodell für Anwendungen.

In der Regel wird eine Gruppe von Silos als Cluster für Skalierbarkeit und Fehlertoleranz ausgeführt. Wenn sie als Cluster ausgeführt wird, koordinieren Silos, um Arbeit zu verteilen und Fehler zu erkennen und wiederherzustellen. Die Laufzeit ermöglicht es, im Cluster gehostete Getreide so zu kommunizieren, als ob sie sich innerhalb eines einzelnen Prozesses befinden. Um die Beziehung zwischen Clustern, Silos und Getreiden zu visualisieren, betrachten Sie das folgende Diagramm:

Ein Cluster verfügt über ein oder mehrere Silos, und ein Silo hat mindestens ein Getreide.

Das vorherige Diagramm zeigt die Beziehung zwischen Clustern, Silos und Getreide. Es kann eine beliebige Anzahl von Clustern geben, jeder Cluster verfügt über ein oder mehrere Silos, und jedes Silo hat mindestens ein Getreide.

Zusätzlich zum Kernprogrammierungsmodell bieten Silos den Grains Laufzeitdienste wie Timer, Erinnerungen (persistente Timer), Persistenz, Transaktionen, Datenströme und mehr. Weitere Informationen finden Sie unter Was kann mit Orleans gemacht werden?.

Web-Apps und andere externe Clients rufen Körner im Cluster mithilfe der Clientbibliothek auf, die die Netzwerkkommunikation automatisch verwaltet. Clients können aus Gründen der Einfachheit auch mit Silos zusammen im gleichen Prozess gehostet werden.

Was kann mit Orleans?

Orleans ist ein Framework zum Erstellen von cloudeigenen Apps und sollte beim Erstellen von .NET-Apps berücksichtigt werden, die möglicherweise skaliert werden müssen. Es gibt scheinbar endlose Möglichkeiten, zu verwenden Orleans, aber die folgenden sind einige der gängigsten: Gaming, Banking, Chat-Apps, GPS-Tracking, Aktienhandel, Einkaufswagen, Abstimmungs-Apps und vieles mehr. Microsoft verwendet Orleans in Azure, Xbox, Skype, Halo, PlayFab, Gears of War und vielen anderen internen Diensten. Orleans bietet viele Features, die die Verwendung für verschiedene Anwendungen vereinfachen.

Ausdauer

Orleans stellt ein einfaches Persistenzmodell bereit, das die Verfügbarkeit des Zustands vor der Verarbeitung einer Anforderung sicherstellt und Konsistenz gewährleistet. Getreide kann mehrere benannte persistente Datenobjekte aufweisen. Beispielsweise könnte eines "Profil" für das Profil eines Benutzers genannt werden und ein anderes "Inventar" für deren Inventar. Dieser Zustand kann in einem beliebigen Speichersystem gespeichert werden.

Während ein Korn ausgeführt wird, wird der Zustand im Arbeitsspeicher gehalten, damit Orleans Leseanforderungen verarbeiten kann, ohne auf Speicher zuzugreifen. Wenn der Kornzustand aktualisiert wird, stellt der Aufruf IStorage.WriteStateAsync die Sicherungsspeicheraktualisierungen für Haltbarkeit und Konsistenz sicher.

Mehr Informationen finden Sie in Kornbeständigkeit.

Timer und Erinnerungen

Erinnerungen sind ein dauerhafter Planungsmechanismus für Getreide. Verwenden Sie sie, um sicherzustellen, dass eine Aktion zu einem zukünftigen Zeitpunkt abgeschlossen wird, auch wenn das Getreide derzeit nicht aktiviert ist. Timer sind das nicht dauerhafte Gegenstück zu Erinnerungen und können für Ereignisse mit hoher Häufigkeit verwendet werden, die keine Zuverlässigkeit erfordern.

Weitere Informationen finden Sie unter Timer und Erinnerungen.

Flexible Kornplatzierung

Wenn ein Grain in Orleans aktiviert wird, entscheidet die Laufzeitumgebung, auf welchem Server (Silo) es aktiviert werden soll. Dieser Prozess wird als Kornplatzierung bezeichnet.

Der Platzierungsprozess in Orleans ist vollständig konfigurierbar. Wählen Sie aus standardmäßigen Platzierungsrichtlinien wie zufällig, lokal bevorzugt und lastbasiert, oder konfigurieren Sie benutzerdefinierte Logik. Dies ermöglicht volle Flexibilität bei der Entscheidung, wo Getreide entsteht. Platzieren Sie z. B. Getreide auf einem Server in der Nähe der Ressourcen, mit denen sie arbeiten müssen, oder andere Getreide, mit denen sie kommunizieren.

Weitere Informationen finden Sie unter Grainplatzierung.

Grainversionsverwaltung und heterogene Cluster

Die sichere Aktualisierung von Produktionssystemen unter Berücksichtigung von Veränderungen kann eine Herausforderung darstellen, insbesondere bei zustandsbehafteten Systemen. Um dies zu berücksichtigen, können Getreideschnittstellen in Orleansversioniert werden.

Der Cluster führt eine Zuordnung darüber, welche Grain-Implementierungen auf welchen Silos in welchen Versionen verfügbar sind. Die Laufzeit verwendet diese Versionsinformationen zusammen mit Platzierungsstrategien, um bei der Weiterleitung von Aufrufen an Grains Platzierungsentscheidungen zu treffen. Neben der sicheren Aktualisierung eines versionierten Getreides ermöglicht dies auch heterogene Cluster, bei denen unterschiedliche Silos unterschiedliche Gruppen von verfügbaren Getreideimplementierungen aufweisen.

Weitere Informationen finden Sie unter Grainversionsverwaltung.

Staatslose Arbeitnehmer

Zustandslose Arbeiter sind speziell markierte Getreide ohne zugeordneten Zustand, die gleichzeitig auf mehreren Silos aktiviert werden können. Dies erhöht den Grad der Parallelität für zustandslose Funktionen.

Weitere Informationen finden Sie unter Zustandslose Workergrains.

Filter für Grainaufrufe

Ein Getreideaufruffilter ist für viele Getreidekorn üblich. Orleans unterstützt Filter für eingehende und ausgehende Anrufe. Häufig werden Autorisierung, Protokollierung und Telemetrie sowie fehlerbehandlung verwendet.

Anforderungskontext

Übergeben Sie Metadaten und andere Informationen mit einer Reihe von Anforderungen mithilfe des Anforderungskontexts. Verwenden Sie den Anforderungskontext, um verteilte Tracing-Informationen oder andere definierte Werte zu speichern.

Verteilte ACID-Transaktionen

Neben dem oben beschriebenen einfachen Persistenzmodell können Getreide den Transaktionsstatus aufweisen. Mehrere Getreide können gemeinsam an ACID-Transaktionen teilnehmen, unabhängig davon, wo ihr Zustand letztendlich gespeichert wird. Transaktionen in Orleans werden verteilt und dezentral (d. h. kein zentraler Transaktionsmanager oder Koordinator) und verfügen über serialisierbare Isolation.

Weitere Informationen zu Transaktionen finden Sie unter Transaktionen.

Bäche

Datenströme helfen beim Verarbeiten einer Reihe von Datenelementen in Nahezu-Echtzeit. Orleans Streams werden verwaltet; Streams müssen nicht erstellt oder registriert werden, bevor eine Grain-Instanz oder ein Client veröffentlicht oder abonniert. Dies ermöglicht eine bessere Entkoppelung von Stromerzeugern und Verbrauchern voneinander und der Infrastruktur.

Die Streamverarbeitung ist zuverlässig: Getreide kann Prüfpunkte (Cursor) speichern und während der Aktivierung oder später auf einen gespeicherten Prüfpunkt zurücksetzen. Streams unterstützen die Batchübermittlung von Nachrichten an Verbraucher, um die Effizienz und Wiederherstellungsleistung zu verbessern.

Streams werden durch Warteschlangendienste wie Azure Event Hubs, Amazon Kinesis und andere gesichert.

Eine beliebige Anzahl von Datenströmen kann in einer kleineren Anzahl von Warteschlangen multixiert werden, und die Verantwortung für die Verarbeitung dieser Warteschlangen wird gleichmäßig über den gesamten Cluster verteilt.

Einführung in Orleans Video

Eine Videoeinführung zu Orleans finden Sie in folgendem Video:

Nächste Schritte