Freigeben über


Orleans-Grain-Verzeichnis

Körner weisen stabile logische Identitäten auf. Sie können während der Lebensdauer der Anwendung viele Male aktiviert (instanziiert) und deaktiviert werden, aber zu jedem Zeitpunkt existiert maximal eine Aktivierung eines Grains. Jedes Mal, wenn ein Getreide aktiviert wird, kann es auf einem anderen Silo im Cluster platziert werden. Wenn ein Getreide im Cluster aktiviert wird, registriert es sich im Kornverzeichnis. Dadurch wird sichergestellt, dass nachfolgende Aufrufe dieses Getreides an diese Aktivierung übermittelt werden und die Erstellung anderer Aktivierungen (Instanzen) dieses Korns verhindert. Das Grain-Verzeichnis ist dafür verantwortlich, eine Zuordnung zwischen einer Grain-Identität und dem Standort (welchem Silo) ihrer aktuellen Aktivierung aufrechtzuerhalten.

Standardmäßig verwendet Orleans ein integriertes verteiltes In-Memory-Verzeichnis. Dieses Verzeichnis ist schließlich einheitlich und in allen Silos im Cluster in Form einer verteilten Hashtabelle partitioniert.

Ab Version 3.2.0 Orleans unterstützt auch austauschbare Getreideverzeichnisimplementierungen.

Zwei solche Plug-Ins sind im Release 3.2.0 enthalten:

Sie können für jeden Graintyp konfigurieren, welche Grain-Verzeichnisimplementierung verwendet werden soll, und Sie können sogar Ihre Implementierung einschleusen.

Welches Grain-Verzeichnis sollten Sie verwenden?

Es wird empfohlen, immer mit dem Standardverzeichnis (dem integrierten verteilten Verzeichnis im Arbeitsspeicher) zu beginnen. Obwohl es schließlich konsistent ist und gelegentlich doppelte Aktivierungen zulässt, wenn der Cluster instabil ist, ist das integrierte Verzeichnis eigenständig, verfügt über keine externen Abhängigkeiten, erfordert keine Konfiguration und wurde seit Beginn erfolgreich in der Produktion verwendet.

Wenn Sie erfahrungen mit Orleans und einem Anwendungsfall haben, der eine stärkere Einzelaktivierungsgarantie erfordert, oder wenn Sie die Anzahl der deaktivierten Getreidekörnen beim Herunterfahren eines Silos minimieren möchten, erwägen Sie die Verwendung einer speicherbasierten Getreideverzeichnisimplementierung, z. B. die Redis-Implementierung. Versuchen Sie, es zuerst für eine oder einige wenige Kornsorten zu verwenden, beginnend mit denen, die langlebig sind, einen bedeutenden Status haben oder einen kostspieligen Initialisierungsprozess erfordern.

Konfiguration

Standardmäßig müssen Sie nichts tun; Orleans verwendet automatisch das Speicherkornverzeichnis und partitioniert es über den Cluster. Wenn Sie eine nicht standardmäßige Kornverzeichniskonfiguration verwenden möchten, müssen Sie den Namen des zu verwendenden Verzeichnis-Plug-Ins angeben. Sie können dies über ein Attribut für die Kornklasse tun und das Verzeichnis-Plug-In mit diesem Namen mithilfe der Abhängigkeitsinjektion während der Silokonfiguration konfigurieren.

Grainkonfiguration

Geben Sie den Namen des Grain-Verzeichnis-Plugins mithilfe von GrainDirectoryAttribute an.

[GrainDirectory(GrainDirectoryName = "my-grain-directory")]
public class MyGrain : Grain, IMyGrain
{
    // ...
}

Silokonfiguration

Hier erfahren Sie, wie Sie die Redis-Getreideverzeichnisimplementierung konfigurieren:

siloBuilder.AddRedisGrainDirectory(
    "my-grain-directory",
    options => options.ConfigurationOptions = redisConfiguration);

Konfigurieren Sie das Azure-Getreideverzeichnis wie folgt:

siloBuilder.AddAzureTableGrainDirectory(
    "my-grain-directory",
    options => options.ConnectionString = azureConnectionString);

Sie können mehrere Verzeichnisse mit unterschiedlichen Namen für die Verwendung mit unterschiedlichen Kornklassen konfigurieren:

siloBuilder
    .AddRedisGrainDirectory(
        "redis-directory-1",
        options => options.ConfigurationOptions = redisConfiguration1)
    .AddRedisGrainDirectory(
        "redis-directory-2",
        options => options.ConfigurationOptions = redisConfiguration2)
    .AddAzureTableGrainDirectory(
        "azure-directory",
        options => options.ConnectionString = azureConnectionString);