Aracılığıyla paylaş


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.

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ı 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 Ç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. 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
  • 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 ikisinde de işlemenin başlatıldığı birincil bir "Çalıştır" geçersiz kılması vardır. Service Fabric hizmetleri , Startve Stop 'yi tek bir giriş noktası olarak RunAsyncbirleş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
  • Geçerli örnek: RoleEnvironment.CurrentRoleInstance
  • Diğer roller ve örnekler: 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'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 RoleEnvironmenteriş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 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 (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.