Útmutató a webes és feldolgozói szerepkörök Service Fabric állapot nélküli szolgáltatásokká alakításához

Ez a cikk azt ismerteti, hogyan migrálhatja a Cloud Services webes és feldolgozói szerepköreit a Service Fabric állapot nélküli szolgáltatásaiba. Ez a legegyszerűbb migrálási útvonal az Cloud Services-ról a Service Fabricre olyan alkalmazások esetében, amelyek teljes architektúrája nagyjából változatlan marad.

Cloud Service-projekt a Service Fabric-alkalmazásprojektbe

A Cloud Service-projektek és a Service Fabric-alkalmazásprojektek hasonló struktúrával rendelkeznek, és mindkettő az alkalmazás üzembehelyezési egységét képviselik , azaz mindegyik meghatározza az alkalmazás futtatásához üzembe helyezett teljes csomagot. A Cloud Service-projektek egy vagy több webes vagy feldolgozói szerepkört tartalmaznak. Hasonlóképpen, a Service Fabric-alkalmazásprojektek egy vagy több szolgáltatást tartalmaznak.

A különbség az, hogy a Cloud Service-projekt párosítja az alkalmazás üzembe helyezését egy virtuálisgép-üzembe helyezéssel, és így tartalmazza benne a virtuális gép konfigurációs beállításait, míg a Service Fabric-alkalmazás projekt csak egy olyan alkalmazást határoz meg, amely egy Service Fabric-fürt meglévő virtuális gépeinek készletére lesz üzembe helyezve. Maga a Service Fabric-fürt csak egyszer lesz üzembe helyezve egy Resource Manager sablonon vagy a Azure Portal keresztül, és több Service Fabric-alkalmazás is üzembe helyezhető rajta.

Service Fabric és Cloud Services projekt összehasonlítása

Feldolgozói szerepkör állapot nélküli szolgáltatáshoz

A feldolgozói szerepkör elméletileg állapot nélküli számítási feladatot jelöl, ami azt jelenti, hogy a számítási feladat minden példánya azonos, és a kérések bármikor átirányíthatók bármely példányra. Az egyes példányok nem fognak emlékezni az előző kérésre. Az állapot, amelyen a számítási feladat működik, egy külső állapottároló, például az Azure Table Storage vagy az Azure Cosmos DB felügyeli. A Service Fabricben az ilyen típusú számítási feladatokat állapot nélküli szolgáltatás képviseli. A feldolgozói szerepkör Service Fabricbe való migrálásának legegyszerűbb módszere a feldolgozói szerepkör kódjának állapot nélküli szolgáltatássá alakításával végezhető el.

Feldolgozói szerepkör állapot nélküli szolgáltatáshoz

Webes szerepkör állapot nélküli szolgáltatáshoz

A feldolgozói szerepkörhöz hasonlóan a webes szerepkör is egy állapot nélküli számítási feladatot jelöl, így fogalmilag ez is leképezhető egy Service Fabric állapot nélküli szolgáltatásra. A webes szerepkörökkel ellentétben azonban a Service Fabric nem támogatja az IIS-t. Ha webalkalmazást szeretne webszerepkörből állapot nélküli szolgáltatásba migrálni, először át kell költöznie egy saját üzemeltetésű webes keretrendszerbe, amely nem függ az IIS-től vagy a System.Web-től, például ASP.NET Core 1-től.

Alkalmazás Támogatott Migrálási útvonal
ASP.NET Web Forms No Konvertálás ASP.NET Core 1 MVC-vé
ASP.NET, MVC Migrálással Frissítés ASP.NET Core 1 MVC-re
ASP.NET, webes API Migrálással Saját üzemeltetésű kiszolgáló vagy ASP.NET Core 1 használata
ASP.NET Core 1 Yes N/A

Belépési pont API és életciklus

A feldolgozói szerepkör és a Service Fabric szolgáltatás API-k hasonló belépési pontokat kínálnak:

Belépési pont Feldolgozói szerepkör Service Fabric szolgáltatás
Feldolgozás Run() RunAsync()
Virtuális gép indítása OnStart() N/A
Virtuális gép leállítása OnStop() N/A
Ügyfélkérések figyelőjének megnyitása N/A
  • CreateServiceInstanceListener() állapot nélküli
  • CreateServiceReplicaListener() állapotalapú

Feldolgozói szerepkör


using Microsoft.WindowsAzure.ServiceRuntime;

namespace WorkerRole1
{
    public class WorkerRole : RoleEntryPoint
    {
        public override void Run()
        {
        }

        public override bool OnStart()
        {
        }

        public override void OnStop()
        {
        }
    }
}

Service Fabric állapot nélküli szolgáltatás


using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.ServiceFabric.Services.Communication.Runtime;
using Microsoft.ServiceFabric.Services.Runtime;

namespace Stateless1
{
    public class Stateless1 : StatelessService
    {
        protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
        {
        }

        protected override Task RunAsync(CancellationToken cancelServiceInstance)
        {
        }
    }
}

Mindkettő elsődleges "Futtatás" felülbírálással rendelkezik, amelyben megkezdhető a feldolgozás. A Service Fabric-szolgáltatások egyetlen belépési pontban egyesítik Runa , Starta és Stop a elemet. RunAsync A szolgáltatásnak az indításkor RunAsync működnie kell, és a metódus CancellationToken jelének jelzése után le kell állítania a RunAsync működését.

A feldolgozói szerepkörök és a Service Fabric-szolgáltatások életciklusa és élettartama között számos fő különbség van:

  • Életciklus: A legnagyobb különbség az, hogy a feldolgozói szerepkör egy virtuális gép, így életciklusa a virtuális géphez van kötve, amely magában foglalja a virtuális gép elindulásához és leállításához kapcsolódó eseményeket. A Service Fabric-szolgáltatások életciklusa külön van a virtuális gépek életciklusától, ezért nem tartalmaz eseményeket a gazdagép virtuális gépének vagy gépének elindulásakor és leállásakor, mivel ezek nem kapcsolódnak egymáshoz.
  • Életre: A feldolgozói szerepkör példánya újraindul, ha a Run metódus kilép. A RunAsync Service Fabric-szolgáltatás metódusa azonban futtatható a befejezésig, és a szolgáltatáspéldány továbbra is működik.

A Service Fabric opcionális kommunikációs beállítási belépési pontot biztosít az ügyfélkéréseket figyelő szolgáltatások számára. A RunAsync és a kommunikációs belépési pont egyaránt választható felülbírálás a Service Fabric-szolgáltatásokban – a szolgáltatás dönthet úgy, hogy csak az ügyfélkéréseket figyeli, vagy csak feldolgozási ciklust futtat, vagy mindkettőt – ezért a RunAsync metódus a szolgáltatáspéldány újraindítása nélkül is kiléphet, mert továbbra is figyelheti az ügyfélkéréseket.

Application API és környezet

A Cloud Services környezeti API információkat és funkciókat biztosít az aktuális virtuálisgép-példányhoz, valamint további virtuálisgép-szerepkörpéldányokról. A Service Fabric a futtatókörnyezetével kapcsolatos információkat és néhány információt nyújt arról a csomópontról, amelyen a szolgáltatás jelenleg fut.

Környezeti tevékenység Felhőszolgáltatások Service Fabric
Konfigurációs beállítások és változásértesítés RoleEnvironment CodePackageActivationContext
Helyi tároló RoleEnvironment CodePackageActivationContext
Végpont adatai RoleInstance
  • Aktuális példány: RoleEnvironment.CurrentRoleInstance
  • Egyéb szerepkörök és példányok: RoleEnvironment.Roles
  • NodeContext az aktuális csomópontcímhez
  • FabricClient és ServicePartitionResolver a szolgáltatásvégpont felderítéséhez
Környezeti emuláció RoleEnvironment.IsEmulated N/A
Egyidejű változási esemény RoleEnvironment N/A

Konfigurációs beállítások

A Cloud Services konfigurációs beállításai be vannak állítva egy virtuálisgép-szerepkörhöz, és az adott virtuálisgép-szerepkör összes példányára érvényesek. Ezek a beállítások a ServiceConfiguration.*.cscfg fájlokban beállított kulcs-érték párok, amelyek közvetlenül a RoleEnvironment használatával érhetők el. A Service Fabricben a beállítások az egyes szolgáltatásokra és az egyes alkalmazásokra vonatkoznak, nem pedig egy virtuális gépre, mivel egy virtuális gép több szolgáltatást és alkalmazást is üzemeltethet. A szolgáltatás három csomagból áll:

  • Kód: tartalmazza a szolgáltatás futtatható fájljait, bináris fájljait, DLL-jeit és minden más fájlt, amelyeket a szolgáltatásnak futtatnia kell.
  • Konfiguráció: egy szolgáltatás összes konfigurációs fájlja és beállítása.
  • Adatok: a szolgáltatáshoz társított statikus adatfájlok.

Ezek a csomagok függetlenül verziószámozottak és frissíthetők. A Cloud Services-hez hasonlóan egy konfigurációs csomag programozott módon is elérhető egy API-val, és események érhetők el, amelyek értesítik a szolgáltatást a konfigurációs csomag módosításáról. Egy Settings.xml fájl használható kulcs-érték konfigurációhoz és programozott hozzáféréshez, hasonlóan a App.config fájl alkalmazásbeállítások szakaszához. A Cloud Services ellentétben azonban a Service Fabric konfigurációs csomagjai bármilyen formátumú konfigurációs fájlt tartalmazhatnak, legyen szó XML-ről, JSON-ról, YAML-ről vagy egyéni bináris formátumról.

Hozzáférés a konfigurációhoz

Cloud Services

A ServiceConfiguration.*.cscfg konfigurációs beállításai a használatával RoleEnvironmentérhetők el. Ezek a beállítások globálisan elérhetők az összes szerepkörpéldány számára ugyanabban a felhőszolgáltatás-üzembe helyezésben.


string value = RoleEnvironment.GetConfigurationSettingValue("Key");

Service Fabric

Minden szolgáltatás saját egyéni konfigurációs csomagtal rendelkezik. A fürt összes alkalmazása számára elérhető globális konfigurációs beállításokhoz nincs beépített mechanizmus. Ha a Service Fabric speciális Settings.xml konfigurációs fájlját használja egy konfigurációs csomagon belül, a Settings.xml értékei felülírhatók az alkalmazás szintjén, lehetővé téve az alkalmazásszintű konfigurációs beállításokat.

A konfigurációs beállítások az egyes szolgáltatáspéldányokon belüli hozzáférések a szolgáltatáson CodePackageActivationContextkeresztül.


ConfigurationPackage configPackage = this.Context.CodePackageActivationContext.GetConfigurationPackageObject("Config");

// Access Settings.xml
KeyedCollection<string, ConfigurationProperty> parameters = configPackage.Settings.Sections["MyConfigSection"].Parameters;

string value = parameters["Key"]?.Value;

// Access custom configuration file:
using (StreamReader reader = new StreamReader(Path.Combine(configPackage.Path, "CustomConfig.json")))
{
    MySettings settings = JsonConvert.DeserializeObject<MySettings>(reader.ReadToEnd());
}

Konfigurációfrissítési események

Cloud Services

Az RoleEnvironment.Changed esemény az összes szerepkörpéldány értesítésére szolgál, ha változás történik a környezetben, például egy konfigurációs változásról. Ez konfigurációfrissítések felhasználására szolgál a szerepkörpéldányok újrahasznosítása vagy a feldolgozófolyamat újraindítása nélkül.


RoleEnvironment.Changed += RoleEnvironmentChanged;

private void RoleEnvironmentChanged(object sender, RoleEnvironmentChangedEventArgs e)
{
   // Get the list of configuration changes
   var settingChanges = e.Changes.OfType<RoleEnvironmentConfigurationSettingChange>();
foreach (var settingChange in settingChanges) 
   {
      Trace.WriteLine("Setting: " + settingChange.ConfigurationSettingName, "Information");
   }
}

Service Fabric

A szolgáltatás három csomagtípusa – a Kód, a Konfiguráció és az Adatok – mindegyike rendelkezik olyan eseményekkel, amelyek értesítik a szolgáltatáspéldányt a csomag frissítésekor, hozzáadásakor vagy eltávolításakor. A szolgáltatások több csomagot is tartalmazhatnak minden típusból. Előfordulhat például, hogy egy szolgáltatás több konfigurációs csomaggal rendelkezik, amelyek mindegyike egyenként verziószámozott és frissíthető.

Ezek az események a szolgáltatáscsomagok módosításainak felhasználásához érhetők el a szolgáltatáspéldány újraindítása nélkül.


this.Context.CodePackageActivationContext.ConfigurationPackageModifiedEvent +=
                    this.CodePackageActivationContext_ConfigurationPackageModifiedEvent;

private void CodePackageActivationContext_ConfigurationPackageModifiedEvent(object sender, PackageModifiedEventArgs<ConfigurationPackage> e)
{
    this.UpdateCustomConfig(e.NewPackage.Path);
    this.UpdateSettings(e.NewPackage.Settings);
}

Indítási feladatok

Az indítási feladatok olyan műveletek, amelyeket az alkalmazás indítása előtt hajtanak végre. Az indítási feladatokat általában emelt szintű jogosultságokkal futtatják a telepítőszkriptek. Mind a Cloud Services, mind a Service Fabric támogatja az indítási feladatokat. A fő különbség az, hogy a Cloud Services egy indítási feladat egy virtuális géphez van kötve, mert egy szerepkörpéldány része, míg a Service Fabricben egy indítási feladat egy szolgáltatáshoz van kötve, amely nem kapcsolódik egy adott virtuális géphez.

Service Fabric Cloud Services
Konfiguráció helye ServiceDefinition.csdef
Jogosultságok "korlátozott" vagy "emelt szintű"
Alkalmazás-előkészítés "egyszerű", "háttér", "előtérben"

Cloud Services

A Cloud Services a ServiceDefinition.csdef szerepköre szerint egy indítási belépési pont van konfigurálva.


<ServiceDefinition>
    <Startup>
        <Task commandLine="Startup.cmd" executionContext="limited" taskType="simple" >
            <Environment>
                <Variable name="MyVersionNumber" value="1.0.0.0" />
            </Environment>
        </Task>
    </Startup>
    ...
</ServiceDefinition>

Service Fabric

A Service Fabricben az indítási belépési pont szolgáltatásonként van konfigurálva a ServiceManifest.xml:


<ServiceManifest>
  <CodePackage Name="Code" Version="1.0.0">
    <SetupEntryPoint>
      <ExeHost>
        <Program>Startup.bat</Program>
      </ExeHost>
    </SetupEntryPoint>
    ...
</ServiceManifest>

Megjegyzés a fejlesztési környezetről

A Cloud Services és a Service Fabric is integrálva van a Visual Studióval projektsablonokkal, és támogatja a hibakeresést, konfigurálást és üzembe helyezést helyileg és az Azure-ban is. A Cloud Services és a Service Fabric is biztosít helyi fejlesztési futtatókörnyezetet. A különbség az, hogy míg a Cloud Service fejlesztői futtatókörnyezete emulálja azt az Azure-környezetet, amelyen fut, a Service Fabric nem használ emulátort – a teljes Service Fabric-futtatókörnyezetet használja. A helyi fejlesztőgépen futtatott Service Fabric-környezet ugyanaz a környezet, amely éles környezetben fut.

Következő lépések

További információ a Service Fabric Reliable Servicesről, valamint a Cloud Services és a Service Fabric alkalmazásarchitektúrája közötti alapvető különbségekről, amelyekből megtudhatja, hogyan használhatja ki a Service Fabric-funkciók teljes készletét.