Průvodce převodem webových rolí a rolí pracovního procesu na Service Fabric bezstavové služby

Tento článek popisuje, jak migrovat Cloud Services webové role a role pracovního procesu do Service Fabric bezstavových služeb. Toto je nejjednodušší cesta migrace z Cloud Services na Service Fabric pro aplikace, jejichž celková architektura bude přibližně stejná.

Projekt cloudové služby pro Service Fabric projekt aplikace

Projekt cloudové služby a projekt aplikace Service Fabric mají podobnou strukturu a obě představují jednotku nasazení pro vaši aplikaci – to znamená, že každý definuje kompletní balíček, který je nasazen pro spuštění vaší aplikace. Projekt cloudové služby obsahuje jednu nebo více webových rolí nebo rolí pracovního procesu. Podobně projekt aplikace Service Fabric obsahuje jednu nebo více služeb.

Rozdíl spočívá v tom, že projekt cloudové služby spojuje nasazení aplikace s nasazením virtuálního počítače, a proto obsahuje nastavení konfigurace virtuálního počítače, zatímco projekt aplikace Service Fabric definuje pouze aplikaci, která se nasadí do sady existujících virtuálních počítačů v clusteru Service Fabric. Samotný cluster Service Fabric se nasadí jenom jednou, a to buď prostřednictvím šablony Resource Manager, nebo prostřednictvím Azure Portal a do ní je možné nasadit několik Service Fabric aplikací.

Service Fabric and Cloud Services project comparison

Role pracovního procesu do bezstavové služby

Role pracovního procesu představuje bezstavovou úlohu, což znamená, že každá instance úlohy je identická a požadavky lze kdykoli směrovat na libovolnou instanci. U každé instance se neočekává, že si pamatuje předchozí požadavek. Stav, že úloha funguje, je spravována externím úložištěm stavů, jako je Azure Table Storage nebo Azure Cosmos DB. V Service Fabric je tento typ úlohy reprezentován bezstavovou službou. Nejjednodušší přístup k migraci role pracovního procesu na Service Fabric lze provést převodem kódu role pracovního procesu na bezstavovou službu.

Worker Role to Stateless Service

Webová role do bezstavové služby

Podobně jako role pracovního procesu představuje webová role také bezstavovou úlohu, takže je možné ji také koncepčně namapovat na Service Fabric bezstavovou službu. Na rozdíl od webových rolí však Service Fabric nepodporuje službu IIS. Pokud chcete migrovat webovou aplikaci z webové role do bezstavové služby, musíte nejprve přejít na webovou architekturu, která může být hostovaná samostatně a nezávisí na službě IIS nebo System.Web, například na ASP.NET Core 1.

Aplikace Podporováno Cesta migrace
ASP.NET – webové formuláře No Převod na ASP.NET Core 1 MVC
ASP.NET MVC S migrací Upgrade na ASP.NET Core 1 MVC
Rozhraní API pro ASP.NET Web S migrací Použití místního serveru nebo ASP.NET Core 1
ASP.NET Core 1 Yes

Rozhraní API vstupního bodu a životní cyklus

Rozhraní API rolí pracovního procesu a Service Fabric služeb nabízejí podobné vstupní body:

Vstupní bod Role pracovního procesu služba Service Fabric
Zpracování Run() RunAsync()
Spuštění virtuálního počítače OnStart()
Zastavení virtuálního počítače OnStop()
Otevření naslouchacího procesu pro požadavky klientů
  • CreateServiceInstanceListener() bezstavové
  • CreateServiceReplicaListener() stavové

Role pracovního procesu


using Microsoft.WindowsAzure.ServiceRuntime;

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

        public override bool OnStart()
        {
        }

        public override void OnStop()
        {
        }
    }
}

bezstavová služba Service Fabric


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)
        {
        }
    }
}

Oba mají primární přepsání Spustit, ve kterém se má začít zpracovávat. Service Fabric služby kombinují Run, Starta Stop do jediného vstupního bodu, RunAsync. Služba by měla začít fungovat při RunAsync spuštění a měla by přestat fungovat, když RunAsync je metoda CancellationToken signalována.

Mezi životním cyklem a životností rolí pracovního procesu a službami Service Fabric existuje několik klíčových rozdílů:

  • Životního cyklu: Největší rozdíl je v tom, že role pracovního procesu je virtuální počítač, a proto je jeho životní cyklus svázaný s virtuálním počítačem, který zahrnuje události, kdy se virtuální počítač spustí a zastaví. Služba Service Fabric má životní cyklus oddělený od životního cyklu virtuálního počítače, takže nezahrnuje události, kdy se hostitelský virtuální počítač nebo počítač spustí a zastaví, protože nesouvisejí.
  • Životnost: Instance role pracovního procesu se recykluje, pokud Run se metoda ukončí. Metoda RunAsync ve službě Service Fabric ale může běžet až po dokončení a instance služby zůstane vzhůru.

Service Fabric poskytuje volitelný vstupní bod nastavení komunikace pro služby, které naslouchají požadavkům klientů. Vstupní bod RunAsync i komunikační bod jsou volitelná přepsání ve službách Service Fabric – vaše služba se může rozhodnout naslouchat pouze žádostem klientů, nebo pouze spustit smyčku zpracování nebo obojí – proto je metoda RunAsync povolena ukončit bez restartování instance služby, protože může i nadále naslouchat žádostem klientů.

Rozhraní API a prostředí aplikací

Rozhraní API prostředí Cloud Services poskytuje informace a funkce pro aktuální instanci virtuálního počítače a také informace o dalších instancích rolí virtuálních počítačů. Service Fabric poskytuje informace související s modulem runtime a některé informace o uzlu, na kterém je služba aktuálně spuštěná.

Úloha prostředí Cloudové služby Service Fabric
Nastavení konfigurace a oznámení o změně RoleEnvironment CodePackageActivationContext
Místní Storage RoleEnvironment CodePackageActivationContext
Informace o koncovém bodu RoleInstance
  • Aktuální instance: RoleEnvironment.CurrentRoleInstance
  • Další role a instance: RoleEnvironment.Roles
  • NodeContext pro aktuální adresu uzlu
  • FabricClient a ServicePartitionResolver pro zjišťování koncových bodů služby
Emulace prostředí RoleEnvironment.IsEmulated
Souběžná událost změny RoleEnvironment

Nastavení konfigurace

Nastavení konfigurace v Cloud Services jsou nastavená pro roli virtuálního počítače a platí pro všechny instance této role virtuálního počítače. Tato nastavení jsou páry klíč-hodnota nastavené v souborech ServiceConfiguration.*.cscfg a lze k nim přistupovat přímo prostřednictvím roleEnvironment. V Service Fabric platí nastavení pro každou službu a pro každou aplikaci, nikoli pro virtuální počítač, protože virtuální počítač může hostovat více služeb a aplikací. Služba se skládá ze tří balíčků:

  • Kód: obsahuje spustitelné soubory služby, binární soubory, knihovny DLL a všechny další soubory, které služba potřebuje spustit.
  • Konfigurace: Všechny konfigurační soubory a nastavení pro službu.
  • Data: statické datové soubory přidružené ke službě.

Každý z těchto balíčků může být nezávisle na verzích a upgradován. Podobně jako u Cloud Services je konfigurační balíček přístupný prostřednictvím kódu programu prostřednictvím rozhraní API a události jsou k dispozici pro upozornění služby na změnu konfiguračního balíčku. Soubor Settings.xml lze použít pro konfiguraci klíč-hodnota a programový přístup podobný části nastavení aplikace App.config souboru. Na rozdíl od Cloud Services ale konfigurační balíček Service Fabric může obsahovat konfigurační soubory v libovolném formátu, ať už jde o XML, JSON, YAML nebo vlastní binární formát.

Přístup ke konfiguraci

Cloud Services

Nastavení konfigurace z ServiceConfiguration.*.cscfg lze získat přístup prostřednictvím RoleEnvironment. Tato nastavení jsou globálně dostupná pro všechny instance rolí ve stejném nasazení cloudové služby.


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

Service Fabric

Každá služba má svůj vlastní individuální konfigurační balíček. Neexistuje žádný integrovaný mechanismus pro globální nastavení konfigurace, který by byly přístupné pro všechny aplikace v clusteru. Při použití speciálního konfiguračního souboru Settings.xml Service Fabric v rámci konfiguračního balíčku lze hodnoty v Settings.xml přepsat na úrovni aplikace, což umožňuje nastavení konfigurace na úrovni aplikace.

Nastavení konfigurace jsou přístupná v rámci každé instance služby prostřednictvím služby 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());
}

Události aktualizace konfigurace

Cloud Services

Událost RoleEnvironment.Changed se používá k upozorňovat všechny instance rolí, když dojde ke změně v prostředí, například ke změně konfigurace. Používá se k využívání aktualizací konfigurace bez recyklace instancí rolí nebo restartování pracovního procesu.


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

Každý ze tří typů balíčků ve službě – Kód, Konfigurace a Data – mají události, které upozorňují instanci služby při aktualizaci, přidání nebo odebrání balíčku. Služba může obsahovat více balíčků každého typu. Například služba může mít několik konfiguračních balíčků, každý jednotlivě s verzí a upgradovatelný.

Tyto události jsou k dispozici pro využívání změn v balíčcích služeb bez restartování instance služby.


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);
}

Úlohy po spuštění

Úlohy po spuštění jsou akce, které se provádějí před spuštěním aplikace. Spouštěcí úloha se obvykle používá ke spouštění instalačních skriptů pomocí zvýšených oprávnění. Úlohy spuštění podporují Cloud Services i Service Fabric. Hlavní rozdíl spočívá v tom, že v Cloud Services je spouštěcí úkol svázaný s virtuálním počítačem, protože je součástí instance role, zatímco v Service Fabric je spouštěcí úloha svázaná se službou, která není svázaná s žádným konkrétním virtuálním počítačem.

Service Fabric Cloud Services
Umístění konfigurace ServiceDefinition.csdef
Oprávnění "limited" nebo "elevated"
Sekvencování "simple", "background", "foreground"

Cloud Services

V Cloud Services je vstupní bod spuštění nakonfigurovaný na roli ve službě 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

V Service Fabric je vstupní bod spuštění nakonfigurovaný pro každou službu v ServiceManifest.xml:


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

Poznámka k vývojovému prostředí

Cloud Services i Service Fabric jsou integrovány s Visual Studio se šablonami projektů a podporují ladění, konfiguraci a nasazování místně i do Azure. Cloud Services i Service Fabric také poskytují místní vývojové prostředí runtime. Rozdíl je v tom, že zatímco modul runtime vývoje cloudových služeb emuluje prostředí Azure, na kterém běží, Service Fabric nepoužívá emulátor – používá kompletní modul runtime Service Fabric. Prostředí Service Fabric, které spouštíte na místním vývojovém počítači, je stejné prostředí, které běží v produkčním prostředí.

Další kroky

Přečtěte si další informace o Service Fabric Reliable Services a základních rozdílech mezi Cloud Services a architekturou aplikací Service Fabric, abyste pochopili, jak využívat celou sadu funkcí Service Fabric.