Omówienie heterogenicznych silosów

W danym klastrze silosy mogą obsługiwać inny zestaw typów ziarna:

Heterogeneous silos overview diagram.

W tym przykładzie klaster obsługuje ziarna typu A, , BC, D, E:

  • Typy A ziarna i B można umieścić na Silo 1 i 2.
  • Typ C ziarna można umieścić na silosie 1, 2 lub 3.
  • Typ D ziarna można umieścić tylko na silosie 3
  • Typ E ziarna można umieścić tylko na silosie 4.

Wszystkie silosy powinny odwoływać się do interfejsów wszystkich typów ziarna klastra, ale klasy ziarna powinny być przywołyne tylko przez silosy, które będą je hostować. Klient nie wie, który silos obsługuje dany typ ziarna.

Ważne

Dana implementacja typu ziarna musi być taka sama w każdym silosie, który go obsługuje.

Następujący scenariusz jest nieprawidłowy:

Na silosie 1 i 2:

public class C: Grain, IMyGrainInterface
{
   public Task SomeMethod() { /* ... */ }
}

Na silosie 3:

public class C: Grain, IMyGrainInterface, IMyOtherGrainInterface
{
   public Task SomeMethod() { /* ... */ }
   public Task SomeOtherMethod() { /* ... */ }
}

Konfigurowanie

Nie jest wymagana żadna konfiguracja. Można wdrożyć różne pliki binarne na każdym silosie w klastrze. Jednak w razie potrzeby można zmienić interwał, który silosy i klienci sprawdzają zmiany w typach obsługiwanych za pomocą TypeManagementOptions.TypeMapRefreshInterval właściwości .

W celach testowych można użyć właściwości GrainClassOptions.ExcludedGrainTypes, która jest listą nazw typów, które mają zostać wykluczone w silosach.

Ograniczenia

  • Połączenie klienci nie będą powiadamiani, jeśli zestaw obsługiwanych typów ziarna uległ zmianie. W poprzednim przykładzie:
    • Jeśli silos 4 opuści klaster, klient nadal będzie próbował wykonać wywołania do ziarna typu E. Zakończy się to niepowodzeniem w czasie wykonywania z elementem OrleansException.
    • Jeśli klient był połączony z klastrem przed dołączeniem do niego silo 4, klient nie będzie mógł wykonywać wywołań do ziarna typu E. Niepowodzenie zakończy się niepowodzeniem z elementem ArgumentException.
  • Ziarna bezstanowe nie są obsługiwane: wszystkie silosy w klastrze muszą obsługiwać ten sam zestaw bezstanowych ziarna.
  • ImplicitStreamSubscriptionAttributenie są obsługiwane i w związku z tym tylko jawne subskrypcje mogą być używane w Orleans Strumienie.