Guide för att konvertera webb- och arbetsroller till tillståndslösa Service Fabric-tjänster
I den här artikeln beskrivs hur du migrerar webb- och arbetsroller för Cloud Services till tillståndslösa Service Fabric-tjänster. Det här är den enklaste migreringsvägen från Cloud Services till Service Fabric för program vars övergripande arkitektur kommer att förbli ungefär densamma.
Cloud Service-projekt till Service Fabric-programprojekt
Ett Cloud Service-projekt och ett Service Fabric-programprojekt har en liknande struktur och båda representerar distributionsenheten för ditt program , det vill sa att de definierar det fullständiga paket som distribueras för att köra ditt program. Ett Molntjänstprojekt innehåller en eller flera webb- eller arbetsroller. På samma sätt innehåller ett Service Fabric-programprojekt en eller flera tjänster.
Skillnaden är att Cloud Service-projektet kopplar ihop programdistributionen med en VM-distribution och därmed innehåller konfigurationsinställningar för virtuella datorer i det, medan Service Fabric-programprojektet endast definierar ett program som ska distribueras till en uppsättning befintliga virtuella datorer i ett Service Fabric-kluster. Själva Service Fabric-klustret distribueras bara en gång, antingen via en Resource Manager-mall eller via Azure-portalen, och flera Service Fabric-program kan distribueras till det.
Arbetsroll till tillståndslös tjänst
Konceptuellt representerar en arbetsroll en tillståndslös arbetsbelastning, vilket innebär att varje instans av arbetsbelastningen är identisk och begäranden kan dirigeras till valfri instans när som helst. Varje instans förväntas inte komma ihåg den tidigare begäran. Tillstånd som arbetsbelastningen körs på hanteras av ett externt tillståndslager, till exempel Azure Table Storage eller Azure Cosmos DB. I Service Fabric representeras den här typen av arbetsbelastning av en tillståndslös tjänst. Den enklaste metoden för att migrera en arbetsroll till Service Fabric kan göras genom att konvertera arbetsrollkod till en tillståndslös tjänst.
Webbroll till tillståndslös tjänst
På samma sätt som arbetsrollen representerar en webbroll också en tillståndslös arbetsbelastning, så konceptuellt kan den också mappas till en tillståndslös Service Fabric-tjänst. Till skillnad från webbroller stöder Service Fabric dock inte IIS. För att migrera ett webbprogram från en webbroll till en tillståndslös tjänst måste du först flytta till ett webbramverk som kan vara lokalt och inte är beroende av IIS eller System.Web, till exempel ASP.NET Core 1.
Program | Stöds | Migreringssökväg |
---|---|---|
ASP.NET Web Forms | Nej | Konvertera till ASP.NET Core 1 MVC |
ASP.NET MVC | Med migrering | Uppgradera till ASP.NET Core 1 MVC |
ASP.NET Web API | Med migrering | Använda lokalt installerad server eller ASP.NET Core 1 |
ASP.NET Core 1 | Ja | Ej tillämpligt |
Startpunkts-API och livscykel
Api:er för arbetsrollen och Service Fabric-tjänsten erbjuder liknande startpunkter:
Startpunkt | Arbetsroll | Service Fabric-tjänst |
---|---|---|
Bearbetning | Run() |
RunAsync() |
Start av virtuell dator | OnStart() |
Ej tillämpligt |
Vm-stopp | OnStop() |
Ej tillämpligt |
Öppna lyssnaren för klientbegäranden | Ej tillämpligt |
|
Arbetsroll
using Microsoft.WindowsAzure.ServiceRuntime;
namespace WorkerRole1
{
public class WorkerRole : RoleEntryPoint
{
public override void Run()
{
}
public override bool OnStart()
{
}
public override void OnStop()
{
}
}
}
Tillståndslös Service Fabric-tjänst
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)
{
}
}
}
Båda har en primär "Kör"-åsidosättning där bearbetningen ska påbörjas. Service Fabric-tjänster kombinerar Run
, Start
och Stop
till en enda startpunkt, RunAsync
. Tjänsten bör börja fungera när RunAsync
den startar och bör sluta fungera när RunAsync
metodens CancellationToken signaleras.
Det finns flera viktiga skillnader mellan livscykeln och livslängden för arbetsroller och Service Fabric-tjänster:
- Livscykel: Den största skillnaden är att en arbetsroll är en virtuell dator och därför är dess livscykel kopplad till den virtuella datorn, vilket inkluderar händelser för när den virtuella datorn startar och stoppas. En Service Fabric-tjänst har en livscykel som är separat från den virtuella datorns livscykel, så den inkluderar inte händelser för när den virtuella värddatorn eller datorn startar och stoppas, eftersom de inte är relaterade.
- Livslängd: En arbetsrollinstans återanvänds om
Run
metoden avslutas. MetodenRunAsync
i en Service Fabric-tjänst kan dock köras till slutförande och tjänstinstansen stannar kvar.
Service Fabric tillhandahåller en valfri startpunkt för kommunikationskonfiguration för tjänster som lyssnar efter klientbegäranden. Både RunAsync- och kommunikationsinmatningspunkten är valfria åsidosättningar i Service Fabric-tjänster – tjänsten kan välja att endast lyssna på klientbegäranden eller bara köra en bearbetningsloop, eller båda , vilket är anledningen till att RunAsync-metoden tillåts avslutas utan att starta om tjänstinstansen, eftersom den kan fortsätta att lyssna efter klientbegäranden.
Program-API och miljö
Cloud Services-miljö-API:et innehåller information och funktioner för den aktuella VM-instansen samt information om andra VM-rollinstanser. Service Fabric innehåller information om dess körning och viss information om noden som en tjänst körs på för närvarande.
Miljöuppgift | Cloud Services | Service Fabric |
---|---|---|
Konfigurationsinställningar och ändringsmeddelande | RoleEnvironment |
CodePackageActivationContext |
Lokal lagring | RoleEnvironment |
CodePackageActivationContext |
Slutpunktsinformation | RoleInstance
|
|
Miljöemulering | RoleEnvironment.IsEmulated |
Ej tillämpligt |
Samtidig ändringshändelse | RoleEnvironment |
Ej tillämpligt |
Konfigurationsinställningar
Konfigurationsinställningar i Cloud Services anges för en VM-roll och gäller för alla instanser av den virtuella datorrollen. De här inställningarna är nyckel/värde-par som anges i ServiceConfiguration.*.cscfg-filer och kan nås direkt via RoleEnvironment. I Service Fabric gäller inställningarna individuellt för varje tjänst och för varje program, snarare än för en virtuell dator, eftersom en virtuell dator kan vara värd för flera tjänster och program. En tjänst består av tre paket:
- Kod: innehåller tjänstens körbara filer, binärfiler, DLL:er och andra filer som en tjänst behöver köra.
- Konfiguration: alla konfigurationsfiler och inställningar för en tjänst.
- Data: statiska datafiler som är associerade med tjänsten.
Vart och ett av dessa paket kan versionshanteras och uppgraderas separat. På samma sätt som Cloud Services kan ett konfigurationspaket nås programmatiskt via ett API och händelser är tillgängliga för att meddela tjänsten om en ändring av konfigurationspaketet. En Settings.xml fil kan användas för nyckel/värde-konfiguration och programmatisk åtkomst som liknar appinställningar i en App.config-fil. Till skillnad från Cloud Services kan dock ett Service Fabric-konfigurationspaket innehålla alla konfigurationsfiler i valfritt format, oavsett om det är XML, JSON, YAML eller ett anpassat binärt format.
Åtkomst till konfiguration
Cloud Services
Konfigurationsinställningar från ServiceConfiguration.*.cscfg kan nås via RoleEnvironment
. De här inställningarna är globalt tillgängliga för alla rollinstanser i samma molntjänstdistribution.
string value = RoleEnvironment.GetConfigurationSettingValue("Key");
Service Fabric
Varje tjänst har ett eget individuellt konfigurationspaket. Det finns ingen inbyggd mekanism för globala konfigurationsinställningar som är tillgängliga för alla program i ett kluster. När du använder Service Fabrics särskilda Settings.xml konfigurationsfil i ett konfigurationspaket kan värden i Settings.xml skrivas över på programnivå, vilket möjliggör konfigurationsinställningar på programnivå.
Konfigurationsinställningar är åtkomster inom varje tjänstinstans via tjänstens CodePackageActivationContext
.
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());
}
Konfigurationsuppdateringshändelser
Cloud Services
Händelsen RoleEnvironment.Changed
används för att meddela alla rollinstanser när en ändring sker i miljön, till exempel en konfigurationsändring. Detta används för att använda konfigurationsuppdateringar utan att återanvända rollinstanser eller starta om en arbetsprocess.
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
Var och en av de tre pakettyperna i en tjänst – kod, konfiguration och data – har händelser som meddelar en tjänstinstans när ett paket uppdateras, läggs till eller tas bort. En tjänst kan innehålla flera paket av varje typ. En tjänst kan till exempel ha flera konfigurationspaket, var och en individuellt version och uppgraderingsbar.
Dessa händelser är tillgängliga för att använda ändringar i tjänstpaket utan att starta om tjänstinstansen.
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);
}
Startaktiviteter
Startuppgifter är åtgärder som vidtas innan ett program startar. En startuppgift används vanligtvis för att köra installationsskript med utökade privilegier. Både Cloud Services och Service Fabric stöder startuppgifter. Den största skillnaden är att i Cloud Services är en startuppgift kopplad till en virtuell dator eftersom den är en del av en rollinstans, medan en startaktivitet i Service Fabric är kopplad till en tjänst som inte är kopplad till någon viss virtuell dator.
Service Fabric | Cloud Services |
---|---|
Konfigurationsplats | ServiceDefinition.csdef |
Privilegier | "begränsad" eller "upphöjd" |
Ordningsföljd | "simple", "background", "foreground" |
Cloud Services
I Cloud Services konfigureras en startpunkt per roll i ServiceDefinition.csdef.
<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
I Service Fabric konfigureras en startpunkt per tjänst i ServiceManifest.xml:
<ServiceManifest>
<CodePackage Name="Code" Version="1.0.0">
<SetupEntryPoint>
<ExeHost>
<Program>Startup.bat</Program>
</ExeHost>
</SetupEntryPoint>
...
</ServiceManifest>
En anteckning om utvecklingsmiljön
Både Cloud Services och Service Fabric är integrerade med Visual Studio med projektmallar och stöd för felsökning, konfigurering och distribution både lokalt och till Azure. Både Cloud Services och Service Fabric tillhandahåller även en lokal utvecklingsmiljö. Skillnaden är att medan cloud service-utvecklingskörningen emulerar Azure-miljön som den körs på, använder Service Fabric inte någon emulator – den använder hela Service Fabric-körningen. Den Service Fabric-miljö som du kör på din lokala utvecklingsdator är samma miljö som körs i produktion.
Nästa steg
Läs mer om Service Fabric Reliable Services och de grundläggande skillnaderna mellan Cloud Services- och Service Fabric-programarkitekturen för att förstå hur du kan dra nytta av alla Service Fabric-funktioner.