Udostępnij za pośrednictwem


Orleans katalog grain

Ziarna mają stabilne tożsamości logiczne i mogą zostać aktywowane (utworzone wystąpienie) i dezaktywowane wiele razy w ciągu życia aplikacji, ale w dowolnym momencie istnieje co najwyżej jedna aktywacja ziarna. Za każdym razem, gdy ziarno zostanie aktywowane, może zostać umieszczone w innym silosie w klastrze. Gdy ziarno zostanie aktywowane w klastrze, zostanie zarejestrowane w rejestrze globalnym, katalogu ziarna. Dzięki temu kolejne wywołania tego ziarna zostaną dostarczone do tej aktywacji ziarna i że żadne inne aktywacje (wystąpienia) tego ziarna nie zostaną utworzone. Katalog ziarna jest odpowiedzialny za utrzymywanie mapowania między tożsamością ziarna i gdzie (który silos) jego bieżąca aktywacja jest w.

Domyślnie Orleans używa wbudowanego katalogu rozproszonego w pamięci. Ten katalog jest ostatecznie spójny i podzielony na partycje we wszystkich silosach w klastrze w postaci tabeli skrótów rozproszonych.

Począwszy od wersji 3.2.0, Orleans obsługuje również podłączane implementacje katalogu ziarna.

W wersji 3.2.0 znajdują się dwie takie wtyczki:

Możesz skonfigurować implementację katalogu ziarna do użycia na podstawie typu ziarna, a nawet wprowadzić implementację.

Którego katalogu ziarna należy użyć?

Zalecamy zawsze rozpoczynanie od domyślnego (wbudowanego katalogu rozproszonego w pamięci). Mimo że jest ona ostatecznie spójna i umożliwia okazjonalną aktywację zduplikowaną, gdy klaster jest niestabilny, wbudowany katalog jest wystarczający bez zależności zewnętrznych, nie wymaga żadnej konfiguracji i jest używany w środowisku produkcyjnym przez cały czas.

Jeśli masz doświadczenie z katalogiem Orleans ziarna i masz przypadek użycia z silniejszą gwarancją aktywacji pojedynczej i/lub chcesz zminimalizować liczbę ziarna, które są dezaktywowane po zamknięciu silosu w klastrze, rozważ użycie implementacji katalogu ziarna opartej na magazynie, takiej jak implementacja bazy danych Redis. Najpierw spróbuj użyć go dla jednego lub kilku typów ziarna, począwszy od tych, które są długotrwałe i mają znaczną ilość stanu lub kosztowny proces inicjowania.

Konfigurowanie

Domyślnie nie musisz nic robić; katalog ziarna w pamięci zostanie automatycznie użyty i podzielony na partycje w klastrze. Jeśli chcesz użyć konfiguracji katalogu ziarna innego niż domyślna, musisz określić nazwę wtyczki katalogów do użycia. Można to zrobić za pomocą atrybutu klasy ziarna i iniekcji zależności i wtyczki katalogu o tej nazwie podczas konfiguracji silosu.

Konfiguracja ziarna

Określanie nazwy wtyczki katalogu ziarna za pomocą polecenia GrainDirectoryAttribute:

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

Konfiguracja silosu

W tym miejscu skonfigurujemy implementację katalogu ziarna usługi Redis:

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

Katalog ziarna platformy Azure jest skonfigurowany w następujący sposób:

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

Dla różnych klas ziarna można skonfigurować wiele katalogów o różnych nazwach:

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