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

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

Projekt cloudové služby do Service Fabric projektu aplikace

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

Rozdílem je to, že projekt cloudové služby Couples nasazení aplikace s nasazením virtuálního počítače, a v něm obsahuje nastavení konfigurace virtuálního počítače, zatímco projekt Service Fabric aplikace 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 nasazuje jenom jednou, a to buď prostřednictvím šablony Správce prostředků, nebo prostřednictvím Azure Portal, a do ní můžete nasadit několik Service Fabric aplikací.

Porovnání projektu Service Fabric a Cloud Services

Role pracovního procesu do bezstavové služby

V koncepčním případě role pracovního procesu představuje bezstavové úlohy, což znamená, že každá instance úlohy je shodná a požadavky lze kdykoli směrovat do libovolné instance. U každé instance se neočekává zapamatovat si předchozí požadavek. Stav, na kterém zatížení funguje, je spravováno externím úložištěm stavů, jako je například Azure Table Storage nebo Azure Cosmos DB. V Service Fabric tento typ úlohy představuje bezstavovou službu. 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.

Role pracovního procesu do bezstavové služby

Webová role do bezstavové služby

Podobně jako role pracovního procesu představuje webová role také nestavové úlohy, takže je možné, že ji lze namapovat na nestavovou 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 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řevést 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í samoobslužného serveru nebo ASP.NET Core 1
ASP.NET Core 1 Yes

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

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řít naslouchací proces pro požadavky klientů
  • CreateServiceInstanceListener() pro bezstavové
  • CreateServiceReplicaListener() pro stav

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í při zahájení zpracování primární přepsání "spustit". Služby Service Fabric Services kombinují Run , Start a Stop do jediného vstupního bodu RunAsync . Vaše služba by měla začít pracovat RunAsync , když se spustí, a měla by přestat fungovat, když RunAsync je CancellationToken metoda signalizována.

Existuje několik klíčových rozdílů mezi životním cyklem a životností rolí pracovních procesů a Service Fabricch služeb:

  • Ž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ázán s virtuálním počítačem, což zahrnuje události při spuštění a zastavení virtuálního počítače. 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 pro dobu, kdy se virtuální počítač hostitele nebo počítač spouští a zastavuje, protože nesouvisí.
  • Doba života: Instance role pracovního procesu se recykluje, pokud se Run Metoda ukončí. RunAsyncMetoda ve službě Service Fabric může ale běžet až po dokončení a instance služby zůstane v provozu.

Service Fabric poskytuje volitelnou vstupní bod nastavení komunikace pro služby, které naslouchají požadavkům klientů. Vstupní bod RunAsync i komunikace jsou volitelné přepsání ve službě Service Fabric Services – vaše služba se může rozhodnout, že bude naslouchat pouze na požadavky klientů, nebo spustit pouze výpočetní smyčku, nebo oboje, což znamená, že metoda RunAsync je povolena, aniž by bylo nutné restartovat instanci služby, protože může nadále naslouchat žádostem klienta.

Rozhraní API a prostředí aplikace

Rozhraní Cloud Services API prostředí poskytuje informace a funkce pro aktuální instanci virtuálního počítače a také informace o ostatní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í ú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
Současná událost změny RoleEnvironment

Nastavení konfigurace

Nastavení konfigurace v Cloud Services jsou nastavena 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 dají se získat přímo prostřednictvím RoleEnvironment. V Service Fabric se nastavení aplikují jednotlivě na každou službu a na každou aplikaci, nikoli na virtuální počítač, protože virtuální počítač může hostovat několik 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é musí služba spustit.
  • Config: 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 a upgradován. Podobně jako u Cloud Services se k konfiguračnímu balíčku dá získat přístup prostřednictvím rozhraní API a události, které upozorní službu změny konfiguračního balíčku. Soubor Settings.xml lze použít pro konfiguraci klíč-hodnota a programový přístup podobně jako oddíl nastavení aplikace v App.config souboru. Na rozdíl od Cloud Services konfigurační balíček Service Fabric může obsahovat libovolné konfigurační soubory v libovolném formátu, ať už se jedná o soubor XML, JSON, YAML nebo vlastní binární formát.

Přístup ke konfiguraci

Cloud Services

K nastavení konfigurace z ServiceConfiguration. *. cscfg se dá dostat 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í jednotlivé konfigurační balíčky. Neexistuje žádný integrovaný mechanismus pro nastavení globálních konfigurací, který je 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 se hodnoty v Settings.xml mohou přepsat na úrovni aplikace, což umožňuje nastavení konfigurace na úrovni aplikace.

Konfigurační nastavení jsou přístupná v rámci jednotlivých instancí 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

RoleEnvironment.ChangedUdálost se používá k oznamování všech instancí rolí, když dojde ke změně v prostředí, jako je například změna konfigurace. Tato funkce se používá ke zpracová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ů v kódu služby, konfiguraci a dat – obsahuje události, které upozorňují na instance 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ů, každou samostatnou verzi a upgrade.

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í před spuštěním aplikace. Spouštěcí úloha se obvykle používá ke spouštění skriptů pro instalaci pomocí zvýšených oprávnění. Cloud Services i Service Fabric podporují spouštění úloh. Hlavním rozdílem je to, že v Cloud Services je úloha po spuštění vázaná na virtuální počítač, protože je součástí instance role, zatímco v Service Fabric úloha po spuštění je vázaná na službu, která není vázaná na žádný konkrétní virtuální počítač.

Service Fabric Cloud Services
Umístění konfigurace ServiceDefinition. csdef
Oprávnění "omezené" nebo "zvýšené"
Sekvencování "jednoduché", "pozadí", "popředí"

Cloud Services

V Cloud Services je pro každou roli v ServiceDefinition. csdef nakonfigurovaný vstupní bod spouštění.


<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 pro každou službu v ServiceManifest.xml nakonfigurovaný vstupní bod spouštění:


<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 se sadou Visual Studio se šablonami projektů a podporují ladění, konfiguraci a nasazení jak místně, tak i do Azure. Cloud Services i Service Fabric také poskytují prostředí místního prostředí pro vývoj. Rozdílem je to, že zatímco modul runtime vývoje cloudové služby emuluje prostředí Azure, na kterém běží, Service Fabric nepoužívá emulátor – používá kompletní Service Fabric runtime. Prostředí Service Fabric, které spustíte na místním vývojovém počítači, je stejné jako 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 Service Fabric aplikační architekturou, abyste pochopili, jak využít kompletní sadu Service Fabric funkcí.