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

Tento článek popisuje, jak migrovat webové role a role Cloud Services pracovních procesů do bezstavových služeb Service Fabric. Jedná se o nejjednodušší způsob migrace z Cloud Services na Service Fabric pro aplikace, jejichž celková architektura zůstane zhruba stejná.

Projekt cloudových služeb do projektu aplikace Service Fabric

Projekt cloudové služby a projekt aplikace Service Fabric mají podobnou strukturu a oba představují jednotku nasazení vaší aplikace – to znamená, že každý z nich definuje kompletní balíček, který se nasadí 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 je do něj možné nasadit více aplikací Service Fabric.

Porovnání projektů Service Fabric a Cloud Services

Role pracovního procesu pro bezstavovou službu

Role pracovního procesu představuje bezstavovou úlohu, což znamená, že každá instance úlohy je identická a žádosti je možné kdykoli směrovat na libovolnou instanci. Neočekává se, že si každá instance pamatuje předchozí požadavek. Stav, se kterým úloha pracuje, je spravovaný externím úložištěm stavů, jako je Azure Table Storage nebo Azure Cosmos DB. V Service Fabric je tento typ úlohy reprezentovaný bezstavovou službou. Nejjednodušším způsobem migrace role pracovního procesu do Service Fabric je převod kódu role pracovního procesu na bezstavovou službu.

Role pracovního procesu pro bezstavovou službu

Webová role k bezstavové službě

Podobně jako role pracovního procesu představuje webová role také bezstavovou úlohu, a proto je koncepčně také možné ji namapovat na bezstavovou službu Service Fabric. Na rozdíl od webových rolí ale Service Fabric nepodporuje službu IIS. Migrace webové aplikace z webové role do bezstavové služby vyžaduje nejprve přesun na webovou architekturu, která může být hostovaná v místním prostředí a nezávisí na službě IIS nebo System.Web, jako je například 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í serveru v místním prostředí nebo ASP.NET Core 1
ASP.NET Core 1 Yes

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

Role pracovního procesu a rozhraní API služby Service Fabric 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() pro bezstavové
  • CreateServiceReplicaListener() pro stavový 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)
        {
        }
    }
}

Obě mají primární přepsání "Spustit", ve kterém se má zahájit zpracování. Služby Service Fabric kombinují Run, Starta Stop do jednoho 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ích procesů a služeb Service Fabric existuje několik klíčových rozdílů:

  • Životního cyklu: Největší rozdíl spočívá v tom, že role pracovního procesu je virtuální počítač, a proto se jeho životní cyklus váže na virtuální počítač, což zahrnuje události, kdy se virtuální počítač spustí a zastaví. Služba Service Fabric má životní cyklus, který je 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í nebo zastaví, protože nesouvisejí.
  • Životnost: Instance role pracovního procesu se recykluje, pokud se Run metoda ukončí. Metoda RunAsync ve službě Service Fabric se ale může spustit až do dokončení a instance služby zůstane v provozu.

Service Fabric poskytuje volitelný vstupní bod nastavení komunikace pro služby, které naslouchají požadavkům klientů. Vstupní bod runAsync i komunikace jsou ve službách Service Fabric volitelná přepsání – vaše služba může naslouchat pouze požadavkům klientů, nebo spouštět pouze smyčku zpracování nebo obojí – což je důvod, proč se metoda RunAsync může ukončit bez restartování instance služby, protože může dál naslouchat požadavkům klientů.

Aplikační rozhraní API a prostředí

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ího počítače. 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ách RoleEnvironment CodePackageActivationContext
Místní úložiště 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
Událost souběžné 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 jsou přístupné přímo prostřednictvím RoleEnvironment. V Service Fabric platí nastavení jednotlivě pro každou službu a 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í služby.
  • Data: statické datové soubory přidružené ke službě.

Každý z těchto balíčků může mít nezávisle na sobě verze a upgrady. Podobně jako u Cloud Services je konfigurační balíček přístupný programově prostřednictvím rozhraní API a jsou k dispozici události, které službu upozorní na změnu konfiguračního balíčku. Soubor Settings.xml lze použít pro konfiguraci klíč-hodnota a programový přístup podobně jako v části nastavení aplikace v souboru App.config. Na rozdíl od Cloud Services ale může konfigurační balíček Service Fabric obsahovat jakékoli 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 je přístupné 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, ke kterým mají přístup všechny aplikace v clusteru. Při použití speciálního Settings.xml konfiguračního souboru Service Fabric v rámci konfiguračního balíčku je možné hodnoty v Settings.xml přepsat na úrovni aplikace a umožnit tak nastavení konfigurace na úrovni aplikace.

K nastavení konfigurace se přistupuje v rámci každé instance služby prostřednictvím CodePackageActivationContextslužby .


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 se RoleEnvironment.Changed používá k oznámení všem instancím rolí, když v prostředí dojde ke změně, například ke změně konfigurace. Používá se ke 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 – má události, které upozorňují instanci služby na aktualizaci, přidání nebo odebrání balíčku. Služba může obsahovat více balíčků každého typu. Služba může mít například více konfiguračních balíčků, z nichž každý má jednotlivé verze a je možné je upgradovat.

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 při 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ů se zvýšenými oprávněními. Ú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í úloha 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í "omezené" nebo "zvýšené"
Sekvencování "simple", "background", "foreground"

Cloud Services

V Cloud Services je vstupní bod po spuštění nakonfigurován pro každou roli v 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 spouš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 integrované se sadou Visual Studio se šablonami projektů a podporou ladění, konfigurace a nasazování místně i do Azure. Prostředí místního vývojového modulu runtime poskytují také Cloud Services i Service Fabric. Rozdíl je v tom, že zatímco modul runtime vývoje cloudových služeb emuluje prostředí Azure, ve 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é jako v produkčním prostředí.

Další kroky

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