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çıklanır. Bu, genel mimarisi kabaca aynı kalacak uygulamalar için Cloud Services'den Service Fabric'e en basit geçiş yoludur.

Cloud Service projesi ile Service Fabric uygulama projesi

Bulut Hizmeti projesi ve Service Fabric Uygulaması projesi benzer bir yapıya sahiptir ve her ikisi de uygulamanızın dağıtım birimini temsil eder; diğer bir ifadeyle, 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, Bulut Hizmeti projesinin uygulama dağıtımını bir VM dağıtımıyla birleştirmesi ve bu nedenle içinde VM yapılandırma ayarlarını içermesi, Service Fabric Uygulaması projesinin ise yalnızca Service Fabric kümesindeki mevcut VM'lere dağıtılacak bir uygulamayı tanımlamasıdır. Service Fabric kümesinin kendisi bir Resource Manager şablonu veya Azure portal aracılığıyla yalnızca bir kez dağıtılır ve buna birden çok Service Fabric uygulaması dağıtılabilir.

Service Fabric ve Cloud Services proje karşılaştırması

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ı beklenmez. İş 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 Çalışan Rolü

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. Web uygulamasını bir Web Rolünden durum bilgisi olmayan bir hizmete geçirmek için önce şirket içinde barındırılabilir ve IIS veya System.Web'e bağımlı olmayan bir web çerçevesine (örneğin, ASP.NET Core 1) geçmeniz gerekir.

Uygulama Desteklenir Geçiş yolu
ASP.NET Web Forms Hayır ASP.NET Core 1 MVC'ye dönüştür
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 sunucu veya ASP.NET Core 1 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:

Girdi Noktası Çalışan Rolü Service Fabric hizmeti
İşleniyor Run() RunAsync()
VM başlatma OnStart() Yok
VM durdurma OnStop() Yok
İstemci istekleri için dinleyiciyi açma Yok
  • CreateServiceInstanceListener() durum bilgisi olmayanlar için
  • CreateServiceReplicaListener() durum bilgisi olan için

Ç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 ikisinin de işlemeye başlayacağı birincil bir "Çalıştır" geçersiz kılması vardır. Service Fabric hizmetleri , ve Stop 'yi tek bir giriş noktası RunAsyncolarak birleştirirRun. Start Hizmetiniz başlatıldığında çalışmaya RunAsync başlamalı ve yöntemin RunAsync CancellationToken'i işaretlendiğinde çalışmayı durdurmalıdır.

Çalışan Rolleri ve Service Fabric hizmetlerinin yaşam döngüsü ile 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 ve bu da VM'nin başlatılıp durdurulmasıyla ilgili olayları içerir. Service Fabric hizmeti, VM yaşam döngüsünden ayrı bir yaşam döngüsüne sahiptir, bu nedenle ilgili olmadığından konak VM'nin veya makinenin ne zaman başlatılıp durdurulduğuna ilişkin olayları içermez.
  • Ömür boyu: Yöntemden çıkılırsa Run Çalışan Rolü örneği geri dönüştürülecektir. RunAsync Ancak Service Fabric hizmetindeki yöntemi 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 ikisini birden çalıştırmayı 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'sinde, geçerli VM örneği için bilgi ve işlevselliğin yanı sıra diğer VM rol örnekleriyle ilgili bilgiler sağlanır. 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
  • Geçerli örnek: RoleEnvironment.CurrentRoleInstance
  • Diğer roller ve örnek: RoleEnvironment.Roles
  • NodeContext geçerli Düğüm adresi için
  • FabricClient ve ServicePartitionResolver hizmet uç noktası bulma için
Ortam Öykünmesi RoleEnvironment.IsEmulated Yok
Eşzamanlı değişiklik olayı RoleEnvironment Yok

Yapılandırma ayarları

Cloud Services 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. Service Fabric'te, bir VM birden çok hizmet ve uygulama barındırabildiğinden, 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 hizmetin çalıştırması gereken diğer dosyaları içerir.
  • Yapılandırma: Bir hizmetin 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 benzer şekilde, bir yapılandırma paketine bir 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 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 RoleEnvironmenterişilebilir. Bu ayarlar, aynı Bulut Hizmeti dağıtımındaki tüm rol örnekleri tarafından 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ını bir yapılandırma paketi içinde kullanı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 CodePackageActivationContexteriş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 (Kod, Yapılandırma ve Veriler) 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 dönüştürülen ve yükseltilebilen 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şlatılmadan ö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şlangıç görevlerini destekler. Temel fark, Cloud Services 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
Ayrıcalıklar "sınırlı" veya "yükseltilmiş"
Sıralama "simple", "background", "foreground"

Cloud Services

Cloud Services serviceDefinition.csdef dosyasında 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'de 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 ortamda hem de Azure'da hata ayıklama, yapılandırma ve dağıtma desteği sağlar. 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; service Fabric çalışma zamanının tamamı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 yararlanacaklarını 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.