Przewodnik dotyczący konwertowania ról sieci Web i procesu roboczego na usługi Service Fabric bezstanowych usług
W tym artykule opisano sposób migrowania ról sieci Web i procesu roboczego usług Cloud Services do usług bezstanowych usługi Service Fabric. Jest to najprostsza ścieżka migracji z usług Cloud Services do usługi Service Fabric dla aplikacji, których ogólna architektura pozostanie mniej więcej taka sama.
Projekt usługi w chmurze w projekcie aplikacji usługi Service Fabric
Projekt usługi w chmurze i projekt aplikacji usługi Service Fabric mają podobną strukturę, a obie reprezentują jednostkę wdrażania dla aplikacji — oznacza to, że każdy z nich definiuje kompletny pakiet wdrożony w celu uruchomienia aplikacji. Projekt usługi w chmurze zawiera co najmniej jedną rolę sieci Web lub procesu roboczego. Podobnie projekt aplikacji usługi Service Fabric zawiera co najmniej jedną usługę.
Różnica polega na tym, że projekt usługi w chmurze łączy wdrożenie aplikacji z wdrożeniem maszyny wirtualnej i w ten sposób zawiera w nim ustawienia konfiguracji maszyny wirtualnej, natomiast projekt aplikacji usługi Service Fabric definiuje tylko aplikację, która zostanie wdrożona w zestawie istniejących maszyn wirtualnych w klastrze usługi Service Fabric. Sam klaster usługi Service Fabric jest wdrażany tylko raz za pośrednictwem szablonu usługi Resource Manager lub witryny Azure Portal, a w niej można wdrożyć wiele aplikacji usługi Service Fabric.
Rola procesu roboczego do usługi bezstanowej
Koncepcyjnie rola procesu roboczego reprezentuje obciążenie bezstanowe, co oznacza, że każde wystąpienie obciążenia jest identyczne, a żądania mogą być kierowane do dowolnego wystąpienia w dowolnym momencie. Każde wystąpienie nie powinno pamiętać poprzedniego żądania. Stan, na którym działa obciążenie, jest zarządzany przez zewnętrzny magazyn stanów, taki jak Azure Table Storage lub Azure Cosmos DB. W usłudze Service Fabric ten typ obciążenia jest reprezentowany przez usługę bezstanową. Najprostszym podejściem do migrowania roli procesu roboczego do usługi Service Fabric może być przekonwertowanie kodu roli procesu roboczego na usługę bezstanową.
Rola sieci Web do usługi bezstanowej
Podobnie jak rola procesu roboczego, rola sieci Web reprezentuje również bezstanowe obciążenie, więc koncepcyjnie można go również zamapować na usługę bezstanową usługi Service Fabric. Jednak w przeciwieństwie do ról sieci Web usługa Service Fabric nie obsługuje usług IIS. Aby przeprowadzić migrację aplikacji internetowej z roli sieci Web do usługi bezstanowej, należy najpierw przejść do platformy sieci Web, która może być hostowana samodzielnie i nie zależy od usług IIS lub System.Web, takich jak ASP.NET Core 1.
Aplikacja | Obsługiwane | Ścieżka migracji |
---|---|---|
Formularze sieci Web ASP.NET | Nie. | Konwertowanie na ASP.NET Core 1 MVC |
ASP.NET MVC | Z migracją | Uaktualnianie do ASP.NET Core 1 MVC |
ASP.NET Web API | Z migracją | Używanie własnego serwera lub ASP.NET Core 1 |
ASP.NET Core 1 | Tak | Nie dotyczy |
Interfejs API punktu wejścia i cykl życia
Interfejsy API roli procesu roboczego i usługi Service Fabric oferują podobne punkty wejścia:
Punkt wejścia | Rola procesu roboczego | Usługa Service Fabric |
---|---|---|
Przetwarzanie | Run() |
RunAsync() |
Uruchamianie maszyny wirtualnej | OnStart() |
Nie dotyczy |
Zatrzymywanie maszyny wirtualnej | OnStop() |
Nie dotyczy |
Otwieranie odbiornika dla żądań klientów | Nie dotyczy |
|
Rola procesu roboczego
using Microsoft.WindowsAzure.ServiceRuntime;
namespace WorkerRole1
{
public class WorkerRole : RoleEntryPoint
{
public override void Run()
{
}
public override bool OnStart()
{
}
public override void OnStop()
{
}
}
}
Usługa bezstanowa usługi 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ą podstawowe przesłonięcia "Uruchom", w których należy rozpocząć przetwarzanie. Usługi Service Fabric łączą Run
wartości , Start
i Stop
w jeden punkt wejścia. RunAsync
Usługa powinna zacząć działać po RunAsync
uruchomieniu i powinna przestać działać po RunAsync
zasygnalizowanej metodzie CancellationToken.
Istnieje kilka kluczowych różnic między cyklem życia i okresem istnienia ról procesów roboczych a usługami Service Fabric:
- Cykl życia: największą różnicą jest to, że rola procesu roboczego jest maszyną wirtualną, dlatego jej cykl życia jest powiązany z maszyną wirtualną, która obejmuje zdarzenia dotyczące uruchamiania i zatrzymywania maszyny wirtualnej. Usługa Service Fabric ma cykl życia, który jest oddzielony od cyklu życia maszyny wirtualnej, więc nie obejmuje zdarzeń, gdy maszyna wirtualna hosta lub maszyna jest uruchamiana i zatrzymywana, ponieważ nie są powiązane.
- Okres istnienia: wystąpienie roli procesu roboczego będzie odtwarzane, jeśli
Run
metoda zakończy działanie. MetodaRunAsync
w usłudze Service Fabric może jednak zostać uruchomiona w celu ukończenia, a wystąpienie usługi pozostanie w górę.
Usługa Service Fabric udostępnia opcjonalny punkt wejścia konfiguracji komunikacji dla usług, które nasłuchują żądań klientów. Zarówno runAsync, jak i punkt wejścia komunikacji są opcjonalnymi przesłonięciami w usługach Service Fabric — usługa może wybrać tylko nasłuchiwanie żądań klientów lub uruchamianie pętli przetwarzania albo obu tych metod — dlatego metoda RunAsync może zakończyć działanie bez ponownego uruchamiania wystąpienia usługi, ponieważ może nadal nasłuchiwać żądań klientów.
Interfejs API aplikacji i środowisko
Interfejs API środowiska usług w chmurze zawiera informacje i funkcje dla bieżącego wystąpienia maszyny wirtualnej, a także informacje o innych wystąpieniach ról maszyn wirtualnych. Usługa Service Fabric udostępnia informacje dotyczące jego środowiska uruchomieniowego i niektóre informacje o węźle, w którym jest obecnie uruchomiona usługa.
Zadanie środowiska | Cloud Services | Service Fabric |
---|---|---|
Ustawienia konfiguracji i powiadomienie o zmianie | RoleEnvironment |
CodePackageActivationContext |
Magazyn lokalny | RoleEnvironment |
CodePackageActivationContext |
Informacje o punkcie końcowym | RoleInstance
|
|
Emulacja środowiska | RoleEnvironment.IsEmulated |
Nie dotyczy |
Jednoczesne zdarzenie zmiany | RoleEnvironment |
Nie dotyczy |
Ustawienia konfiguracji
Ustawienia konfiguracji w usługach Cloud Services są ustawiane dla roli maszyny wirtualnej i mają zastosowanie do wszystkich wystąpień tej roli maszyny wirtualnej. Te ustawienia są parami klucz-wartość ustawioną w plikach ServiceConfiguration.*.cscfg i można uzyskać do nich dostęp bezpośrednio za pośrednictwem elementu RoleEnvironment. W usłudze Service Fabric ustawienia mają zastosowanie indywidualnie do każdej usługi i do każdej aplikacji, a nie do maszyny wirtualnej, ponieważ maszyna wirtualna może hostować wiele usług i aplikacji. Usługa składa się z trzech pakietów:
- Kod: zawiera pliki wykonywalne usługi, pliki binarne, biblioteki DLL i inne pliki, które należy uruchomić przez usługę.
- Konfiguracja: wszystkie pliki konfiguracji i ustawienia usługi.
- Dane: pliki danych statycznych skojarzone z usługą.
Każdy z tych pakietów może być niezależnie wersjonowany i uaktualniany. Podobnie jak w przypadku usług Cloud Services dostęp do pakietu konfiguracji można uzyskać programowo za pośrednictwem interfejsu API, a zdarzenia są dostępne w celu powiadamiania usługi o zmianie pakietu konfiguracji. Plik Settings.xml może służyć do konfiguracji klucz-wartość i dostępu programowego podobnego do sekcji ustawienia aplikacji pliku App.config. Jednak w przeciwieństwie do usług Cloud Services pakiet konfiguracji usługi Service Fabric może zawierać dowolne pliki konfiguracji w dowolnym formacie, niezależnie od tego, czy jest to PLIK XML, JSON, YAML, czy niestandardowy format binarny.
Uzyskiwanie dostępu do konfiguracji
Cloud Services
Dostęp do ustawień konfiguracji z pliku ServiceConfiguration.*.cscfg można uzyskać za pośrednictwem polecenia RoleEnvironment
. Te ustawienia są globalnie dostępne dla wszystkich wystąpień ról w tym samym wdrożeniu usługi w chmurze.
string value = RoleEnvironment.GetConfigurationSettingValue("Key");
Service Fabric
Każda usługa ma własny indywidualny pakiet konfiguracji. Nie ma wbudowanego mechanizmu globalnych ustawień konfiguracji dostępnych dla wszystkich aplikacji w klastrze. W przypadku używania specjalnego pliku konfiguracji Settings.xml usługi Service Fabric w pakiecie konfiguracyjnym wartości w Settings.xml można zastąpić na poziomie aplikacji, dzięki czemu możliwe są ustawienia konfiguracji na poziomie aplikacji.
Ustawienia konfiguracji są dostępne w każdym wystąpieniu usługi za pośrednictwem usługi 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());
}
Zdarzenia aktualizacji konfiguracji
Cloud Services
Zdarzenie RoleEnvironment.Changed
jest używane do powiadamiania wszystkich wystąpień roli, gdy w środowisku wystąpi zmiana, taka jak zmiana konfiguracji. Służy do korzystania z aktualizacji konfiguracji bez odtwarzania wystąpień roli lub ponownego uruchamiania procesu roboczego.
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żdy z trzech typów pakietów w usłudze — kod, konfiguracja i dane — mają zdarzenia, które powiadamiają wystąpienie usługi o zaktualizowaniu, dodaniu lub usunięciu pakietu. Usługa może zawierać wiele pakietów każdego typu. Na przykład usługa może mieć wiele pakietów konfiguracji, z których każda jest indywidualnie wersjonowana i uaktualnialna.
Te zdarzenia są dostępne do korzystania ze zmian w pakietach usług bez ponownego uruchamiania wystąpienia usługi.
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);
}
Zadania uruchamiania
Zadania uruchamiania to akcje wykonywane przed uruchomieniem aplikacji. Zadanie uruchamiania jest zwykle używane do uruchamiania skryptów konfiguracji przy użyciu podwyższonych uprawnień. Usługi w chmurze i usługa Service Fabric obsługują zadania uruchamiania. Główną różnicą jest to, że w usługach Cloud Services zadanie uruchamiania jest powiązane z maszyną wirtualną, ponieważ jest częścią wystąpienia roli, podczas gdy w usłudze Service Fabric zadanie uruchamiania jest powiązane z usługą, która nie jest powiązana z żadną konkretną maszyną wirtualną.
Service Fabric | Cloud Services |
---|---|
Lokalizacja konfiguracji | ServiceDefinition.csdef |
Uprawnienia | "ograniczone" lub "podwyższony poziom" |
Harmonogram | "simple", "background", "foreground" |
Cloud Services
W usługach Cloud Services punkt wejścia uruchamiania jest skonfigurowany dla każdej roli w pliku 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
W usłudze Service Fabric punkt wejścia uruchamiania jest skonfigurowany dla każdej usługi w ServiceManifest.xml:
<ServiceManifest>
<CodePackage Name="Code" Version="1.0.0">
<SetupEntryPoint>
<ExeHost>
<Program>Startup.bat</Program>
</ExeHost>
</SetupEntryPoint>
...
</ServiceManifest>
Uwaga dotycząca środowiska deweloperskiego
Usługi w chmurze i usługa Service Fabric są zintegrowane z programem Visual Studio z szablonami projektów i obsługą debugowania, konfigurowania i wdrażania zarówno lokalnie, jak i na platformie Azure. Usługi w chmurze i usługa Service Fabric zapewniają również lokalne środowisko uruchomieniowe programowania. Różnica polega na tym, że podczas gdy środowisko uruchomieniowe programowania usługi w chmurze emuluje środowisko platformy Azure, na którym działa, usługa Service Fabric nie używa emulatora — używa kompletnego środowiska uruchomieniowego usługi Service Fabric. Środowisko usługi Service Fabric uruchomione na lokalnej maszynie programistycznej jest tym samym środowiskiem, które działa w środowisku produkcyjnym.
Następne kroki
Dowiedz się więcej na temat usług Service Fabric Reliable Services i podstawowych różnic między usługami Cloud Services i architekturą aplikacji usługi Service Fabric, aby dowiedzieć się, jak korzystać z pełnego zestawu funkcji usługi Service Fabric.