Sdílet prostřednictvím


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

Tento článek popisuje, jak migrovat webové a pracovní role Cloud Services (rozšířená podpora) do bezstavových služeb Service Fabric. Jedná se o nejjednodušší cestu migrace z Cloud Services (rozšířená podpora) do Service Fabric pro aplikace, jejichž celková architektura bude přibližně stejná.

Projekt Cloud Services (rozšířená podpora) do projektu aplikace Service Fabric

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 je v tom, že projekt cloudové služby páruje nasazení aplikace s nasazením virtuálního počítače a obsahuje v něm nastavení konfigurace virtuálního počítače, zatímco projekt aplikace Service Fabric definuje jenom 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 Manageru, nebo prostřednictvím webu Azure Portal a do ní lze nasadit několik aplikací Service Fabric.

Porovnání projektů Service Fabric a Cloud Services (rozšířená podpora)

Pracovní role do bezstavové služby

Role Worker představuje bezstavovou úlohu, což znamená, že každá instance úlohy je stejná a požadavky lze kdykoli směrovat do libovolné instance. U každé instance se neočekává, že si pamatuje předchozí požadavek. Stav, ve kterém úloha pracuje, 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 Worker Role do Service Fabric je možné provést převodem kódu Worker Role na bezstavovou službu.

Pracovní role na 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 možné ji také namapovat na bezstavovou službu Service Fabric. 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, jako je například ASP.NET Core 1.

Aplikace podporované Cesta migrace
ASP.NET – webové formuláře Ne Převod na ASP.NET Core 1 MVC
ASP.NET MVC S migrací Aktualizace na ASP.NET Core 1 MVC
Rozhraní API ASP.NET Web S migrací Použití místního serveru nebo ASP.NET Core 1
ASP.NET Core 1 Ano není k dispozici

Vstupní bod rozhraní API a životní cyklus

Pracovní role a API služeb Service Fabric nabízejí podobné vstupní body:

Vstupní bod Pracovní role Služba Service Fabric
Zpracování Run() RunAsync()
Spuštění virtuálního počítače OnStart() není k dispozici
Zastavení virtuálního počítače OnStop() není k dispozici
Otevření naslouchajícího modulu pro požadavky klientů není k dispozici
  • CreateServiceInstanceListener() bezstavové
  • CreateServiceReplicaListener() stavový

Role pracovníka


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í nastavení 'Spustit', které zahajuje zpracování. Služby Service Fabric kombinují Run, Starta Stop do jednoho vstupního bodu, RunAsync. Vaše služba by měla začít fungovat, když se RunAsync spustí, a měla by přestat fungovat, když je signalizován CancellationToken metody RunAsync.

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

  • Životní cyklus: Největší rozdíl spočívá 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, 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í a zastaví, protože nesouvisí.
  • Životnost: Instance role pracovního pracovníka se recykluje, pokud se metoda Run 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 komunikační bod jsou volitelná přepsání ve službách Service Fabric – vaše služba se může rozhodnout naslouchat pouze klientským požadavkům, nebo pouze spustit smyčku zpracování, nebo obojí – to je důvod, proč je metoda RunAsync povolena ukončit bez restartování instance služby, protože může i nadále naslouchat žádostem klientů.

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

Rozhraní API prostředí Cloud Services (rozšířená podpora) 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í Cloud Services (rozšířená podpora) Service Fabric
Nastavení konfigurace a oznámení o změně RoleEnvironment CodePackageActivationContext
Lokální ú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 není k dispozici
Současná změnová událost RoleEnvironment není k dispozici

Nastavení konfigurace

Nastavení konfigurace v Cloud Services (rozšířená podpora) jsou nastavená pro roli virtuálního počítače a vztahují se na všechny instance této role virtuálního počítače. Tato nastavení jsou dvojice klíč-hodnota nastavené v ServiceConfiguration.*.cscfg souborech 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 ostatní 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 mít svou verzi nezávisle a může být aktualizován. Podobně jako k cloudovým službám (rozšířená podpora) lze ke konfiguračnímu paketu přistupovat programově prostřednictvím API a jsou k dispozici události, které službu okamžitě upozorní na změnu konfiguračního paketu. Soubor Settings.xml lze použít pro konfiguraci páru klíč-hodnota a programatický přístup, podobně jako sekce nastavení aplikace v souboru App.config. Na rozdíl od cloudových služeb (rozšířená podpora) ale konfigurační balíček Service Fabric může 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 (rozšířená podpora)

Nastavení konfigurace z souboru 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á vlastní samostatný konfigurační balíček. Neexistuje žádný integrovaný mechanismus globálního nastavení konfigurace, ke kterému mají přístup 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 je možné přepsat hodnoty v Settings.xml 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 (rozšířená podpora)

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 ke spotřebová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 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žby 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í. Cloud Services (rozšířená podpora) i Service Fabric podporují úlohy spouštění. Hlavní rozdíl spočívá v tom, že v Cloud Services (rozšířená podpora) 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 (rozšířená podpora)
Umístění konfigurace ServiceDefinition.csdef
Privilegia „omezený“ nebo „zvýšený“
Klasifikace "jednoduchý", "pozadí", "popředí"

Cloud Services (rozšířená podpora)

Ve službě Cloud Services (rozšířená podpora) je vstupní bod spuštění nakonfigurovaný pro každou 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

Ve službě 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 o vývojovém prostředí

Cloud Services (rozšířená podpora) 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. Cloud Services (rozšířená podpora) i Service Fabric také poskytují místní vývojové prostředí runtime. Rozdíl je v tom, že zatímco modul runtime pro vývoj 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 Službě Service Fabric Reliable Services a základních rozdílech mezi cloudovými službami (rozšířená podpora) a architekturou aplikací Service Fabric, abyste pochopili, jak využívat celou sadu funkcí Service Fabric.