Delen via


Overzicht van heterogene silo's

Op een bepaald cluster kunnen silo's verschillende sets graantypen ondersteunen:

Overzichtsdiagram heterogene silo's.

In dit voorbeeld ondersteunt het cluster korrels van het typeA, B, C, en DE:

  • Graansoorten A en B kunnen op Silo 1 en 2 worden geplaatst.
  • Het graantype C kan op Silo 1, 2 of 3 worden geplaatst.
  • Graantype D kan alleen op Silo 3 worden geplaatst.
  • Graantype E kan alleen op Silo 4 worden geplaatst.

Alle silo's moeten verwijzen naar de interfaces van alle graantypen in het cluster, maar graanklassen mogen alleen worden verwezen door de silo's die deze hosten. De client weet niet welke silo een bepaald graantype ondersteunt.

Belangrijk

Een bepaalde korreltype-implementatie moet hetzelfde zijn voor elke silo die deze ondersteunt.

Het volgende scenario is niet geldig:

Op Silo 1 en 2:

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

Op Silo 3:

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

Configuratie

Er is geen configuratie nodig; u kunt verschillende binaire bestanden implementeren op elke silo in uw cluster. Indien nodig kunt u echter het interval wijzigen waarmee silo's en clients controleren op wijzigingen in ondersteunde typen met behulp van de TypeManagementOptions.TypeMapRefreshInterval eigenschap.

Voor testdoeleinden kunt u de GrainClassOptions.ExcludedGrainTypes eigenschap gebruiken. Dit is een lijst met namen van de typen die u wilt uitsluiten voor specifieke silo's.

Beperkingen

  • Verbonden clients worden niet op de hoogte gesteld als de set ondersteunde graantypen wordt gewijzigd. In het vorige voorbeeld:
    • Als Silo 4 het cluster verlaat, probeert de client nog steeds aanroepen te doen naar korrels van het type E. Het mislukt tijdens runtime met een OrleansException.
    • Als de client die is verbonden met het cluster voordat Silo 4 is samengevoegd, kan de client geen aanroepen doen naar korrels van het type E. Het mislukt met een ArgumentException.
  • Staatloze korrels worden niet ondersteund in heterogene implementaties: alle silo's in het cluster moeten dezelfde set staatloze korrels ondersteunen.
  • ImplicitStreamSubscriptionAttribute wordt niet ondersteund; U kunt dus alleen expliciete abonnementen gebruiken in Orleans Streams met heterogene silo's.