Teilen über


Orleans Vorteile

Die wichtigsten Vorteile Orleans sind:

  • Entwicklerproduktivität: Auch für Nicht-experten Programmierer.
  • Transparente Skalierbarkeit standardmäßig: Erfordert keinen besonderen Aufwand vom Entwickler.

Entwicklerproduktivität

Das Orleans Programmiermodell erhöht die Produktivität, unabhängig von der Kompetenzstufe, indem die folgenden wichtigen Abstraktionen, Garantien und Systemdienste bereitgestellt werden.

Vertrautes objektorientiertes Programmierparadigma (OOP)

Getreide sind .NET-Klassen, die deklarierte .NET-Getreideschnittstellen mit asynchronen Methoden implementieren. Körner werden als Remoteobjekte angezeigt, deren Methoden direkt aufgerufen werden können. Dies stellt das vertraute OOP-Paradigma bereit, indem Methodenaufrufe in Nachrichten umgewandelt, an die richtigen Endpunkte weitergeleitet, die Methoden des Zielkorns aufgerufen und Fehler und Eckfälle transparent behandelt werden.

Einzel-Thread-Ausführung von Grains

Die Laufzeit garantiert, dass ein Grain niemals gleichzeitig in mehr als einem Thread ausgeführt wird. In Kombination mit der Isolation von anderen Körnern stehen Entwickler nie vor gleichzeitigen Zugriffsproblemen auf Körnerebene und benötigen keine Sperren oder anderen Synchronisierungsmechanismen, um den Zugriff auf gemeinsame Daten zu steuern. Dieses Feature allein macht die Entwicklung verteilter Anwendungen auch für Nicht-Experten programmierbar.

Transparente Aktivierung

Die Laufzeit aktiviert nur dann ein Korn, wenn eine Nachricht vorhanden ist, die verarbeitet werden soll. Dadurch wird die Erstellung eines Kornverweises (gesteuert durch Den Anwendungscode) und die physische Aktivierung des Korns im Arbeitsspeicher (transparent für die Anwendung) sauber getrennt. Dies ähnelt dem virtuellen Speicher , in dem das Betriebssystem entscheidet, wann Seiten in den Arbeitsspeicher übertragen werden sollen und wann Seiten aus dem Speicher entfernt werden sollen. In ähnlicher Weise entscheidet die Laufzeit in Orleans, wann ein Grain (in den Speicher zu bringen) und wann ein Grain zu deaktivieren (aus dem Speicher zu entfernen) ist. Die Anwendung hat ununterbrochenen Zugriff auf den vollständigen "Speicherraum" von logisch erstellten Körnern, unabhängig davon, ob sie sich zu einem bestimmten Zeitpunkt im physischen Speicher befinden.

Die transparente Aktivierung ermöglicht einen dynamischen, adaptiven Lastenausgleich über die Platzierung und Migration von Getreide über den Pool von Hardwareressourcen hinweg. Dieses Feature verbessert das herkömmliche Akteurmodell erheblich, bei dem die Lebensdauer des Akteurs anwendungsverwaltet wird.

Standorttransparenz

Ein Kornverweis (Proxyobjekt), das zum Aufrufen der Methoden eines Korns oder zum Übergeben an andere Komponenten verwendet wird, enthält nur die logische Identität des Korns. Die Orleans Laufzeit behandelt transparent die Übersetzung der logischen Identität des Korns an seinen physischen Standort und das entsprechende Routing von Nachrichten.

Der Anwendungscode kommuniziert mit Getreide, ohne seine physische Position zu kennen. Dieser Speicherort kann sich im Laufe der Zeit aufgrund von Fehlern, Ressourcenmanagement oder weil eine Einheit bei Aufruf deaktiviert wird, ändern.

Transparente Integration in einen beständigen Speicher

Orleans ermöglicht die deklarative Zuordnung des Speicherzustands eines Korns zu einem persistenten Speicher. Es synchronisiert Updates und stellt transparent sicher, dass Anrufer Ergebnisse erst erhalten, nachdem der persistente Zustand erfolgreich aktualisiert wurde. Das Erweitern und/oder Anpassen des Satzes vorhandener persistenter Speicheranbieter ist einfach.

Automatische Ausbreitung von Fehlern

Die Laufzeit gibt unbehandelte Fehler automatisch entlang der Aufrufkette weiter, mit der Semantik von asynchronen und verteilten Try/Catch-Operationen. Daher gehen Fehler nicht innerhalb einer Anwendung verloren. Dies ermöglicht das Platzieren von Fehlerbehandlungslogik an geeigneten Stellen, ohne die mühsame Arbeit des manuellen Weiterleitens von Fehlern auf jeder Ebene.

Transparente Skalierbarkeit standardmäßig

Das Orleans Programmiermodell führt Entwickler zur erfolgreichen Skalierung von Anwendungen oder Diensten über mehrere Größenordnungen. Dies wird erreicht, indem bewährte Methoden und Muster integriert sowie eine effiziente Implementierung von Systemfunktionalität auf niedrigerer Ebene bereitgestellt wird.

Hier sind einige wichtige Faktoren, die Skalierbarkeit und Leistung ermöglichen:

Implizite fein abgestufte Partitionierung des Anwendungszustands

Die Verwendung von Korn als direkt adressierbare Entitäten unterbricht implizit den Gesamtzustand der Anwendung. Während das Orleans Programmiermodell in den meisten Fällen keine Getreidegröße vorschreibt, ist es sinnvoll, eine relativ große Anzahl von Getreide (Millionen oder mehr) zu haben, wobei jedes eine natürliche Anwendungsentität darstellt, z. B. ein Benutzerkonto oder eine Bestellung.

Da die Körner individuell adressierbar sind und ihre physische Position von der Laufzeit abstrahiert wird, besitzt Orleans enorme Flexibilität bei der Lastverteilung und beim Umgang mit Hotspots auf transparente und generische Weise, ohne dass der Anwendungsentwickler darüber nachdenken muss.

Adaptive Ressourcenverwaltung

Körner gehen bei der Interaktion nicht von der Lokalität anderer Körner aus. Aufgrund dieser Standorttransparenz kann die Laufzeit die Zuordnung verfügbarer Hardwareressourcen dynamisch verwalten und anpassen. Das Laufzeitsystem erreicht dies, indem es fein abgestimmte Entscheidungen trifft, um Grains im Cluster zu platzieren und zu migrieren, als Reaktion auf Last- und Kommunikationsmuster – ohne eingehende Anfragen abzulehnen. Durch das Erstellen mehrerer Replikate eines bestimmten Korns kann die Laufzeit den Durchsatz erhöhen, ohne den Anwendungscode zu ändern.

Multiplexkommunikation

Instanzen in Orleans verfügen über logische Endpunkte, und Nachrichten zwischen ihnen werden über einen festen Satz von physischen All-zu-All-Verbindungen (TCP-Sockets) multiplexiert. Dadurch kann die Laufzeit Millionen adressierbarer Entitäten mit geringem Betriebssystemaufwand pro Korn hosten. Darüber hinaus verursacht das Aktivieren und Deaktivieren eines Getreides nicht die Kosten für die Registrierung/Aufhebung der Registrierung eines physischen Endpunkts (z. B. einen TCP-Port oder eine HTTP-URL) oder sogar das Schließen einer TCP-Verbindung.

Effiziente Planung

Das Laufzeitsystem plant die Ausführung vieler Einzelthread-Körner mithilfe des .NET-Threadpools, der hinsichtlich der Leistung hoch optimiert ist. Wenn Grain-Code im nicht-blockierenden, fortsetzungsbasierten Stil (eine Anforderung des Orleans Programmiermodells) geschrieben wird, wird der Anwendungscode sehr effizient in einer "kooperativen" Multithread-Form ohne Wettbewerb ausgeführt. Dies ermöglicht es dem System, hohen Durchsatz zu erzielen und bei sehr hoher CPU-Auslastung (bis zu 90%+) mit großer Stabilität zu laufen.

Die Tatsache, dass das Wachstum der Anzahl von Körnern und erhöhter Last nicht zu zusätzlichen Threads oder anderen Betriebssystem-Primitiven führt, unterstützt die Skalierbarkeit einzelner Knoten und des gesamten Systems.

Explizite Asynchronie

Das Orleans Programmiermodell macht die asynchrone Natur verteilter Anwendungen explizit und führt Entwickler dazu, nicht blockierenden asynchronen Code zu schreiben. In Kombination mit asynchronem Messaging und effizienter Planung ermöglicht dies einen großen Grad an verteilter Parallelität und gesamter Durchsatz, ohne dass explizites Multithreading erforderlich ist.