Bagikan melalui


RunToCompletion

Mulai versi 7.1, Service Fabric mendukung semantik RunToCompletion untuk kontainer dan aplikasi yang dapat dieksekusi tamu. Semantik ini memungkinkan aplikasi dan layanan yang menyelesaikan suatu tugas dan keluar, berbeda dengan, selalu menjalankan aplikasi dan layanan.

Sebelum Anda melanjutkan artikel ini, sebaiknya pelajari model aplikasi Service Fabric dan model hosting Service Fabric.

Catatan

Semantik RunToCompletion saat ini tidak didukung untuk layanan yang menggunakan model pemrograman Layanan Andal.

Semantik dan spesifikasi RunToCompletion

Anda dapat menentukan semantik RunToCompletion sebagai ExecutionPolicy saat mengimpor ServiceManifest. Semua CodePackages yang terdiri dari ServiceManifest mewarisi kebijakan yang ditentukan. Cuplikan dari ApplicationManifest.xml berikut memberikan contoh:

<ServiceManifestImport>
  <ServiceManifestRef ServiceManifestName="RunToCompletionServicePackage" ServiceManifestVersion="1.0"/>
  <Policies>
    <ExecutionPolicy Type="RunToCompletion" Restart="OnFailure"/>
  </Policies>
</ServiceManifestImport>

ExecutionPolicy memungkinkan dua atribut:

  • Type memiliki RunToCompletion sebagai satu-satunya nilai yang diizinkan.

  • Restart menentukan kebijakan hidupkan ulang yang akan diterapkan ke CodePackages di ServicePackage jika gagal. CodePackage yang keluar dengan kode keluar non-zero dianggap gagal. Nilai yang diizinkan untuk atribut ini adalah OnFailure dan Never, dengan nilai OnFailure sebagai default.

    • Dengan kebijakan hidupkan ulang diatur ke OnFailure, CodePackage apa pun yang gagal dengan kode keluar non-zero dimulai ulang, dengan back-off di antara kegagalan berulang.

    • Dengan kebijakan hidupkan ulang diatur ke Never, jika ada CodePackage yang gagal, status penyebaran DeployedServicePackage ditandai sebagai Gagal tetapi CodePackages lainnya melanjutkan eksekusi.

Jika semua CodePackages di dalam ServicePackage berjalan hingga berhasil diselesaikan dengan kode keluar 0, status penyebaran DeployedServicePackage ditandai sebagai RanToCompletion.

Contoh lengkap menggunakan semantik RunToCompletion

Mari kita lihat contoh lengkap yang menggunakan semantik RunToCompletion.

Penting

Contoh berikut mengasumsikan pengetahuan akan membuat aplikasi kontainer Windows menggunakan Service Fabric dan Docker.

Kontainer Windows Server tidak kompatibel di semua versi OS host. Contoh ini mereferensikan mcr.microsoft.com/windows/nanoserver:1809. Untuk informasi selengkapnya, lihat Kompatibilitas versi kontainer Windows.

ServiceManifest.xml berikut menjelaskan ServicePackage yang terdiri dari dua CodePackages, yang merepresentasikan kontainer. RunToCompletionCodePackage1 hanya mencatat pesan ke stdout dan keluar. RunToCompletionCodePackage2 melakukan ping ke alamat loopback untuk sementara waktu, kemudian keluar dengan kode keluar 0, 1 atau 2.

<?xml version="1.0" encoding="UTF-8"?>
<ServiceManifest Name="WindowsRunToCompletionServicePackage" Version="1.0" xmlns="http://schemas.microsoft.com/2011/01/fabric" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Description>Windows RunToCompletion Service</Description>
  <ServiceTypes>
    <StatelessServiceType ServiceTypeName="WindowsRunToCompletionServiceType"  UseImplicitHost="true"/>
  </ServiceTypes>
  <CodePackage Name="RunToCompletionCodePackage1" Version="1.0">
    <EntryPoint>
      <ContainerHost>
        <ImageName>mcr.microsoft.com/windows/nanoserver:1809</ImageName>
        <Commands>/c,echo Hi from RunToCompletionCodePackage1 &amp;&amp; exit 0</Commands>
        <EntryPoint>cmd</EntryPoint>
      </ContainerHost>
    </EntryPoint>
  </CodePackage>

  <CodePackage Name="RunToCompletionCodePackage2" Version="1.0">
    <EntryPoint>
      <ContainerHost>
        <ImageName>mcr.microsoft.com/windows/nanoserver:1809</ImageName>
        <Commands>/v,/c,ping 127.0.0.1 &amp;&amp; set /a exitCode=%random% % 3 &amp;&amp; exit !exitCode!</Commands>
        <EntryPoint>cmd</EntryPoint>
      </ContainerHost>
    </EntryPoint>
  </CodePackage>
</ServiceManifest>

ApplicationManifest.xml berikut menjelaskan aplikasi berdasarkan ServiceManifest.xml yang dibahas di atas. Kode tersebut menentukan ExecutionPolicy RunToCompletion untuk WindowsRunToCompletionServicePackage dengan kebijakan hidupkan ulang OnFailure.

Setelah pengaktifan WindowsRunToCompletionServicePackage, CodePackages konstituennya akan dimulai. RunToCompletionCodePackage1 harus keluar dengan sukses pada aktivasi pertama. RunToCompletionCodePackage2 dapat gagal dengan kode keluar non-zero, lalu akan dihidupkan ulang karena kebijakan hidupkan ulangnya adalah OnFailure.

<?xml version="1.0" encoding="UTF-8"?>
<ApplicationManifest ApplicationTypeName="WindowsRunToCompletionApplicationType" ApplicationTypeVersion="1.0" xmlns="http://schemas.microsoft.com/2011/01/fabric" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <Description>Windows RunToCompletion Application</Description>

  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="WindowsRunToCompletionServicePackage" ServiceManifestVersion="1.0"/>
    <Policies>
      <ExecutionPolicy Type="RunToCompletion" Restart="OnFailure"/>
    </Policies>
  </ServiceManifestImport>

  <DefaultServices>
    <Service Name="WindowsRunToCompletionService" ServicePackageActivationMode="ExclusiveProcess">
      <StatelessService ServiceTypeName="WindowsRunToCompletionServiceType" InstanceCount="1">
        <SingletonPartition />
      </StatelessService>
    </Service>
  </DefaultServices>
</ApplicationManifest>

Mengkueri status penyebaran DeployedServicePackage

Anda dapat mengkueri status penyebaran DeployedServicePackage.

Pertimbangan untuk semantik RunToCompletion

Pertimbangkan poin-poin berikut terkait dukungan RunToCompletion:

  • Semantik RunToCompletion hanya didukung untuk kontainer dan aplikasi yang dapat dieksekusi tamu.
  • Skenario peningkatan untuk aplikasi dengan semantik RunToCompletion tidak diizinkan. Pengguna harus menghapus dan membuat ulang aplikasi tersebut, jika diperlukan.
  • Peristiwa failover dapat menyebabkan CodePackages dijalankan kembali setelah berhasil diselesaikan, pada node yang sama atau node kluster lainnya. Contoh peristiwa failover adalah menghidupkan ulang node dan peningkatan runtime Service Fabric pada node.
  • RunToCompletion tidak kompatibel dengan ServicePackageActivationMode="SharedProcess". Runtime Service Fabric versi 9.0 dan yang lebih tinggi akan menggagalkan validasi untuk layanan tersebut. SharedProcess adalah nilai default-nya, jadi Anda harus menentukan ServicePackageActivationMode="ExclusiveProcess" untuk menggunakan semantik RunToCompletion.

Langkah berikutnya