Freigeben über


Microsoft Orleans

Orleans:

  • Ist ein plattformübergreifendes Framework zum Erstellen robuster, skalierbarer verteilter Apps. Verteilte Apps werden als Apps definiert, die mehr als einen einzelnen Prozess umfassen, häufig über Hardwaregrenzen hinaus, indem Peer-to-Peer-Kommunikation verwendet wird.
  • Skaliert von einem einzelnen lokalen Server auf Tausende verteilter, hoch verfügbarer Apps in der Cloud.
  • Erweitert vertraute Konzepte und C#-Idiome auf Umgebungen mit mehreren Servern.
  • Ist so konzipiert, dass sie elastisch skaliert werden kann. Wenn ein Host einem Cluster beitritt, kann er neue Aktivierungen akzeptieren. Wenn ein Host den Cluster verlässt, werden die vorherigen Aktivierungen auf diesem Host bei Bedarf auf den verbleibenden Hosts erneut aktiviert. Ein Host kann einen Cluster aufgrund einer Verkleinerung oder eines Computerfehlers verlassen. Ein Orleans Cluster kann auf einen einzelnen Host skaliert werden. Dieselben Eigenschaften, die eine flexible Skalierbarkeit ermöglichen, ermöglichen Fehlertoleranz. Der Cluster erkennt Fehler automatisch und führt eine schnelle Wiederherstellung durch.
  • Vereinfacht die Komplexität der verteilten App-Entwicklung, indem eine gemeinsame Reihe von Mustern und APIs bereitgestellt wird.
  • Ermöglicht Entwicklern, die mit der Entwicklung von Einzelserver-Apps vertraut sind, einen Umstieg auf die Erstellung robuster, skalierbarer cloudnativer Dienste und verteilter Apps.
  • Wird manchmal als "Distributed .NET" bezeichnet.
  • Ist das Framework der Wahl beim Erstellen von cloudeigenen Apps.
  • Wird überall ausgeführt, wo .NET unterstützt wird. Dazu gehört das Hosting unter Linux, Windows und macOS.
  • Apps können in Kubernetes, virtuellen Computern und PaaS-Diensten wie Azure App Service und Azure Container Appsbereitgestellt werden.

Das "Actor-Modell"

Orleans basiert auf dem "Actor Model". Das Akteurmodell stammt aus den frühen 1970er Jahren und ist jetzt eine Kernkomponente von Orleans. Das Akteurmodell ist ein Programmiermodell, in dem jeder Akteur ein einfaches, gleichzeitiges, unveränderliches Objekt ist, das einen Zustand und ein entsprechendes Verhalten kapselt. Akteure kommunizieren ausschließlich mit asynchronen Nachrichten miteinander. Orleans erfand insbesondere die Virtual Actor Abstraktion, in der Schauspieler ständig 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.

Dies ist ein neuer Ansatz zum Erstellen einer neuen Generation von verteilten Apps für die Cloud-Ära. Das Orleans Programmiermodell schränkt die Komplexität hoch parallel verteilter Apps ein, ohne die Funktionen einzuschränken oder Einschränkungen für den Entwickler 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, die Getreide für Aufrufe immer zur Verfügung stellen. Grains können von anderen Grains oder von einer beliebigen Anzahl externer Clients aufgerufen werden. Jedes Korn ist eine Instanz einer Klasse, die eine oder mehrere der folgenden Schnittstellen implementiert:

Getreide kann veränderliche oder persistente Zustandsdaten aufweisen, die in jedem Speichersystem gespeichert werden können. Grains partitionieren implizit Anwendungszustände, ermöglichen automatische Skalierung und vereinfachen die Wiederherstellung nach Fehlern. Der Kornzustand wird im Arbeitsspeicher gehalten, 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 Grains automatisch bei Bedarf. Körner, die nicht für eine Weile verwendet werden, werden automatisch aus dem Arbeitsspeicher entfernt, um Ressourcen freizugeben. Dies ist aufgrund ihrer stabilen Identität möglich, die das Aufrufen von Körnern ermöglicht, unabhängig davon, ob sie bereits in den Speicher geladen wurden 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 Orleans Laufzeit für die Aktivierung/Deaktivierung und das Platzieren/Auffinden von Getreide nach Bedarf verantwortlich ist. Auf diese Weise kann der Entwickler Code schreiben, als ob alle Körner immer im Arbeitsspeicher sind.

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 sich Silos miteinander, um Arbeit zu verteilen und Fehler zu erkennen und wiederherzustellen. Die Laufzeit ermöglicht es, im Cluster gehostete Körner miteinander 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. Sie können über eine beliebige Anzahl von Clustern verfügen, jeder Cluster verfügt über ein oder mehrere Silos, und jedes Silo hat mindestens ein Getreide.

Zusätzlich zum Kernprogrammiermodell stellen Silos eine Reihe von Laufzeitdiensten wie Timer, Erinnerungen (dauerhafte Timer), Persistenz, Transaktionen oder Streams für Grains bereit. Weitere Informationen finden Sie unter Was kann ich mit Orleanstun?.

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 ich mit Orleanstun?

Orleans ist ein Framework zum Erstellen von cloudeigenen Apps und sollte bei der Erstellung von .NET-Apps berücksichtigt werden, die schließlich skaliert werden müssen. Es gibt scheinbar endlose Möglichkeiten, Orleanszu verwenden, aber die folgenden sind einige der gängigsten Methoden; Gaming, Banking, Chat-Apps, GPS-Tracking, Aktienhandel, Einkaufswagen, Abstimmungs-Apps und vieles mehr. Orleans wird von Microsoft in Azure, Xbox, Skype, Halo, PlayFab, Gears of War und vielen anderen internen Diensten verwendet. Orleans verfügt über viele Features, die die Verwendung für eine Vielzahl von Anwendungen erleichtern.

Ausdauer

Orleans stellt ein einfaches Persistenzmodell bereit, das sicherstellt, dass der Zustand vor der Verarbeitung einer Anforderung verfügbar ist und dass die Konsistenz beibehalten wird. Getreide kann mehrere benannte persistente Datenobjekte aufweisen. Zum Beispiel könnte es eines namens "Profil" für das Profil eines Benutzers und eines namens "Inventar" für sein Inventar geben. Dieser Zustand kann in einem beliebigen Speichersystem gespeichert werden.

Während der Ausführung eines Grains wird sein Zustand im Arbeitsspeicher beibehalten, sodass Leseanforderungen ohne Zugriff auf den Speicher verarbeitet werden können. Wird der Zustand aktualisiert, können Sie durch Aufrufen von IStorage.WriteStateAsync sicherstellen, dass der Sicherungsspeicher im Sinne der Dauerhaftigkeit und Konsistenz aktualisiert wird.

Mehr Informationen finden Sie in Kornbeständigkeit.

Timer und Erinnerungen

Erinnerungen sind ein dauerhafter Planungsmechanismus für Getreide. Sie können verwendet werden, um sicherzustellen, dass einige Aktionen zu einem zukünftigen Zeitpunkt abgeschlossen werden, auch wenn das Getreide zu diesem Zeitpunkt 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 in Orleansein Getreide aktiviert wird, entscheidet die Laufzeit, auf welchem Server (Silo) dieses Korn aktiviert werden soll. Dies wird als Grainplatzierungbezeichnet.

Der Platzierungsprozess in Orleans ist vollständig konfigurierbar. Entwickler können aus einer Reihe vordefinierter Platzierungsrichtlinien wie zufällig, lokal bevorzugt und lastbasiert wählen oder eine benutzerdefinierte Logik konfigurieren. Dies ermöglicht volle Flexibilität bei der Entscheidung, wo Getreide entsteht. So können Grains z. B. auf einem Server in der Nähe von Ressourcen, mit denen sie arbeiten müssen, oder von anderen Grains, mit denen sie kommunizieren, platziert werden.

Weitere Informationen finden Sie unter Grainplatzierung.

Grainversionsverwaltung und heterogene Cluster

Das Upgrade von Produktionssystemen in einer Weise, die sicher änderungen berücksichtigt, kann schwierig sein, insbesondere in zustandsbehafteten Systemen. Um dies zu berücksichtigen, können Kornschnittstellen in Orleans versionsiert werden.

Der Cluster verwaltet eine Zuordnung der verfügbaren Grainimplementierungen auf den Silos im Cluster sowie die Versionen dieser Implementierungen. Diese Versionsangabe wird von der Laufzeit in Verbindung mit Platzierungsstrategien verwendet, um beim Weiterleiten von Aufrufen an Grains Platzierungsentscheidungen zu treffen. Darüber hinaus ermöglicht dies zur sicheren Aktualisierung eines versionsierten Getreides auch heterogene Cluster, bei denen verschiedene Silos unterschiedliche Gruppen von Getreideimplementierungen zur Verfügung haben.

Weitere Informationen finden Sie unter Grainversionsverwaltung.

Staatslose Arbeitnehmer

Zustandslose Worker sind speziell markierte Grains, denen kein Zustand zugeordnet ist und die in mehreren Silos gleichzeitig 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 Filter für Grainaufrufe ist eine bei vielen Grains übliche Logik. Orleans unterstützt Filter für eingehende und ausgehende Anrufe. Filter für Autorisierung, Protokollierung und Telemetrie und Fehlerbehandlung gelten als häufig.

Anforderungskontext

Metadaten und andere Informationen können mithilfe des Anforderungskontexts mit einer Reihe von Anforderungen übergeben werden. Der Anforderungskontext kann zum Speichern von verteilten Ablaufverfolgungsinformationen oder anderen benutzerdefinierten Werten verwendet werden.

Verteilte ACID-Transaktionen

Neben dem oben beschriebenen einfachen Persistenzmodell können Getreide einen Transaktionsstatusaufweisen. Mehrere Grains können zusammen an ACID-Transaktionen teilnehmen, unabhängig vom endgültigen Speicherort ihres Zustands. Transaktionen in Orleans sind verteilt und dezentralisiert (d. h. es gibt keinen zentralen Transaktions-Manager oder -Koordinator), und sie verfügen über serialisierbare Isolation.

Weitere Informationen zu Transaktionen finden Sie unter Transaktionen.

Bäche

Datenströme helfen Entwicklern, eine Reihe von Datenelementen in Nahezu-Echtzeit zu verarbeiten. Orleans-Streams werden verwaltet. Sie müssen erst erstellt oder registriert werden, wenn ein Grain oder Client einen Stream veröffentlicht oder abonniert. Dies ermöglicht eine größere Entkoppelung von Stromerzeugern und Verbrauchern voneinander und der Infrastruktur.

Die Streamverarbeitung ist zuverlässig: Grains können Prüfpunkte (Cursor) speichern und während der Aktivierung oder zu einem späteren Zeitpunkt 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

Wenn Sie an einer Videoeinführung in Orleansinteressiert sind, schauen Sie sich das folgende Video an:

Nächste Schritte