Megosztás a következőn keresztül:


A Service Fabric-szolgáltatások elhelyezési szabályzatai

Az elhelyezési szabályzatok olyan további szabályok, amelyek bizonyos, kevésbé gyakori helyzetekben a szolgáltatáselhelyezés szabályozására használhatók. Néhány példa ezekre a forgatókönyvekre:

  • A Service Fabric-fürt földrajzi távolságokra terjed ki, például több helyszíni adatközpontra vagy Azure-régiókra
  • A környezet a geopolitikai vagy jogi ellenőrzés több területére terjed ki, vagy más olyan esetekre, amikor a szabályzatok határait kötelező kikényszeríteni
  • A nagy távolságok vagy a lassabb vagy kevésbé megbízható hálózati kapcsolatok használata miatt kommunikációs teljesítmény- vagy késési megfontolások merülnek fel
  • Bizonyos számítási feladatokat a legjobb munkaterhelésként kell csoportosítania, akár más számítási feladatokkal, akár az ügyfelek közelében
  • Egy partíció több állapot nélküli példányára van szükség egyetlen csomóponton

A követelmények többsége igazodik a fürt fizikai elrendezéséhez, amely a fürt tartalék tartományaként jelenik meg.

A speciális elhelyezési szabályzatok, amelyek segítenek az ilyen helyzetek megoldásában, a következők:

  1. Érvénytelen tartományok
  2. Kötelező tartományok
  3. Előnyben részesített tartományok
  4. Replika csomagolásának letiltása
  5. Több állapot nélküli példány engedélyezése a csomóponton

Az alábbi vezérlők többsége csomóponttulajdonságokkal és elhelyezési korlátozásokkal konfigurálható, de némelyik bonyolultabb. A dolgok egyszerűbbé tétele érdekében a Service Fabric-fürt Resource Managere ezeket a további elhelyezési szabályzatokat biztosítja. Az elhelyezési szabályzatok nevesített szolgáltatáspéldányonként vannak konfigurálva. Ezek dinamikusan is frissíthetők.

Érvénytelen tartományok megadása

Az InvalidDomain elhelyezési házirendje lehetővé teszi annak megadását, hogy egy adott tartalék tartomány érvénytelen-e egy adott szolgáltatáshoz. Ez a szabályzat biztosítja, hogy egy adott szolgáltatás soha ne fusson egy adott területen, például geopolitikai vagy vállalati politikai okokból. Több érvénytelen tartomány is megadható külön szabályzatokkal.

Érvénytelen tartomány példa

Kód:

ServicePlacementInvalidDomainPolicyDescription invalidDomain = new ServicePlacementInvalidDomainPolicyDescription();
invalidDomain.DomainName = "fd:/DCEast"; //regulations prohibit this workload here
serviceDescription.PlacementPolicies.Add(invalidDomain);

PowerShell:

New-ServiceFabricService -ApplicationName $applicationName -ServiceName $serviceName -ServiceTypeName $serviceTypeName –Stateful -MinReplicaSetSize 3 -TargetReplicaSetSize 3 -PartitionSchemeSingleton -PlacementPolicy @("InvalidDomain,fd:/DCEast”)

Kötelező tartományok megadása

A szükséges tartományelhelyezési szabályzat megköveteli, hogy a szolgáltatás csak a megadott tartományban legyen jelen. Több szükséges tartomány is megadható külön szabályzatokkal.

Kötelező tartomány példa

Kód:

ServicePlacementRequiredDomainPolicyDescription requiredDomain = new ServicePlacementRequiredDomainPolicyDescription();
requiredDomain.DomainName = "fd:/DC01/RK03/BL2";
serviceDescription.PlacementPolicies.Add(requiredDomain);

PowerShell:

New-ServiceFabricService -ApplicationName $applicationName -ServiceName $serviceName -ServiceTypeName $serviceTypeName –Stateful -MinReplicaSetSize 3 -TargetReplicaSetSize 3 -PartitionSchemeSingleton -PlacementPolicy @("RequiredDomain,fd:/DC01/RK03/BL2")

Előnyben részesített tartomány megadása egy állapotalapú szolgáltatás elsődleges replikáihoz

Az előnyben részesített elsődleges tartomány megadja azt a tartalék tartományt, amelybe az elsődlegeset be szeretné helyezni. Az elsődleges akkor kerül ebbe a tartományba, ha minden rendben van. Ha a tartomány vagy az elsődleges replika meghibásodik vagy leáll, az elsődleges egy másik helyre kerül, ideális esetben ugyanabban a tartományban. Ha ez az új hely nem az előnyben részesített tartományban található, a fürterőforrás-kezelő a lehető leghamarabb visszahelyezi az előnyben részesített tartományba. Ez a beállítás természetesen csak az állapotalapú szolgáltatásokra vonatkozik. Ez a szabályzat az Azure-régiókra vagy több adatközpontra kiterjedő fürtök esetében hasznos, de olyan szolgáltatásokkal rendelkezik, amelyek előnyben részesítik az elhelyezést egy adott helyen. Az előválasztások felhasználókhoz vagy más szolgáltatásokhoz való közel tartása kisebb késést biztosít, különösen az előválasztások által alapértelmezés szerint kezelt olvasások esetében.

Elsődleges elsődleges tartományok és feladatátvétel

ServicePlacementPreferPrimaryDomainPolicyDescription primaryDomain = new ServicePlacementPreferPrimaryDomainPolicyDescription();
primaryDomain.DomainName = "fd:/EastUS/";
serviceDescription.PlacementPolicies.Add(primaryDomain);

PowerShell:

New-ServiceFabricService -ApplicationName $applicationName -ServiceName $serviceName -ServiceTypeName $serviceTypeName –Stateful -MinReplicaSetSize 3 -TargetReplicaSetSize 3 -PartitionSchemeSingleton -PlacementPolicy @("PreferredPrimaryDomain,fd:/EastUS")

Replikaterjesztés megkövetelése és a csomagolás letiltása

A replikák általában a hibás és a frissítési tartományok között vannak elosztva, ha a fürt kifogástalan állapotban van. Vannak azonban olyan esetek, amikor egy adott partíció több replikája is ideiglenesen egyetlen tartományba kerül. Tegyük fel például, hogy a fürtnek kilenc csomópontja van három tartalék tartományban: fd:/0, fd:/1 és fd:/2. Tegyük fel azt is, hogy a szolgáltatás három replikával rendelkezik. Tegyük fel, hogy az fd:/1 és az fd:/2 replikákhoz használt csomópontok leálltak. A fürterőforrás-kezelő általában az ugyanazon tartalék tartományokban lévő más csomópontokat részesíti előnyben. Ebben az esetben tegyük fel, hogy kapacitásproblémák miatt ezen tartományok egyik csomópontja sem volt érvényes. Ha a Fürterőforrás-kezelő az ilyen replikák helyett újakat hoz létre, akkor az fd:/0 fájl csomópontjait kell választania. Ez azonban olyan helyzetet hoz létre, amelyben a tartalék tartományra vonatkozó korlátozás sérül. A csomagolási replikák növelik annak az esélyét, hogy a teljes replikakészlet leállhat vagy elveszhet.

Feljegyzés

A korlátozásokkal és a kényszerprioritásokkal kapcsolatos általános információkért tekintse meg ezt a témakört.

Ha valaha is látott egy állapotüzenetet, például "The Load Balancer has detected a Constraint Violation for this Replica:fabric:/<some service name> Secondary Partition <some partition ID> is violating the Constraint: FaultDomain", akkor elérte ezt a feltételt, vagy valami hasonlót. Általában csak egy vagy két replika van ideiglenesen összecsomagolva. Amíg egy adott tartományban kevesebb replika található, biztonságban van. A csomagolás ritka, de előfordulhat, és ezek a helyzetek általában átmenetiek, mivel a csomópontok visszatérnek. Ha a csomópontok leállnak, és a fürterőforrás-kezelőnek cserét kell létrehoznia, általában más csomópontok is elérhetők az ideális tartalék tartományokban.

Egyes számítási feladatok inkább mindig a replikák célszámával rendelkeznek, még akkor is, ha kevesebb tartományba vannak csomagolva. Ezek a számítási feladatok a teljes egyidejű állandó tartományhiba ellen fogadnak, és általában helyre tudják állítani a helyi állapotot. Más számítási feladatok inkább az állásidőt veszik igénybe, mint a kockázat helyességét vagy az adatok elvesztését. A legtöbb éles számítási feladat háromnál több replikával, háromnál több tartalék tartománnyal és hibatartományonként számos érvényes csomóponttal fut. Emiatt az alapértelmezett viselkedés alapértelmezés szerint lehetővé teszi a tartomány csomagolását. Az alapértelmezett viselkedés lehetővé teszi a normál kiegyensúlyozást és a feladatátvételt ezeknek a szélsőséges eseteknek a kezelésére, még akkor is, ha ez ideiglenes tartománycsomagolást jelent.

Ha le szeretné tiltani az ilyen csomagolást egy adott számítási feladathoz, megadhatja a RequireDomainDistribution szolgáltatás szabályzatát. Ha ez a házirend be van állítva, a Fürterőforrás-kezelő biztosítja, hogy ugyanazon partícióból ne fusson két replika ugyanabban a hiba- vagy frissítési tartományban.

Kód:

ServicePlacementRequireDomainDistributionPolicyDescription distributeDomain = new ServicePlacementRequireDomainDistributionPolicyDescription();
serviceDescription.PlacementPolicies.Add(distributeDomain);

PowerShell:

New-ServiceFabricService -ApplicationName $applicationName -ServiceName $serviceName -ServiceTypeName $serviceTypeName –Stateful -MinReplicaSetSize 3 -TargetReplicaSetSize 3 -PartitionSchemeSingleton -PlacementPolicy @("RequiredDomainDistribution")

Használhatja ezeket a konfigurációkat olyan fürtök szolgáltatásaihoz, amelyek nem földrajzilag vannak lefedve? Megtehetnéd, de nincs is valami jó okod. A szükséges, érvénytelen és előnyben részesített tartománykonfigurációkat kerülni kell, kivéve, ha a forgatókönyvek megkövetelik őket. Nincs értelme arra kényszeríteni egy adott számítási feladatot, hogy egyetlen állványon fusson, vagy a helyi fürt bizonyos szegmenseit részesítse előnyben egy másiknál. A különböző hardverkonfigurációkat el kell osztani a tartalék tartományok között, és normál elhelyezési korlátozások és csomóponttulajdonságok segítségével kell kezelni.

Partíció több állapot nélküli példányának elhelyezése egyetlen csomóponton

Az AllowMultipleStatelessInstancesOnNode elhelyezési házirendje lehetővé teszi egy partíció több állapot nélküli példányának elhelyezését egyetlen csomóponton. Alapértelmezés szerint egyetlen partíció több példánya nem helyezhető el csomóponton. Még -1 szolgáltatás esetén sem lehet skálázni a példányok számát a fürt csomópontjainak számán túl egy adott elnevezett szolgáltatás esetében. Ez az elhelyezési szabályzat eltávolítja ezt a korlátozást, és lehetővé teszi az InstanceCount megadását a csomópontok számánál magasabb értéken.

Ha valaha is látott egy állapotüzenetet, például "The Load Balancer has detected a Constraint Violation for this Replica:fabric:/<some service name> Secondary Partition <some partition ID> is violating the Constraint: ReplicaExclusion", akkor elérte ezt a feltételt, vagy valami hasonlót.

Ha engedélyezni szeretné ezt az elhelyezési szabályzatot a szolgáltatásban, engedélyezze a következő konfigurációkat:

<Section Name="Common">
  <Parameter Name="AllowCreateUpdateMultiInstancePerNodeServices" Value="True" />
  <Parameter Name="HostReuseModeForExclusiveStateless" Value="1" />
</Section>

A szolgáltatás házirendjének megadásával az AllowMultipleStatelessInstancesOnNode InstanceCount a fürt csomópontjainak számán túl is beállítható.

Kód:

ServicePlacementAllowMultipleStatelessInstancesOnNodePolicyDescription allowMultipleInstances = new ServicePlacementAllowMultipleStatelessInstancesOnNodePolicyDescription();
serviceDescription.PlacementPolicies.Add(allowMultipleInstances);

PowerShell:

New-ServiceFabricService -ApplicationName $applicationName -ServiceName $serviceName -ServiceTypeName $serviceTypeName -Stateless –PartitionSchemeSingleton –PlacementPolicy @(“AllowMultipleStatelessInstancesOnNode”) -InstanceCount 10 -ServicePackageActivationMode ExclusiveProcess 

Feljegyzés

A szabályzat jelenleg csak az ExclusiveProcess szolgáltatáscsomag aktiválási móddal rendelkező állapot nélküli szolgáltatások esetében támogatott.

Figyelmeztetés

A szabályzat nem támogatott statikus portvégpontokkal való használat esetén. Ha mindkettőt együtt használja, az nem megfelelő fürthöz vezethet, mivel ugyanazon a csomóponton több példány is ugyanahhoz a porthoz próbál csatlakozni, és nem jön létre.

Feljegyzés

Ha magas minInstanceCount értéket használ ezzel az elhelyezési szabályzattal, az elakadt alkalmazásfrissítésekhez vezethet. Ha például ötcsomópontos fürttel rendelkezik, és beállítja az InstanceCount=10 értéket, minden csomóponton két példány lesz. Ha beállítja a MinInstanceCount=9 értéket, a megkísérelt alkalmazásfrissítés elakadhat; a MinInstanceCount=8 használatával ez elkerülhető.

Következő lépések