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:
- Implementacja tabel platformy Azure: Microsoft.Orleans. GrainDirectory.AzureStorage
- Implementacja magazynu Redis: Microsoft.Orleans. GrainDirectory.Redis
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);