Bagikan melalui


Aplikasi Service Fabric dan manifes layanan

Artikel ini menjelaskan cara aplikasi dan layanan Service Fabric didefinisikan dan dibuat versinya menggunakan ApplicationManifest.xml dan ServiceManifest.xml file. Untuk contoh yang lebih terperinci, lihat contoh manifes aplikasi dan layanan. Skema XML untuk file manifes didokumentasikan dalam ServiceFabricServiceModel.xsd.

Peringatan

Skema file XML manifes memberlakukan urutan elemen turunan yang benar. Sebagai solusi parsial, buka "C:\Program Files\Microsoft SDKs\Service Fabric\schemas\ServiceFabricServiceModel.xsd" di Visual Studio sambil menulis atau memodifikasi manifes Service Fabric apa pun. Ini akan memungkinkan Anda untuk memeriksa pemesanan elemen turunan dan memberikan intelli-sense.

Menjelaskan layanan di ServiceManifest.xml

Manifes layanan secara deklaratif mendefinisikan jenis dan versi layanan. Ini menentukan metadata layanan seperti jenis layanan, properti kesehatan, metrik load-balancing, biner layanan, dan file konfigurasi. Dengan kata lain, ini menjelaskan kode, konfigurasi, dan paket data yang menyusun paket layanan untuk mendukung satu atau beberapa jenis layanan. Manifes layanan dapat berisi beberapa kode, konfigurasi, dan paket data, yang dapat di versi secara independen. Berikut adalah manifes layanan untuk layanan front-end web ASP.NET Core dari aplikasi sampel Voting (dan berikut adalah beberapa contoh yang lebih rinci):

<?xml version="1.0" encoding="utf-8"?>
<ServiceManifest Name="VotingWebPkg"
                 Version="1.0.0"
                 xmlns="http://schemas.microsoft.com/2011/01/fabric"
                 xmlns:xsd="https://www.w3.org/2001/XMLSchema"
                 xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
  <ServiceTypes>
    <!-- This is the name of your ServiceType. 
         This name must match the string used in RegisterServiceType call in Program.cs. -->
    <StatelessServiceType ServiceTypeName="VotingWebType" />
  </ServiceTypes>

  <!-- Code package is your service executable. -->
  <CodePackage Name="Code" Version="1.0.0">
    <EntryPoint>
      <ExeHost>
        <Program>VotingWeb.exe</Program>
        <WorkingFolder>CodePackage</WorkingFolder>
      </ExeHost>
    </EntryPoint>
  </CodePackage>

  <!-- Config package is the contents of the Config directory under PackageRoot that contains an 
       independently-updateable and versioned set of custom configuration settings for your service. -->
  <ConfigPackage Name="Config" Version="1.0.0" />

  <Resources>
    <Endpoints>
      <!-- This endpoint is used by the communication listener to obtain the port on which to 
           listen. Please note that if your service is partitioned, this port is shared with 
           replicas of different partitions that are placed in your code. -->
      <Endpoint Protocol="http" Name="ServiceEndpoint" Type="Input" Port="8080" />
    </Endpoints>
  </Resources>
</ServiceManifest>

Atribut versi adalah string yang tidak terstruktur dan tidak diurai oleh sistem. Atribut versi digunakan untuk membuat versi setiap komponen untuk peningkatan.

ServiceTypes menyatakan jenis layanan yang didukung oleh CodePackages dalam manifes ini. Jika layanan digunakan terhadap salah satu jenis layanan ini, semua paket kode yang dinyatakan dalam manifes ini akan diaktifkan dengan menjalankan titik entrinya. Proses yang dihasilkan diharapkan untuk mendaftarkan jenis layanan yang didukung saat runtime. Jenis layanan dideklarasikan pada tingkat manifes dan bukan tingkat paket kode. Jadi ketika ada beberapa paket kode, semuanya diaktifkan setiap kali sistem mencari salah satu jenis layanan yang dinyatakan.

Executable yang ditentukan oleh EntryPoint biasanya merupakan host layanan yang berjalan lama. SetupEntryPoint adalah titik entri dengan hak istimewa yang berjalan dengan kredensial yang sama dengan Service Fabric (biasanya akun LocalSystem) sebelum titik entri lainnya. Keberadaan titik entri penyiapan terpisah menghindari perlunya menjalankan host layanan dengan hak istimewa tinggi selama periode waktu yang lama. Executable yang ditentukan oleh EntryPoint dijalankan setelah SetupEntryPoint berhasil keluar. Jika proses berhenti atau crash, proses yang dihasilkan dipantau dan dimulai ulang (dimulai lagi dengan SetupEntryPoint).

Skenario umum untuk menggunakan SetupEntryPoint adalah ketika Anda perlu menjalankan executable sebelum layanan dimulai atau melakukan operasi dengan hak istimewa yang ditingkatkan. Contohnya:

  • Menyiapkan dan menginisialisasi variabel lingkungan yang dibutuhkan executable layanan. Ini tidak terbatas hanya pada executable yang ditulis melalui model pemrograman Service Fabric. Misalnya, npm.exe memerlukan beberapa variabel lingkungan yang dikonfigurasi untuk menyebarkan aplikasi Node.js.
  • Menyetel kontrol akses dengan memasang sertifikat keamanan.

Untuk informasi selengkapnya tentang cara mengonfigurasi SetupEntryPoint, lihat Mengonfigurasi kebijakan untuk titik entri penyiapan layanan.

EnvironmentVariables (tidak diatur dalam contoh sebelumnya) menyediakan daftar variabel lingkungan yang ditetapkan untuk paket kode ini. Variabel lingkungan dapat diambil alih di ApplicationManifest.xml untuk memberikan nilai yang berbeda untuk instans layanan yang berbeda.

DataPackage (tidak diatur dalam contoh sebelumnya) mendeklarasikan folder, dinamai dengan atribut Name, yang berisi data statis khusus yang akan digunakan oleh proses pada runtime.

ConfigPackage menyatakan folder, dinamai dengan atribut Name, yang berisi file Settings.xml. File pengaturan berisi bagian dari pengaturan pasangan key-nilai yang ditentukan oleh pengguna yang prosesnya dapat dibaca lagi saat runtime. Selama peningkatan, jika hanya versi ConfigPackage yang berubah, maka proses yang sedang berjalan tidak dimulai ulang. Sebaliknya, panggilan balik memberi tahu proses bahwa setelan konfigurasi telah diubah sehingga dapat dimuat ulang secara dinamis. Berikut adalah contoh file Settings.xml :

<Settings xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2011/01/fabric">
  <Section Name="MyConfigurationSection">
    <Parameter Name="MySettingA" Value="Example1" />
    <Parameter Name="MySettingB" Value="Example2" />
  </Section>
</Settings>

Titik Akhir Layanan Fabric Service adalah contoh Sumber Daya Service Fabric. Sumber Daya Service Fabric dapat dinyatakan/diubah tanpa mengubah kode yang dikompilasi. Akses ke sumber daya Service Fabric yang ditentukan dalam manifes layanan dapat dikontrol melalui SecurityGroup dalam manifes aplikasi. Ketika sumber daya titik akhir didefinisikan dalam manifes layanan, Service Fabric menetapkan port dari rentang port aplikasi yang dipesan ketika port tidak ditentukan secara eksplisit. Baca selengkapnya tentang menentukan atau mengambil alih sumber daya titik akhir.

Peringatan

Sesuai peruntukannya, port statis tidak boleh tumpang tindih dengan rentang port aplikasi yang ditentukan dalam ClusterManifest. Jika Anda menentukan port statis, tetapkan port di luar rentang port aplikasi, jika tidak, maka akan mengakibatkan konflik port. Dengan rilis 6.5CU2 kita akan mengeluarkan Peringatan Kesehatan ketika mendeteksi konflik seperti itu tetapi membiarkan penyebaran terus selaras dengan perilaku 6.5 yang dikirimkan. Namun, kita dapat mencegah penyebaran aplikasi dari rilis utama berikutnya.

Menjelaskan aplikasi di ApplicationManifest.xml

Manifes aplikasi secara deklaratif menjelaskan jenis dan versi aplikasi. Ini menentukan metadata komposisi layanan seperti nama stable, skema partisi, faktor jumlah/replikasi instans, kebijakan keamanan/isolasi, batasan penempatan, pengambilalihan konfigurasi, dan jenis layanan konstituen. Domain load-balancing tempat aplikasi ditempatkan juga dijelaskan.

Dengan demikian, manifes aplikasi menjelaskan elemen pada tingkat aplikasi dan referensi satu atau lebih manifes layanan untuk menyusun jenis aplikasi. Berikut adalah manifes aplikasi untuk aplikasi sampel Voting (dan berikut adalah beberapa contoh yang lebih rinci):

<?xml version="1.0" encoding="utf-8"?>
<ApplicationManifest xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" ApplicationTypeName="VotingType" ApplicationTypeVersion="1.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
  <Parameters>
    <Parameter Name="VotingData_MinReplicaSetSize" DefaultValue="3" />
    <Parameter Name="VotingData_PartitionCount" DefaultValue="1" />
    <Parameter Name="VotingData_TargetReplicaSetSize" DefaultValue="3" />
    <Parameter Name="VotingWeb_InstanceCount" DefaultValue="-1" />
  </Parameters>
  <!-- Import the ServiceManifest from the ServicePackage. The ServiceManifestName and ServiceManifestVersion 
       should match the Name and Version attributes of the ServiceManifest element defined in the 
       ServiceManifest.xml file. -->
  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="VotingDataPkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
  </ServiceManifestImport>
  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="VotingWebPkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
  </ServiceManifestImport>
  <DefaultServices>
    <!-- The section below creates instances of service types, when an instance of this 
         application type is created. You can also create one or more instances of service type using the 
         ServiceFabric PowerShell module.
         
         The attribute ServiceTypeName below must match the name defined in the imported ServiceManifest.xml file. -->
    <Service Name="VotingData">
      <StatefulService ServiceTypeName="VotingDataType" TargetReplicaSetSize="[VotingData_TargetReplicaSetSize]" MinReplicaSetSize="[VotingData_MinReplicaSetSize]">
        <UniformInt64Partition PartitionCount="[VotingData_PartitionCount]" LowKey="0" HighKey="25" />
      </StatefulService>
    </Service>
    <Service Name="VotingWeb" ServicePackageActivationMode="ExclusiveProcess">
      <StatelessService ServiceTypeName="VotingWebType" InstanceCount="[VotingWeb_InstanceCount]">
        <SingletonPartition />
         <PlacementConstraints>(NodeType==NodeType0)</PlacementConstraints
      </StatelessService>
    </Service>
  </DefaultServices>
</ApplicationManifest>

Seperti manifes layanan, Atribut versi adalah string yang tidak terstruktur dan tidak diurai oleh sistem. Atribut versi juga digunakan untuk membuat versi setiap komponen untuk peningkatan.

Parameter mendefinisikan parameter yang digunakan di seluruh manifes aplikasi. Nilai parameter ini dapat diberikan ketika aplikasi dibuat dan dapat digunakan untuk mengambil alih pengaturan konfigurasi aplikasi atau layanan. Nilai parameter default digunakan jika nilai tidak diubah selama instans aplikasi. Untuk mempelajari cara mempertahankan parameter aplikasi dan layanan yang berbeda untuk lingkungan individual, lihat Mengelola parameter aplikasi untuk beberapa lingkungan.

ServiceManifestImport berisi referensi ke manifes layanan yang menyusun jenis aplikasi ini. Manifes aplikasi dapat berisi beberapa impor manifes layanan, dan masing-masing dapat di-versi secara independen. Manifes layanan yang diimpor menentukan jenis layanan apa yang valid dalam jenis aplikasi ini. Dalam ServiceManifestImport, Anda mengganti nilai konfigurasi dalam Settings.xml dan variabel lingkungan dalam ServiceManifest.xml file. Kebijakan (tidak diatur dalam contoh sebelumnya) untuk pengikatan titik akhir, keamanan dan akses, dan berbagi paket dapat diatur pada manifes layanan yang diimpor. Untuk informasi selengkapnya, lihat Mengonfigurasi kebijakan keamanan untuk aplikasi Anda.

DefaultServices menyatakan instans layanan yang secara otomatis dibuat setiap kali aplikasi dibuat terhadap jenis aplikasi ini. Layanan default hanya untuk kemudahan dan berperilaku seperti layanan normal dalam setiap hal setelah dibuat. Mereka ditingkatkan bersama dengan layanan lain dalam instans aplikasi dan juga dapat dihapus. Manifes aplikasi dapat berisi beberapa layanan default.

Peringatan

DefaultServices tidak digunakan lagi demi StartupServices.xml. Anda dapat membaca tentang StartupServices.xml dalam Memperkenalkan StartupServices.xml di Aplikasi Service Fabric.

Sertifikat (tidak diatur dalam contoh sebelumnya) menyatakan sertifikat yang digunakan untuk menyiapkan titik akhir HTTPS atau mengenkripsi rahasia dalam manifes aplikasi.

Batasan Penempatan adalah pernyataan yang menentukan saat layanan harus berjalan. Pernyataan ini dilampirkan ke layanan individual yang Anda pilih untuk satu atau beberapa properti node. Untuk informasi selengkapnya, lihat Batasan penempatan dan sintaks properti simpul.

Kebijakan (tidak diatur dalam contoh sebelumnya) menjelaskan pengumpulan log, jalankan-sebagai default, kesehatan, dan kebijakan akses keamanan untuk ditetapkan pada tingkat aplikasi, termasuk apakah layanan memiliki akses ke runtime Service Fabric.

Catatan

Kluster Service Fabric adalah penyewa tunggal berdasarkan desain dan aplikasi yang dihosting dianggap tepercaya. Jika Anda mempertimbangkan hosting aplikasi tidak terpercaya , silahkan lihat Hosting aplikasi tidak terpercaya pada kluster Service Fabric .

Prinsip (tidak diatur dalam contoh sebelumnya) menjelaskan prinsip keamanan (pengguna atau grup) yang diperlukan untuk menjalankan layanan dan sumber daya layanan yang aman. Prinsip direferensikan di bagian Kebijakan.

Langkah berikutnya