Overzicht van heterogene silo's
Op een bepaald cluster kunnen silo's een andere set graantypen ondersteunen:
In dit voorbeeld ondersteunt het cluster korrels van het typeA
, B
, C
, , D
: E
- Graansoorten
A
enB
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 interfaces van alle graantypen van het cluster, maar korrelklassen 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 dat silo's en clients controleren op wijzigingen in typen die worden ondersteund met de TypeManagementOptions.TypeMapRefreshInterval eigenschap.
Voor testdoeleinden kunt u de eigenschap GrainClassOptions.ExcludedGrainTypesgebruiken. Dit is een lijst met namen van de typen die u wilt uitsluiten voor de silo's.
Beperkingen
- Verbinding maken ed clients worden niet op de hoogte gesteld als de set ondersteunde graantypen is gewijzigd. In het vorige voorbeeld:
- Als Silo 4 het cluster verlaat, probeert de client nog steeds het type
E
aan te roepen. Het mislukt tijdens runtime met een OrleansException. - Als de client is verbonden met het cluster voordat Silo 4 eraan is toegevoegd, kan de client geen aanroepen naar het korreltje van het type
E
maken. Het zal mislukken met een ArgumentException.
- Als Silo 4 het cluster verlaat, probeert de client nog steeds het type
- Staatloze korrels worden niet ondersteund: alle silo's in het cluster moeten dezelfde set staatloze korrels ondersteunen.
- ImplicitStreamSubscriptionAttribute worden niet ondersteund en daarom kunnen alleen expliciete abonnementen worden gebruikt in Orleans Streams.