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 forgatókönyvekben 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 is kiterjed, vagy más olyan esetekre, amikor szabályzathatárokat kell kikényszerítenie
  • A nagy távolságok, illetve a lassabb vagy kevésbé megbízható hálózati kapcsolatok használata miatt kommunikációs teljesítménnyel vagy késéssel kapcsolatos megfontolások merülnek fel
  • Bizonyos számítási feladatokat a legjobb erőfeszítésként kell elosztani, 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 megfelel a fürt fizikai elrendezésének, amely a fürt tartalék tartományaként jelenik meg.

A speciális elhelyezési szabályzatok, amelyek segítenek ezeknek a forgatókönyveknek a 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 konfigurálható csomóponttulajdonságokkal és elhelyezési korlátozásokkal, de ezek némelyike bonyolultabb. A dolgok egyszerűbbé tétele érdekében a Service Fabric-fürt Resource Manager biztosítja ezeket a további elhelyezési szabályzatokat. 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 szabályzattal megadhatja, 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 szabályzati 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 kötelező tartomány is megadható külön szabályzatokkal.

Példa kötelező tartományra

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 elsődleges elsődleges elsődleges tartomány határozza meg azt a tartalék tartományt, amelybe az elsődlegest helyezni szeretné. 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 van, a fürt Resource Manager a lehető leghamarabb visszahelyezi az előnyben részesített tartományba. Ez a beállítás természetesen csak állapotalapú szolgáltatások esetén értelmezhető. 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. Ha a főemlősöket a felhasználókhoz vagy más szolgáltatásokhoz közel tartja, azzal kisebb késést biztosít, különösen az olyan olvasások esetében, amelyeket alapértelmezés szerint az előválasztások kezelnek.

Elsődleges elsődleges tartományok és feladatátvétel előnyben részesített tartományai

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 oszlanak meg, ha a fürt állapota megfelelő. Vannak azonban olyan esetek, amikor egy adott partíció több replikája átmenetileg egyetlen tartományba kerülhet. Tegyük fel például, hogy a fürt kilenc csomóponttal rendelkezik 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ürt Resource Manager általában az ugyanazon tartalék tartományokban lévő más csomópontokat részesítik előnyben. Ebben az esetben tegyük fel, hogy kapacitásproblémák miatt a tartomány többi csomópontja sem volt érvényes. Ha a fürt Resource Manager a replikák helyett újakat hoz létre, akkor csomópontokat kell választania az fd:/0 fájlban. Ezzel azonban olyan helyzetet teremt, amelyben a tartalék tartományra vonatkozó korlátozást megsértik. A csomagolási replikák növelik annak esélyét, hogy a teljes replikakészlet leállhat vagy elveszhet.

Megjegyzé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 csomagolva. Amíg egy adott tartomány replikáinak kvóruma kevesebb, 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 nem állnak le, és a fürt Resource Manager ki kell építenie a cserét, általában más csomópontok is elérhetők az ideális tartalék tartományokban.

Egyes számítási feladatok mindig a replikák célszámát részesítik előnyben, még akkor is, ha kevesebb tartományba vannak csomagolva. Ezek a számítási feladatok az összes 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 tartalék tartományonként számos érvényes csomóponttal fut. Emiatt az alapértelmezett viselkedés alapértelmezés szerint lehetővé teszi a tartományok csomagolását. Az alapértelmezett viselkedés lehetővé teszi, hogy a normál kiegyensúlyozás és feladatátvétel kezelje ezeket a szélsőséges eseteket, 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 szabályzatot RequireDomainDistribution a szolgáltatásban. Ha ez a szabályzat be van állítva, a Fürt Resource Manager biztosítja, hogy az egyazon partícióból származó két replika ne fusson ugyanabban a tartalék 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")

Most már használhatja ezeket a konfigurációkat olyan fürtön lévő szolgáltatásokhoz, amelyek földrajzilag nem terjedtek ki? Megtehetnéd, de ennek nincs is nagy oka. A szükséges, érvénytelen és előnyben részesített tartománykonfigurációkat el kell kerülni, 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ásikkal szemben. A különböző hardverkonfigurációkat el kell osztani a tartalék tartományok között, és normál elhelyezési kényszerekkel és csomóponttulajdonságokkal kell kezelni.

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

Az AllowMultipleStatelessInstancesOnNode elhelyezési szabályzata 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 skálázható a példányok száma a fürtben lévő csomópontok 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, hogy az InstanceCount értéke magasabb legyen, mint a csomópontok száma.

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áson, 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 szabályzatának megadásával az AllowMultipleStatelessInstancesOnNode InstanceCount a fürtben lévő csomópontok 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 

Megjegyzés

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

Figyelmeztetés

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

Megjegyzé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 öt csomópontos fürttel rendelkezik, és az InstanceCount=10 értéket állítja be, mindegyik csomóponton két példány lesz. Ha a MinInstanceCount=9 értéket állítja be, egy alkalmazásfrissítési kísérlet elakadhat; A MinInstanceCount=8 használatával ez elkerülhető.

Következő lépések