Ú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.
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.
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 |
|
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 Run
a , Start
a é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. ARunAsync
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
|
|
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 CodePackageActivationContext
keresztü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.