Sdílet prostřednictvím


Spuštění až do konce

Service Fabric od verze 7.1 podporuje sémantiku RunToCompletion pro kontejnery a spustitelné aplikace hosta. Tato sémantika umožňuje aplikacím a službám, které dokončí úlohu a ukončení, na rozdíl od vždy spuštěných aplikací a služeb.

Než budete pokračovat v tomto článku, seznamte se s aplikačním modelem Service Fabric a modelem hostování Service Fabric.

Poznámka:

Sémantika RunToCompletion není podporována pro služby, které používají programovací model Reliable Services .

Sémantika a specifikace RunToCompletion

Sémantiku SpustitToCompletion můžete zadat jako sémantiku ExecutionPolicy při importu ServiceManifest. Všechny balíčky CodePackage, které tvoří ServiceManifest, dědí zadanou zásadu. Následující fragment kódu z ApplicationManifest.xml poskytuje příklad:

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

ExecutionPolicy umožňuje dva atributy:

  • TypeRunToCompletion jako jedinou povolenou hodnotu.

  • Restart určuje zásadu restartování, která se má použít pro balíčky CodePackage v balíčku ServicePackage při selhání. Balíček CodePackage, který se ukončí s nenulovým ukončovacím kódem, se považuje za neúspěšný. Povolené hodnoty pro tento atribut jsou OnFailure a Never, s OnFailure jako výchozí.

    • Pokud je zásada restartování nastavená na OnFailure, všechny balíčky CodePackage, které se nezdaří s restartováním nenulového ukončovacího kódu, se zpětnými vypnutími mezi opakovanými selháními.

    • Pokud dojde k Neverselhání nějakého balíčku CodePackage, stav nasazení nasazeného balíčku ServicePackage je označený jako Neúspěšný, ale ostatní balíčky CodePackage budou pokračovat ve spouštění.

Pokud se všechny balíčky CodePackage ve službě ServicePackage spustí k úspěšnému dokončení s ukončovacím kódem 0, stav nasazení nasazeného balíčkuServicePackage se označí jako RanToCompletion.

Příklad kódu s využitím sémantiky RunToCompletion

Podívejme se na úplný příklad, který používá sémantiku RunToCompletion.

Důležité

Následující příklad předpokládá znalost vytváření kontejnerových aplikací pro Windows pomocí Service Fabric a Dockeru.

Kontejnery Windows Serveru nejsou kompatibilní ve všech verzích hostitelského operačního systému. Tento příklad odkazuje mcr.microsoft.com/windows/nanoserver:1809. Další informace najdete v tématu Kompatibilita verzí kontejneru Windows.

Následující ServiceManifest.xml popisuje ServicePackage sestávající ze dvou balíčků CodePackage, které představují kontejnery. RunToCompletionCodePackage1 stačí protokolovat zprávu do stdoutu a ukončit. RunToCompletionCodePackage2 příkazem ping na chvíli adresu zpětné smyčky a poté se ukončí s ukončovacím kódem 0, 1nebo 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>

Následující ApplicationManifest.xml popisuje aplikaci na základě ServiceManifest.xml popsané výše. Kód určuje RunToCompletion ExecutionPolicy pro WindowsRunToCompletionServicePackage pomocí zásady restartování .OnFailure

Po WindowsRunToCompletionServicePackage aktivaci se spustí základní balíčky CodePackage. RunToCompletionCodePackage1 by se měla úspěšně ukončit při první aktivaci. RunToCompletionCodePackage2 může selhat s nenulovým ukončovacím kódem a restartuje, protože zásada restartování je 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>

Stav nasazení dotazu nasazeného balíčku služby ServicePackage

Stav nasazení nasazeného balíčku ServicePackage můžete dotazovat.

Důležité informace o sémantice RunToCompletion

Zvažte následující body týkající se podpory RunToCompletion:

  • Sémantika RunToCompletion se podporuje jenom pro kontejnery a spustitelné aplikace hosta.
  • Scénáře upgradu pro aplikace s sémantikou RunToCompletion nejsou povolené. V případě potřeby je potřeba tyto aplikace odstranit a znovu vytvořit.
  • Události převzetí služeb při selhání můžou způsobit opětovné spuštění balíčků CodePackage po úspěšném dokončení, na stejném uzlu nebo na jiných uzlech clusteru. Příklady událostí převzetí služeb při selhání jsou restartování uzlů a upgrady modulu runtime Service Fabric na uzlu.
  • SpustitToCompletion není kompatibilní s ServicePackageActivationMode="SharedProcess". Pro tyto služby selže ověření modulu runtime Service Fabric verze 9.0 a vyšší. SharedProcess je výchozí hodnota, takže je nutné zadat ServicePackageActivationMode="ExclusiveProcess" , aby bylo možné použít sémantiku RunToCompletion.

Další kroky