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


Azure Service Fabric üzemeltetési modell

Ez a cikk áttekintést nyújt az Azure Service Fabric által biztosított alkalmazás-üzemeltetési modellekről, és ismerteti a megosztott folyamat és a kizárólagos folyamat modelljei közötti különbségeket. Leírja, hogyan néz ki egy üzembe helyezett alkalmazás a Service Fabric-csomóponton, valamint a szolgáltatás replikái (vagy példányai) és a szolgáltatás-gazdagép folyamat közötti kapcsolatot.

Mielőtt továbbhalad, győződjön meg arról, hogy tisztában van a Service Fabric alkalmazásmodelljében ismertetett különböző fogalmakkal és kapcsolatokkal.

Feljegyzés

Ebben a cikkben, kivéve, ha explicit módon megemlítik, hogy valami mást jelent:

  • A replika egy állapotalapú szolgáltatás replikájára és egy állapot nélküli szolgáltatáspéldányra is vonatkozik.
  • A CodePackage a ServiceType-t regisztráló ServiceHost-folyamattal egyenértékűnek minősül, és az adott ServiceType szolgáltatásainak replikáit üzemelteti.

Az üzemeltetési modell megértéséhez tekintsünk át egy példát. Tegyük fel, hogy rendelkezünk egy "MyAppType" ApplicationType típussal, amely rendelkezik "MyServiceType" ServiceType-tal . A "MyServiceType" szolgáltatást a ServicePackage 'MyServicePackage' biztosítja, amely rendelkezik egy CodePackage "MyCodePackage" csomaggal. A "MyCodePackage" regisztrálja a ServiceType "MyServiceType" tulajdonságot a futtatáskor.

Tegyük fel, hogy van egy háromcsomópontos fürtünk, és létrehozunk egy "MyAppType" típusú alkalmazáshálót/App1-et. Ebben az alkalmazáshálóban :/App1, létrehozunk egy "MyServiceType" típusú service fabricet:/App1/ServiceA . Ez a szolgáltatás két partícióval (például P1 és P2) és partíciónként három replikával rendelkezik. Az alábbi ábrán látható az alkalmazás nézete, mivel az üzembe helyezése egy csomóponton fejeződik be.

A csomóponton üzembe helyezett alkalmazás nézetét ábrázoló diagram.

A Service Fabric aktiválta a "MyServicePackage"-t, amely elindította a "MyCodePackage" szolgáltatást, amely mindkét partíció replikáit üzemelteti. A fürt összes csomópontjának ugyanaz a nézete, mivel a partíciónkénti replikák száma megegyezik a fürt csomópontjainak számával. Hozzunk létre egy másik szolgáltatást( fabric:/App1/ServiceB) az alkalmazáshálóban :/App1. Ez a szolgáltatás partíciónként egy partícióval (például P3) és három replikával rendelkezik. Az alábbi ábrán a csomópont új nézete látható:

A csomópont új nézetét bemutató diagram.

A Service Fabric a Service Fabric P3 partíciójának új replikáját helyezte el:/App1/ServiceB a MyServicePackage meglévő aktiválásában. Most. Hozzunk létre egy másik alkalmazáshálót :/App2 típusú "MyAppType". Belső háló:/App2, hozzon létre egy service fabricet:/App2/ServiceA. Ez a szolgáltatás partíciónként két partícióval (P4 és P5) és három replikával rendelkezik. Az alábbi diagram az új csomópontnézetet mutatja be:

Az új csomópontnézetet bemutató diagram.

A Service Fabric aktiválja a MyServicePackage új példányát, amely elindítja a "MyCodePackage" új példányát. A Service Fabric mindkét partíciójának replikái:/App2/ServiceA (P4 és P5) az új "MyCodePackage" példányba kerül.

Megosztott folyamat modellje

Az előző szakasz a Service Fabric által biztosított alapértelmezett üzemeltetési modellt ismerteti, amelyet megosztott folyamat modellnek nevezünk. Ebben a modellben egy adott alkalmazás esetében egy adott ServicePackage csak egy példánya aktiválódik egy csomóponton (amely elindítja az abban található összes CodePackage-t ). Egy adott ServiceType összes szolgáltatásának összes replikája a ServiceType-t regisztráló CodePackage-ben lesz elhelyezve. Más szóval az adott ServiceType csomópontján található összes szolgáltatás replikája ugyanazzal a folyamattal rendelkezik.

Exkluzív folyamatmodell

A Service Fabric által biztosított másik üzemeltetési modell az exkluzív folyamatmodell. Ebben a modellben egy adott csomóponton minden replika a saját dedikált folyamatában él. A Service Fabric aktiválja a ServicePackage új példányát (amely elindítja a benne található összes CodePackage-t ). A replikák abban a CodePackage-ben vannak elhelyezve, amely regisztrálta annak a szolgáltatásnak a ServiceType-ját , amelyhez a replika tartozik.

Ha a Service Fabric 5.6-os vagy újabb verzióját használja, a szolgáltatás létrehozásakor (a PowerShell, a REST vagy a FabricClient használatával) kiválaszthatja a kizárólagos folyamatmodellt. Adja meg a ServicePackageActivationMode értéket "ExclusiveProcess" néven.

PS C:\>New-ServiceFabricService -ApplicationName "fabric:/App1" -ServiceName "fabric:/App1/ServiceA" -ServiceTypeName "MyServiceType" -Stateless -PartitionSchemeSingleton -InstanceCount -1 -ServicePackageActivationMode "ExclusiveProcess"
var serviceDescription = new StatelessServiceDescription
{
    ApplicationName = new Uri("fabric:/App1"),
    ServiceName = new Uri("fabric:/App1/ServiceA"),
    ServiceTypeName = "MyServiceType",
    PartitionSchemeDescription = new SingletonPartitionSchemeDescription(),
    InstanceCount = -1,
    ServicePackageActivationMode = ServicePackageActivationMode.ExclusiveProcess
};

var fabricClient = new FabricClient(clusterEndpoints);
await fabricClient.ServiceManager.CreateServiceAsync(serviceDescription);

Ha az alkalmazásjegyzékben van egy alapértelmezett szolgáltatás, a ServicePackageActivationMode attribútum megadásával kiválaszthatja a kizárólagos folyamatmodellt :

<DefaultServices>
  <Service Name="MyService" ServicePackageActivationMode="ExclusiveProcess">
    <StatelessService ServiceTypeName="MyServiceType" InstanceCount="1">
      <SingletonPartition/>
    </StatelessService>
  </Service>
</DefaultServices>

Most hozzunk létre egy másik szolgáltatást, a fabric:/App1/ServiceC szolgáltatást az Application Fabricben:/App1. Ez a szolgáltatás két partícióval (például P6 és P7) és partíciónként három replikával rendelkezik. A ServicePackageActivationMode értéket "ExclusiveProcess" értékre állítja. Az alábbi ábrán a csomópont új nézete látható:

Az üzembe helyezett alkalmazás csomópontnézetének diagramja

Mint látható, a Service Fabric két új példányt aktivált a "MyServicePackage" szolgáltatásból (egyet a P6 és a P7 partíció minden replikájához). A Service Fabric minden replikát a CodePackage dedikált példányába helyezett. Az exkluzív folyamatmodell használatakor egy adott alkalmazáshoz egy adott ServicePackage több példánya is aktív lehet egy csomóponton. Az előző példában a MyServicePackage három példánya aktív a hálóhoz :/App1. A MyServicePackage ezen aktív példányaihoz tartozik egy ServicePackageActivationId . Ez az azonosító azonosítja a másolást az Application Fabricben:/App1.

Ha csak a Megosztott folyamat modellt használja egy alkalmazáshoz, a ServicePackage csak egy aktív példánya van egy csomóponton. A ServicePackage aktiválásához tartozó ServicePackageActivationId egy üres sztring. Ilyen például a háló:/App2.

Feljegyzés

  • A megosztott folyamat üzemeltetési modellje a ServicePackageActivationMode és a SharedProcess értéknek felel meg. Ez az alapértelmezett üzemeltetési modell, és a ServicePackageActivationMode-t nem kell megadni a szolgáltatás létrehozásakor.

  • Az exkluzív folyamat üzemeltetési modellje a ServicePackageActivationMode és az ExclusiveProcess értéknek felel meg. A beállítás használatához explicit módon kell megadnia a szolgáltatás létrehozásakor.

  • Egy szolgáltatás üzemeltetési modelljének megtekintéséhez kérdezze le a szolgáltatás leírását, és tekintse meg a ServicePackageActivationMode értékét.

Üzembe helyezett szolgáltatáscsomaggal végzett munka

A ServicePackage egy csomóponton való aktív másolatát üzembe helyezett szolgáltatáscsomagnak nevezzük. Amikor az exkluzív folyamatmodellt használja szolgáltatások létrehozásához, egy adott alkalmazáshoz több üzembe helyezett szolgáltatáscsomag is lehet ugyanahhoz a ServicePackage-hez. Ha egy üzembe helyezett szolgáltatáscsomagra vonatkozó műveleteket hajt végre, meg kell adnia a ServicePackageActivationId azonosítót egy adott üzembe helyezett szolgáltatáscsomag azonosításához. Adja meg például az azonosítót, ha egy üzembe helyezett szolgáltatáscsomag állapotát jelenti, vagy újraindítja egy üzembe helyezett szolgáltatáscsomag kódcsomagját.

Az üzembe helyezett szolgáltatáscsomagok ServicePackageActivationId azonosítóját a csomóponton üzembe helyezett szolgáltatáscsomagok listájának lekérdezésével derítheti fel. Amikor egy csomóponton az üzembe helyezett szolgáltatástípusokra, az üzembe helyezett replikákra és az üzembe helyezett kódcsomagokra kérdez le, a lekérdezés eredménye a szülő üzembe helyezett szolgáltatáscsomag ServicePackageActivationId azonosítóját is tartalmazza.

Feljegyzés

  • A megosztott folyamat üzemeltetési modellje alatt, egy adott csomóponton, egy adott alkalmazás esetében a ServicePackage csak egy példánya aktiválódik. Egy üres sztringgel egyenlő ServicePackageActivationId azonosítóval rendelkezik, és nem szükséges megadni az üzembe helyezett szolgáltatáscsomaghoz kapcsolódó műveletek végrehajtása során.

  • Az Exkluzív folyamat üzemeltetési modellben egy adott csomóponton egy adott alkalmazás esetében a ServicePackage egy vagy több példánya lehet aktív. Minden aktiválás rendelkezik egy nem üres ServicePackageActivationId azonosítóval, amely az üzembe helyezett szolgáltatáscsomaghoz kapcsolódó műveletek végrehajtása során van megadva.

  • Ha a ServicePackageActivationId nincs megadva, alapértelmezés szerint üres sztring lesz. Ha a megosztott folyamat modellben aktivált üzembe helyezett szolgáltatáscsomag jelen van, a művelet rajta lesz végrehajtva. Ellenkező esetben a művelet sikertelen lesz.

  • Ne kérdezd le egyszer, és gyorsítótárazd a ServicePackageActivationId azonosítót. Az azonosító dinamikusan jön létre, és különböző okokból változhat. A ServicePackageActivationId azonosítót igénylő művelet végrehajtása előtt először le kell kérdeznie a csomóponton üzembe helyezett szolgáltatáscsomagok listáját. Ezután használja a lekérdezés eredményéből származó ServicePackageActivationId azonosítót az eredeti művelet végrehajtásához.

Vendég végrehajtható és tárolóalkalmazások

A Service Fabric állapot nélküli szolgáltatásként kezeli a vendég végrehajtható és tárolóalkalmazásokat , amelyek önállóak. A ServiceHostban (folyamat vagy tároló) nincs Service Fabric-futtatókörnyezet. Mivel ezek a szolgáltatások önállóak, a ServiceHostonkénti replikák száma nem alkalmazható ezekre a szolgáltatásokra. A szolgáltatásokkal leggyakrabban használt konfiguráció az egypartíció, az InstanceCount értéke -1 (a fürt minden csomópontján futó szolgáltatáskód egy példánya).

Ezekhez a szolgáltatásokhoz az alapértelmezett ServicePackageActivationMode a SharedProcess, amely esetben a Service Fabric csak a ServicePackage egy példányát aktiválja egy csomóponton egy adott alkalmazáshoz. Ez azt jelenti, hogy a szolgáltatáskódnak csak egy példánya fog csomópontot futtatni. Ha azt szeretné, hogy a szolgáltatáskód több példánya fusson egy csomóponton, a szolgáltatás létrehozásakor adja meg a ServicePackageActivationMode értéket ExclusiveProcessként. Ezt például akkor teheti meg, ha a ServiceType több szolgáltatását (Service1 to ServiceN) hozza létre (a ServiceManifestben van megadva), vagy ha a szolgáltatás többparticionált.

Meglévő szolgáltatás üzemeltetési modelljének módosítása

Jelenleg nem módosíthatja egy meglévő szolgáltatás üzemeltetési modelljét a megosztott folyamatról a kizárólagos folyamatra (vagy fordítva).

Válasszon az üzemeltetési modellek közül

Ki kell értékelnie, hogy melyik üzemeltetési modell felel meg a legjobban a követelményeknek. A megosztott folyamat modell jobban használja az operációsrendszer-erőforrásokat, mivel kevesebb folyamat születik, és több replika is megoszthat portokat ugyanabban a folyamatban. Ha azonban az egyik replika hibát jelez, amikor le kell állítania a szolgáltatás gazdagépét, az hatással van az összes többi replikára ugyanabban a folyamatban.

Az Exkluzív folyamat modell jobb elkülönítést biztosít, és minden replika a saját folyamatában van. Ha az egyik replika hibával rendelkezik, az nem érinti a többi replikát. Ez a modell olyan esetekben hasznos, amikor a kommunikációs protokoll nem támogatja a portmegosztást. Lehetővé teszi az erőforrás-szabályozás replikaszinten történő alkalmazását. A kizárólagos folyamat azonban több operációsrendszer-erőforrást használ fel, mivel egy folyamatot hoz létre a csomópont minden replikájához.

Kizárólagos folyamatmodell- és alkalmazásmodell-szempontok

A legtöbb alkalmazás esetében úgy modellezheti az alkalmazást a Service Fabricben, hogy ServicePackage-enként egy ServiceType-ot tárol.

Bizonyos esetekben a Service Fabric szolgáltatásonként több ServiceType-ot is engedélyez (és egy CodePackage több ServiceType-t is regisztrálhat). Az alábbiakban néhány olyan forgatókönyvet talál, amelyekben ezek a konfigurációk hasznosak lehetnek:

  • Az erőforrás-kihasználtságot úgy szeretné optimalizálni, hogy kevesebb folyamatot hoz létre, és folyamatonként nagyobb replikasűrűséget használ.
  • A különböző ServiceType-okból származó replikáknak meg kell osztaniuk néhány gyakori adatot, amelyek magas inicializálási vagy memóriaköltséggel járnak.
  • Ingyenes szolgáltatásajánlattal rendelkezik, és korlátozni szeretné az erőforrás-kihasználtságot úgy, hogy a szolgáltatás összes replikáját ugyanabba a folyamatba helyezi.

Az exkluzív folyamatüzemeltetési modell nem koherens olyan alkalmazásmodellekkel, amelyek ServicePackage-enként több ServiceTypes-et használnak. Ennek az az oka, hogy a ServicePackage-enként több ServiceTypes úgy van kialakítva, hogy nagyobb erőforrás-megosztást érjen el a replikák között, és nagyobb replikasűrűséget tesz lehetővé folyamatonként. Az exkluzív folyamatmodellt úgy tervezték, hogy különböző eredményeket érjen el.

Fontolja meg a ServicePackage-enként több ServiceTypes esetét, és az egyes ServiceType-okat egy másik CodePackage regisztrálja. Tegyük fel, hogy van egy ServicePackage "MultiTypeServicePackage", amely két CodePackages:

  • "MyCodePackageA", amely a ServiceType "MyServiceTypeA" szolgáltatást regisztrálja.
  • "MyCodePackageB", amely regisztrálja a ServiceType "MyServiceTypeB"-t.

Tegyük fel, hogy létrehozunk egy alkalmazást, a hálót:/SpecialApp. Inside fabric:/SpecialApp, a következő két szolgáltatást hozunk létre az exkluzív folyamatmodellel:

  • Service fabric:/SpecialApp/ServiceA típusú "MyServiceTypeA", két partícióval (például P1 és P2) és partíciónként három replikával.
  • Service fabric:/SpecialApp/ServiceB típusú "MyServiceTypeB", két partícióval (P3 és P4) és partíciónként három replikával.

Egy adott csomóponton mindkét szolgáltatás két replikával rendelkezik. Mivel a szolgáltatások létrehozásához kizárólagos folyamatmodellt használtunk, a Service Fabric minden replikához aktiválja a MyServicePackage új példányát. A MultiTypeServicePackage minden aktiválása elindítja a MyCodePackageA és a MyCodePackageB másolatát. A "MultiTypeServicePackage" replikát azonban csak a "MyCodePackageA" vagy a "MyCodePackageB" üzemelteti. Az alábbi ábrán a csomópont nézet látható:

A csomópontnézetet bemutató diagram.

A Service Fabric P1 partíciójának replikájához tartozó "MultiTypeServicePackage" aktiválása során a "MyCodePackageA" üzemelteti a replikát. A "MyCodePackageB" fut. Hasonlóképpen, a Service Fabric P3 partíciójának replikájához tartozó "MultiTypeServicePackage" aktiválása során a "MyCodePackageB" üzemelteti a replikát. A "MyCodePackageA" fut. Ezért minél nagyobb a CodePackages (különböző ServiceType-ok regisztrálása) száma ServicePackage-enként, annál nagyobb a redundáns erőforrás-használat.

Ha azonban létrehozzuk a services fabric:/SpecialApp/ServiceA and fabric:/SpecialApp/ServiceB szolgáltatást a Megosztott folyamat modellel, a Service Fabric csak egy példányt aktivál a "MultiTypeServicePackage" alkalmazáshálóhoz:/SpecialApp. A "MyCodePackageA" a service fabric összes replikáját üzemelteti:/SpecialApp/ServiceA. A "MyCodePackageB" a service fabric összes replikáját üzemelteti:/SpecialApp/ServiceB. Az alábbi ábrán a csomópont nézet látható ebben a beállításban:

Az üzembe helyezett alkalmazás csomópontnézetének diagramja

Az előző példában azt gondolhatja, hogy ha a "MyCodePackageA" a "MyServiceTypeA" és a "MyServiceTypeB" szolgáltatást is regisztrálja, és nincs "MyCodePackageB", akkor nem fut redundáns CodePackage . Bár ez helyes, ez az alkalmazásmodell nem felel meg az exkluzív folyamat üzemeltetési modelljének. Ha a cél az, hogy az egyes replikákat saját dedikált folyamatba helyezze, akkor nem kell mindkét ServiceType-ot regisztrálnia ugyanazon CodePackage-ből. Ehelyett egyszerűen az egyes ServiceType-okat a saját ServicePackage-be helyezi.

Reliable Services and Actor forking subprocesses

A Service Fabric nem támogatja a megbízható szolgáltatásokat, és az alfolyamatokat elágaztatást fenntartó megbízható szereplőket. Példa arra, hogy miért nem támogatott a CodePackageActivationContext nem használható nem támogatott alfolyamatok regisztrálásához, és a lemondási jogkivonatok csak regisztrált folyamatoknak lesznek elküldve, ami számos problémát, például frissítési hibát eredményez, ha az alfolyamatok nem záródnak be, miután a szülőfolyamat megkapta a lemondási jogkivonatot.

Következő lépések

Csomagoljon be egy alkalmazást , és készüljön fel az üzembe helyezésre.

Alkalmazások üzembe helyezése és eltávolítása. Ez a cikk azt ismerteti, hogyan kezelheti az alkalmazáspéldányokat a PowerShell használatával.