Bagikan melalui


Panduan untuk mengonversi Peran Web dan Pekerja ke layanan stateless Service Fabric

Artikel ini menjelaskan cara memigrasikan Peran Web dan Pekerja Cloud Services ke layanan stateless Service Fabric. Ini adalah jalur migrasi paling sederhana dari Cloud Services ke Service Fabric untuk aplikasi dengan arsitektur keseluruhan yang tetap kurang lebih sama.

Proyek Cloud Service ke proyek aplikasi Service Fabric

Proyek Cloud Services dan proyek Aplikasi Service Fabric memiliki struktur yang sama dan keduanya merepresentasikan unit penyebaran untuk aplikasi Anda - yaitu, keduanya menentukan paket lengkap yang disebarkan untuk menjalankan aplikasi Anda. Proyek Cloud Service berisi satu atau beberapa Peran Web atau Pekerja. Demikian pula, proyek Aplikasi Service Fabric memuat satu atau beberapa layanan.

Perbedaannya adalah proyek Cloud Service menggandakan penyebaran aplikasi dengan penyebaran VM dan, dengan demikian, berisi pengaturan konfigurasi VM, sedangkan proyek Aplikasi Service Fabric hanya menentukan aplikasi yang akan disebarkan ke suatu set VM yang ada dalam kluster Service Fabric. Kluster Service Fabric sendiri hanya disebarkan sekali, baik melalui templat Resource Manager atau melalui portal Microsoft Azure, dan beberapa aplikasi Service Fabric dapat diterapkan padanya.

Perbandingan proyek Service Fabric dan Cloud Services

Peran Pekerja dibanding layanan stateless

Secara konsep, Peran Pekerja merepresentasikan beban kerja stateless, yang berarti setiap instans beban kerja identik dan permintaan dapat dirutekan ke instans apa pun kapan saja. Setiap instans tidak diharapkan untuk mengingat permintaan sebelumnya. Status yang dijalankan beban kerja dikelola oleh penyimpanan status eksternal, seperti Azure Table Storage atau Azure Cosmos DB. Dalam Service Fabric, jenis beban kerja ini direpresentasikan oleh Layanan Stateless. Pendekatan paling sederhana untuk memigrasikan Peran Pekerja ke Service Fabric dapat dilakukan dengan mengonversi kode Peran Pekerja ke Layanan Stateless.

Peran Pekerja dibanding Layanan Stateless

Peran Web dibanding layanan stateless

Mirip dengan Peran Pekerja, Peran Web juga merepresentasikan beban kerja stateless, dan secara konsep juga dapat dipetakan ke layanan stateless Service Fabric. Namun, tidak seperti Peran Web, Service Fabric tidak mendukung IIS. Migrasi aplikasi web dari Peran Web ke layanan stateless memerlukan pemindahan ke kerangka web yang dapat dihosting sendiri terlebih dulu dan tidak bergantung pada IIS atau System.Web, seperti ASP.NET Core 1.

Aplikasi Didukung Jalur migrasi
ASP.NET Web Form Tidak Konversi ke ASP.NET Core 1 MVC
ASP.NET MVC Dengan Migrasi Tingkatkan ke ASP.NET Core 1 MVC
API Web ASP.NET Dengan Migrasi Gunakan server yang dihosting sendiri atau ASP.NET Core 1
ASP.NET Core 1 Ya T/A

API titik entri dan siklus hidup

API layanan Peran pekerja dan Service Fabric menawarkan titik entri yang serupa:

Titik Entri Peran Pekerja Layanan Service Fabric
Pemrosesan Run() RunAsync()
VM mulai OnStart() T/A
VM berhenti OnStop() T/A
Buka listener untuk permintaan klien T/A
  • CreateServiceInstanceListener() untuk stateless
  • CreateServiceReplicaListener() untuk stateful

Peran Pekerja


using Microsoft.WindowsAzure.ServiceRuntime;

namespace WorkerRole1
{
    public class WorkerRole : RoleEntryPoint
    {
        public override void Run()
        {
        }

        public override bool OnStart()
        {
        }

        public override void OnStop()
        {
        }
    }
}

Layanan Stateless 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)
        {
        }
    }
}

Keduanya mengambil alih "Jalankan" utama untuk memulai pemrosesan. Layanan Service Fabric menggabungkan Run, Start, dan Stop ke dalam satu titik entri, RunAsync. Layanan Anda harus mulai beroperasi ketika RunAsync dimulai, dan harus berhenti beroperasi ketika CancellationToken metode RunAsync diberi tanda.

Ada beberapa perbedaan utama antara siklus hidup dan masa pakai Peran Pekerja dan layanan Service Fabric:

  • Siklus hidup: Perbedaan terbesar adalah Peran Pekerja adalah VM sehingga siklus hidupnya terkait dengan VM yang mencakup peristiwa ketika VM dimulai dan berhenti. Layanan Service Fabric memiliki siklus hidup yang terpisah dari siklus hidup VM, sehingga tidak termasuk peristiwa ketika VM host atau komputer dimulai dan berhenti, karena ini tidak terkait.
  • Seumur hidup: Instans Peran Pekerja akan didaur ulang jika metode Run keluar. Namun, metode RunAsync dalam layanan Service Fabric dapat berjalan hingga selesai dan instans layanan akan tetap berjalan.

Service Fabric menyediakan titik entri penyiapan komunikasi opsional untuk layanan yang mendengarkan permintaan klien. Baik RunAsync dan titik entri komunikasi adalah pengambilalihan opsional dalam layanan Service Fabric - layanan Anda dapat memilih untuk hanya mendengarkan permintaan klien, atau hanya menjalankan loop pemrosesan, atau keduanya - itulah sebabnya metode RunAsync diizinkan untuk keluar tanpa memulai ulang instans layanan karena dapat terus mendengarkan permintaan klien.

API aplikasi dan lingkungan

API lingkungan Cloud Services menyediakan informasi dan fungsionalitas untuk instans VM saat ini serta informasi tentang instans peran VM lainnya. Service Fabric menyediakan informasi yang terkait dengan runtime-nya dan beberapa informasi tentang node yang sedang dijalankan layanan.

Tugas Lingkungan Cloud Services Service Fabric
Pengaturan Konfigurasi dan pemberitahuan perubahan RoleEnvironment CodePackageActivationContext
Penyimpanan Lokal RoleEnvironment CodePackageActivationContext
Informasi Titik Akhir RoleInstance
  • Instans saat ini: RoleEnvironment.CurrentRoleInstance
  • Peran dan instans lain: RoleEnvironment.Roles
  • NodeContext untuk alamat Node saat ini
  • FabricClient dan ServicePartitionResolver untuk penemuan titik akhir layanan
Emulasi Lingkungan RoleEnvironment.IsEmulated T/A
Acara perubahan simultan RoleEnvironment T/A

Pengaturan konfigurasi

Pengaturan konfigurasi di Cloud Services diatur untuk peran VM dan berlaku untuk semua contoh peran VM tersebut. Pengaturan ini adalah set key-nilai yang diatur dalam file ServiceConfiguration.*.cscfg dan dapat diakses langsung melalui RoleEnvironment. Dalam Service Fabric, pengaturan berlaku secara individual untuk setiap layanan dan untuk setiap aplikasi, bukan ke VM, karena VM dapat meng-host beberapa layanan dan aplikasi. Layanan terdiri dari tiga paket:

  • Kode: memuat executable layanan, biner, DLL, dan file lain yang perlu dijalankan layanan.
  • Config: semua file dan pengaturan konfigurasi untuk layanan.
  • Data: file data statis yang terkait dengan layanan.

Masing-masing paket ini dapat dibuat versinya dan ditingkatkan secara independen. Mirip dengan Cloud Services, paket config dapat diakses secara terprogram melalui API dan peristiwa tersedia untuk memberi tahu layanan tentang perubahan paket config. File Settings.xml dapat digunakan untuk konfigurasi key-nilai dan akses terprogram yang mirip dengan bagian pengaturan aplikasi dari file App.config baru. Namun, tidak seperti Cloud Services, paket config Service Fabric dapat memuat file konfigurasi apa pun dalam format apa pun, baik itu XML, JSON, YAML, atau format biner kustom.

Mengakses konfigurasi

Cloud Services

Pengaturan konfigurasi dari ServiceConfiguration.*.cscfg dapat diakses melalui RoleEnvironment. Pengaturan ini tersedia secara global untuk semua instans peran dalam penyebaran Cloud Services yang sama.


string value = RoleEnvironment.GetConfigurationSettingValue("Key");

Service Fabric

Setiap layanan memiliki paket konfigurasi masing-masing. Tidak ada mekanisme bawaan untuk pengaturan konfigurasi global yang dapat diakses oleh semua aplikasi dalam kluster. Saat menggunakan file konfigurasi Settings.xml khusus Service Fabric dalam paket konfigurasi, nilai dalam Settings.xml dapat ditimpa pada tingkat aplikasi sehingga memungkinkan pengaturan konfigurasi tingkat aplikasi.

Pengaturan konfigurasi adalah akses dalam setiap instans layanan melalui layanan 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());
}

Peristiwa pembaruan konfigurasi

Cloud Services

Peristiwa RoleEnvironment.Changed ini digunakan untuk memberi tahu semua instans peran saat perubahan terjadi di lingkungan, seperti perubahan konfigurasi. Ini digunakan untuk menggunakan pembaruan konfigurasi tanpa mendaur ulang instans peran atau memulai ulang proses pekerja.


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

Masing-masing dari tiga jenis paket dalam layanan - Kode, Config, dan Data - memiliki peristiwa yang memberi tahu instans layanan saat paket diperbarui, ditambahkan, atau dihapus. Layanan dapat berisi beberapa paket dari setiap jenis. Misalnya, layanan mungkin memiliki beberapa paket config, masing-masing versi individual dan dapat ditingkatkan.

Peristiwa ini dapat digunakan untuk menggunakan perubahan dalam paket layanan tanpa memulai ulang instans layanan.


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);
}

Tugas startup

Tugas startup adalah tindakan yang diambil sebelum aplikasi dimulai. Tugas startup biasanya digunakan untuk menjalankan skrip penyiapan menggunakan hak istimewa yang ditingkatkan. Cloud Services dan Service Fabric mendukung tugas startup. Perbedaan utamanya adalah di Cloud Services, tugas startup terkait dengan VM karena merupakan bagian dari contoh peran, sedangkan dalam Service Fabric, tugas startup terkait dengan layanan yang tidak terkait dengan VM tertentu.

Service Fabric Cloud Services
Lokasi Konfigurasi ServiceDefinition.csdef
Hak Istimewa "terbatas" atau "ditingkatkan"
Pengurutan "sederhana", "latar belakang", "latar depan"

Cloud Services

Di Cloud Services, titik entri permulaan dikonfigurasi per peran di 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

Di Service Fabric, titik masuk startup dikonfigurasi per layanan di ServiceManifest.xml:


<ServiceManifest>
  <CodePackage Name="Code" Version="1.0.0">
    <SetupEntryPoint>
      <ExeHost>
        <Program>Startup.bat</Program>
      </ExeHost>
    </SetupEntryPoint>
    ...
</ServiceManifest>

Catatan tentang lingkungan pengembangan

Cloud Services dan Service Fabric terintegrasi dengan Visual Studio dengan templat proyek dan dukungan untuk debugging, konfigurasi, dan penyebaran, baik secara lokal maupun ke Azure. Cloud Services dan Service Fabric juga menyediakan lingkungan runtime pengembangan lokal. Perbedaannya adalah sekalipun runtime pengembangan Cloud Services meniru lingkungan Azure tempatnya dijalankan, Service Fabric tidak menggunakan emulator - Service Fabric menggunakan runtime Service Fabric lengkap. Lingkungan Service Fabric yang Anda jalankan pada komputer pengembangan lokal Anda adalah lingkungan yang sama yang berjalan dalam produksi.

Langkah berikutnya

Baca lebih lanjut tentang Reliable Services Service Fabric dan perbedaan mendasar antara Cloud Services dan arsitektur aplikasi Service Fabric untuk memahami cara memanfaatkan set fitur Service Fabric lengkap.