다음을 통해 공유


RunToCompletion

버전 7.1부터 Service Fabric은 RunToCompletion 의미 체계를 컨테이너게스트 실행 파일 애플리케이션에 지원합니다. 이러한 의미 체계는 항상 실행되는 애플리케이션 및 서비스와 달리 작업을 완료하고 종료하는 애플리케이션 및 서비스를 사용하도록 합니다.

이 문서를 더 읽기 전에 Service Fabric 애플리케이션 모델Service Fabric 호스팅 모델에 대해 잘 알고 있어야 합니다.

참고 항목

RunToCompletion 의미 체계는 Reliable Services 프로그래밍 모델을 사용하는 서비스에는 지원되지 않습니다.

RunToCompletion 의미 체계 및 사양

ServiceManifest를 가져올 때 RunToCompletion 의미 체계를 ExecutionPolicy로 지정할 수 있습니다. ServiceManifest를 구성하는 모든 CodePackage는 지정된 정책을 상속합니다. ApplicationManifest.xml의 다음 코드 조각은 예제를 제공합니다.

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

ExecutionPolicy는 다음 두 가지 특성을 허용합니다.

  • TypeRunToCompletion이 허용되는 유일한 값입니다.

  • Restart는 실패 시 ServicePackage의 CodePackages에 적용할 다시 시작 정책을 지정합니다. 0이 아닌 종료 코드로 종료되는 CodePackage는 실패한 것으로 간주됩니다. 이 특성에 허용되는 값은 OnFailureNever이며 기본값은 OnFailure입니다.

    • 다시 시작 정책을 OnFailure로 설정하면 0이 아닌 종료 코드로 실패하는 모든 CodePackage가 다시 시작되며 반복된 오류 간에 백오프가 발생합니다.

    • 다시 시작 정책을 Never로 설정하면 CodePackage가 실패하는 경우 DeployedServicePackage의 배포 상태가 Failed로 표시되지만 기타 CodePackage는 계속 실행됩니다.

ServicePackage의 모든 CodePackage가 종료 코드 0와 함께 성공적으로 완료될 때까지 실행되면 DeployedServicePackage의 배포 상태가 RanToCompletion으로 표시됩니다.

RunToCompletion 의미 체계를 사용하는 코드 예제

RunToCompletion 의미 체계를 사용하는 전체 예제를 살펴보겠습니다.

Important

다음 예제에서는 Service Fabric 및 Docker를 사용하여 Windows 컨테이너 애플리케이션을 만드는 방법을 알고 있다고 가정합니다.

Windows Server 컨테이너는 일부 버전의 호스트 OS에서 호환되지 않습니다. 이 예제에서는 mcr.microsoft.com/windows/nanoserver:1809를 참조합니다. 자세한 정보는 Windows 컨테이너 버전 호환성을 참조하세요.

다음 ServiceManifest.xml는 컨테이너를 나타내는 두 개의 CodePackage로 구성된 ServicePackage에 대해 설명합니다. RunToCompletionCodePackage1stdout에 메시지를 기록하고 종료됩니다. RunToCompletionCodePackage2는 잠시 동안 루프백 주소에 ping을 사용한 다음, 종료 코드 0, 1 또는 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은 위에 설명된 ServiceManifest.xml을 기반으로 하는 애플리케이션을 설명합니다. 이 코드는 OnFailure의 다시 시작 정책을 사용하여 WindowsRunToCompletionServicePackage에 대한 RunToCompletion ExecutionPolicy를 지정합니다.

WindowsRunToCompletionServicePackage 활성화 시 해당 구성 CodePackage가 시작됩니다. RunToCompletionCodePackage1은 첫 번째 활성화에서 성공적으로 종료됩니다. RunToCompletionCodePackage2는 0이 아닌 종료 코드로 실패할 수 있으며 다시 시작 정책이 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>

DeployedServicePackage의 배포 상태 쿼리

DeployedServicePackage의 배포 상태를 쿼리할 수 있습니다.

RunToCompletion 의미 체계에 대한 고려 사항

RunToCompletion 지원에 대해 다음 사항을 고려합니다.

  • RunToCompletion 의미 체계는 컨테이너게스트 실행 파일 애플리케이션에 대해서만 지원됩니다.
  • RunToCompletion 의미 체계를 사용하는 애플리케이션에 대한 업그레이드 시나리오는 허용되지 않습니다. 필요한 경우 이러한 애플리케이션을 삭제하고 다시 만들어야 합니다.
  • 장애 조치(failover) 이벤트는 CodePackage가 같은 노드나 클러스터의 기타 노드에서 성공적으로 완료된 후 다시 실행되게 할 수 있습니다. 장애 조치(failover) 이벤트의 예시에는 노드 다시 시작과 노드에서의 Service Fabric 런타임 업그레이드가 있습니다.
  • RunToCompletion은 ServicePackageActivationMode="SharedProcess"와 호환되지 않습니다. Service Fabric 런타임 버전 9.0 이상에서는 이러한 서비스에 대한 유효성 검사가 실패합니다. SharedProcess는 기본값이므로 RunToCompletion 의미 체계를 사용하도록 ServicePackageActivationMode="ExclusiveProcess"를 지정해야 합니다.

다음 단계