Web ve Çalışan Rollerini Service Fabric durum bilgisi olmayan hizmetlere dönüştürme kılavuzu
Bu makalede, Cloud Services Web ve Çalışan Rollerinizi Service Fabric durum bilgisi olmayan hizmetlere geçirme işlemi açıklanmaktadır. Bu, genel mimarisi kabaca aynı kalacak uygulamalar için Cloud Services'ten Service Fabric'e en basit geçiş yoludur.
Cloud Service projesi-Service Fabric uygulama projesi
Cloud Service projesi ve Service Fabric Uygulaması projesi benzer bir yapıya sahiptir ve her ikisi de uygulamanızın dağıtım birimini temsil eder; yani her biri uygulamanızı çalıştırmak için dağıtılan paketin tamamını tanımlar. Bulut Hizmeti projesi bir veya daha fazla Web veya Çalışan Rolü içerir. Benzer şekilde, bir Service Fabric Uygulaması projesi bir veya daha fazla hizmet içerir.
Aradaki fark, Cloud Service projesinin uygulama dağıtımını bir VM dağıtımıyla birleştirmesi ve bu nedenle içinde VM yapılandırma ayarları içermesidir; Service Fabric Uygulaması projesi ise yalnızca Service Fabric kümesindeki mevcut VM'ler kümesine dağıtılacak bir uygulamayı tanımlar. Service Fabric kümesinin kendisi bir Resource Manager şablonu veya Azure portalı aracılığıyla yalnızca bir kez dağıtılır ve bu şablona birden çok Service Fabric uygulaması dağıtılabilir.
Durum bilgisi olmayan hizmete Çalışan Rolü
Kavramsal olarak, Çalışan Rolü durum bilgisi olmayan bir iş yükünü temsil eder, yani iş yükünün her örneği aynıdır ve istekler herhangi bir zamanda herhangi bir örneğe yönlendirilebilir. Her örneğin önceki isteği hatırlaması beklenmemektedir. İş yükünün üzerinde çalıştığı durum, Azure Tablo Depolama veya Azure Cosmos DB gibi bir dış durum deposu tarafından yönetilir. Service Fabric'te bu iş yükü türü Durum Bilgisi Olmayan Bir Hizmet tarafından temsil edilir. Çalışan Rolünü Service Fabric'e geçirmek için en basit yaklaşım, Çalışan Rolü kodunu Durum Bilgisi Olmayan Bir Hizmete dönüştürerek gerçekleştirilebilir.
Durum bilgisi olmayan hizmete Web Rolü
Çalışan Rolüne benzer şekilde, Web Rolü de durum bilgisi olmayan bir iş yükünü temsil eder ve kavramsal olarak da Service Fabric durum bilgisi olmayan bir hizmete eşlenebilir. Ancak, Web Rollerinin aksine Service Fabric IIS'yi desteklemez. Bir web uygulamasını Web Rolü'nden durum bilgisi olmayan bir hizmete geçirmek için önce şirket içinde barındırılabilen ve IIS veya System.Web'e bağımlı olmayan bir web çerçevesine (örneğin, ASP.NET Core 1) geçmeniz gerekir.
Uygulama | Destekleniyor | Geçiş yolu |
---|---|---|
ASP.NET Web Forms | Hayır | ASP.NET Core 1 MVC'ye dönüştürme |
ASP.NET MVC | Geçiş ile | ASP.NET Core 1 MVC'ye yükseltme |
ASP.NET Web API | Geçiş ile | Şirket içinde barındırılan sunucuyu veya ASP.NET Core 1'i kullanma |
ASP.NET Core 1 | Yes | Yok |
Giriş noktası API'si ve yaşam döngüsü
Çalışan Rolü ve Service Fabric hizmet API'leri benzer giriş noktaları sunar:
Giriş Noktası | Çalışan Rolü | Service Fabric hizmeti |
---|---|---|
İşleme | Run() |
RunAsync() |
VM başlatma | OnStart() |
Yok |
VM durdurma | OnStop() |
Yok |
İstemci istekleri için dinleyiciyi açma | Yok |
|
Çalışan Rolü
using Microsoft.WindowsAzure.ServiceRuntime;
namespace WorkerRole1
{
public class WorkerRole : RoleEntryPoint
{
public override void Run()
{
}
public override bool OnStart()
{
}
public override void OnStop()
{
}
}
}
Service Fabric Durum Bilgisi Olmayan Hizmet
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)
{
}
}
}
her ikisinde de işlemenin başlatıldığı birincil bir "Çalıştır" geçersiz kılması vardır. Service Fabric hizmetleri , Start
ve Stop
'yi tek bir giriş noktası olarak RunAsync
birleştirirRun
. Hizmetiniz başlatıldığında çalışmaya RunAsync
başlamalı ve yöntemin RunAsync
CancellationToken değeri işaretlendiğinde çalışmayı durdurmalıdır.
Çalışan Rolleri ve Service Fabric hizmetlerinin yaşam döngüsü ve yaşam süresi arasında birkaç önemli fark vardır:
- Yaşam Döngüsü: En büyük fark, Çalışan Rolünün bir VM olması ve bu nedenle yaşam döngüsünün VM'ye bağlı olmasıdır. Bu, VM'nin ne zaman başlatıldığına ve durduğuna ilişkin olayları içerir. Service Fabric hizmetinin VM yaşam döngüsünden ayrı bir yaşam döngüsü vardır, bu nedenle ilgili olmadığından konak VM veya makinenin ne zaman başlatılıp durdurulduğuna ilişkin olayları içermez.
- Yaşam süresi: Yöntemden çıkılırsa
Run
Çalışan Rolü örneği geri dönüştürülecektir.RunAsync
Ancak Service Fabric hizmetindeki yöntem tamamlanmak üzere çalıştırılabilir ve hizmet örneği çalışır durumda kalır.
Service Fabric, istemci isteklerini dinleyen hizmetler için isteğe bağlı bir iletişim kurulumu giriş noktası sağlar. Hem RunAsync hem de iletişim giriş noktası Service Fabric hizmetlerindeki isteğe bağlı geçersiz kılmalardır. Hizmetiniz yalnızca istemci isteklerini dinlemeyi veya yalnızca bir işlem döngüsü çalıştırmayı veya her ikisini birden yapmayı seçebilir. Bu nedenle RunAsync yönteminin hizmet örneğini yeniden başlatmadan çıkışına izin verilir çünkü istemci isteklerini dinlemeye devam edebilir.
Uygulama API'si ve ortamı
Cloud Services ortam API'si, geçerli VM örneği için bilgi ve işlevselliğin yanı sıra diğer VM rol örnekleri hakkında bilgi sağlar. Service Fabric, çalışma zamanıyla ilgili bilgiler ve bir hizmetin çalışmakta olduğu düğüm hakkında bazı bilgiler sağlar.
Ortam Görevi | Bulut Hizmetleri | Service Fabric |
---|---|---|
Yapılandırma Ayarları ve değişiklik bildirimi | RoleEnvironment |
CodePackageActivationContext |
Yerel Depolama | RoleEnvironment |
CodePackageActivationContext |
Uç Nokta Bilgileri | RoleInstance
|
|
Ortam Öykünmesi | RoleEnvironment.IsEmulated |
Yok |
Eşzamanlı değişiklik olayı | RoleEnvironment |
Yok |
Yapılandırma ayarları
Cloud Services'daki yapılandırma ayarları bir VM rolü için ayarlanır ve bu VM rolünün tüm örneklerine uygulanır. Bu ayarlar ServiceConfiguration.*.cscfg dosyalarında ayarlanan anahtar-değer çiftleridir ve roleEnvironment üzerinden doğrudan erişilebilir. Bir VM birden çok hizmet ve uygulama barındırabildiğinden, Service Fabric'te ayarlar vm yerine her hizmete ve her uygulamaya ayrı ayrı uygulanır. Bir hizmet üç paketlerden oluşur:
- Kod: Hizmet yürütülebilir dosyalarını, ikili dosyaları, DLL'leri ve bir hizmetin çalıştırması gereken diğer dosyaları içerir.
- Yapılandırma: Bir hizmet için tüm yapılandırma dosyaları ve ayarları.
- Veri: hizmetle ilişkili statik veri dosyaları.
Bu paketlerin her biri bağımsız olarak sürüm oluşturulabilir ve yükseltilebilir. Cloud Services'a benzer şekilde, bir yapılandırma paketine api aracılığıyla program aracılığıyla erişilebilir ve yapılandırma paketi değişikliğini hizmete bildirmek için olaylar kullanılabilir. Settings.xml dosyası, App.config dosyasının uygulama ayarları bölümüne benzer şekilde anahtar-değer yapılandırması ve programlı erişim için kullanılabilir. Ancak Cloud Services'in aksine Service Fabric yapılandırma paketi, XML, JSON, YAML veya özel ikili biçimi olsun, herhangi bir biçimdeki tüm yapılandırma dosyalarını içerebilir.
Yapılandırmaya erişme
Cloud Services
ServiceConfiguration.*.cscfg'den yapılandırma ayarlarına aracılığıyla RoleEnvironment
erişilebilir. Bu ayarlar, aynı Bulut Hizmeti dağıtımındaki tüm rol örnekleri için genel olarak kullanılabilir.
string value = RoleEnvironment.GetConfigurationSettingValue("Key");
Service Fabric
Her hizmetin kendi ayrı yapılandırma paketi vardır. Kümedeki tüm uygulamalar tarafından erişilebilen genel yapılandırma ayarları için yerleşik bir mekanizma yoktur. Service Fabric'in özel Settings.xml yapılandırma dosyası bir yapılandırma paketi içinde kullanılırken, Settings.xml içindeki değerlerin üzerine uygulama düzeyinde yazılabilir ve bu da uygulama düzeyi yapılandırma ayarlarını mümkün hale getirir.
Yapılandırma ayarları, hizmetin aracılığıyla her hizmet örneğindeki CodePackageActivationContext
erişimlerdir.
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());
}
Yapılandırma güncelleştirme olayları
Cloud Services
Olay RoleEnvironment.Changed
, bir yapılandırma değişikliği gibi ortamda bir değişiklik gerçekleştiğinde tüm rol örneklerini bilgilendirmek için kullanılır. Bu, rol örneklerini geri dönüştürmeden veya bir çalışan işlemini yeniden başlatmadan yapılandırma güncelleştirmelerini kullanmak için kullanılır.
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
Bir hizmetteki üç paket türünün her biri (Code, Config ve Data) bir paket güncelleştirildiğinde, eklendiğinde veya kaldırıldığında hizmet örneğine bildirimde bulunan olaylara sahiptir. Bir hizmet her türden birden çok paket içerebilir. Örneğin, bir hizmetin her biri tek tek sürüme yükseltilmiş ve yükseltilebilir birden çok yapılandırma paketi olabilir.
Bu olaylar hizmet örneğini yeniden başlatmadan hizmet paketlerindeki değişiklikleri kullanmak için kullanılabilir.
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);
}
Başlangıç görevleri
Başlangıç görevleri, bir uygulama başlamadan önce kullanılabilecek eylemlerdir. Başlangıç görevi genellikle yükseltilmiş ayrıcalıkları kullanarak kurulum betiklerini çalıştırmak için kullanılır. Hem Cloud Services hem de Service Fabric başlatma görevlerini destekler. Temel fark, Cloud Services'te bir başlangıç görevinin bir rol örneğinin parçası olduğu için VM'ye bağlı olması, Service Fabric'te ise başlangıç görevinin belirli bir VM'ye bağlı olmayan bir hizmete bağlı olmasıdır.
Service Fabric | Cloud Services |
---|---|
Yapılandırma konumu | ServiceDefinition.csdef |
Öncelikler | "sınırlı" veya "yükseltilmiş" |
Sıralama | "simple", "background", "foreground" |
Cloud Services
Cloud Services'te ServiceDefinition.csdef içindeki rol başına bir başlangıç giriş noktası yapılandırılır.
<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
Service Fabric'te, ServiceManifest.xml'da hizmet başına bir başlangıç giriş noktası yapılandırılır:
<ServiceManifest>
<CodePackage Name="Code" Version="1.0.0">
<SetupEntryPoint>
<ExeHost>
<Program>Startup.bat</Program>
</ExeHost>
</SetupEntryPoint>
...
</ServiceManifest>
Geliştirme ortamı hakkında bir not
Hem Cloud Services hem de Service Fabric proje şablonlarıyla Visual Studio ile tümleşiktir ve hem yerel olarak hem de Azure'a hata ayıklama, yapılandırma ve dağıtma desteği sunar. Hem Cloud Services hem de Service Fabric yerel bir geliştirme çalışma zamanı ortamı sağlar. Aradaki fark, Bulut Hizmeti geliştirme çalışma zamanı üzerinde çalıştığı Azure ortamına öykünürken Service Fabric'in öykünücü kullanmamasıdır; tam Service Fabric çalışma zamanını kullanır. Yerel geliştirme makinenizde çalıştırdığınız Service Fabric ortamı, üretimde çalışan ortamla aynıdır.
Sonraki adımlar
Tüm Service Fabric özelliklerinden nasıl yararlanabileceğinizi anlamak için Service Fabric Reliable Services ve Cloud Services ile Service Fabric uygulama mimarisi arasındaki temel farklar hakkında daha fazla bilgi edinin.