Service Fabric 애플리케이션 수명 주기

다른 플랫폼과 마찬가지로, Azure 서비스 패브릭 기반의 애플리케이션은 일반적으로 디자인, 개발, 테스트, 배포, 업그레이드, 유지 관리 및 제거 단계를 거칩니다. 서비스 패브릭은 개발부터 배포, 일상적인 관리, 유지 관리 및 최종적인 서비스 해제에 이르기까지 클라우드 애플리케이션의 전체 애플리케이션 수명 주기 관리에 대해 최고 수준의 지원을 제공합니다. 여러 역할이 애플리케이션 수명 주기에 독립적으로 참가할 수 있는 서비스 모델이 제공됩니다. 이 문서에서는 Service Fabric 애플리케이션 수명 주기의 모든 단계에서 여러 역할이 사용되는 방법 및 API에 대한 개요를 제공합니다.

애플리케이션 수명 주기를 관리하는 방법을 설명하는 교육 비디오는 이 페이지를 확인하세요.

Important

Service Fabric과 함께 사용되는 두 개의 CLI 유틸리티가 있습니다. Azure CLI를 사용하여 Azure 호스팅 Service Fabric 클러스터와 같은 Azure 리소스를 관리합니다. Service Fabric CLI를 사용하여 (호스팅되는 위치에 관계 없이) Service Fabric 클러스터에 직접 연결하고 클러스터, 애플리케이션 및 서비스를 관리합니다.

서비스 모델 역할

서비스 모델은 다음과 같습니다.

  • 서비스 개발자: 유형이 같거나 다른 여러 애플리케이션에서 용도를 변경하고 사용할 수 있는 모듈식 및 일반 서비스를 개발합니다. 예를 들어 큐 서비스를 사용하여 발권 애플리케이션(헬프데스크) 또는 전자 상거래 애플리케이션(장바구니)을 만들 수 있습니다.
  • 애플리케이션 개발자: 특정 요구 사항 또는 시나리오를 충족하도록 서비스 컬렉션을 통합하여 애플리케이션을 만듭니다. 예를 들어 전자 상거래 웹 사이트에 "JSON 상태 비저장 프런트엔드 서비스", "경매 상태 저장 서비스" 및 "큐 상태 저장 서비스"를 통합하여 경매 솔루션을 빌드합니다.
  • 애플리케이션 관리자: 애플리케이션 구성(구성 템플릿 매개 변수를 입력), 배포(사용 가능한 리소스에 매핑) 및 서비스의 품질에 대한 결정을 내립니다. 예를 들어 애플리케이션 관리자가 애플리케이션의 언어 로캘을 결정합니다(예: 미국은 영어, 일본은 일본어). 배포된 다른 애플리케이션을 다르게 설정할 수 있습니다.
  • 운영자: 애플리케이션 관리자가 지정한 애플리케이션 구성 및 요구 사항에 따라 애플리케이션을 배포합니다. 예를 들어 운영자가 애플리케이션을 프로비전 및 배포하고 Azure에서 실행되고 있는지 확인합니다. 운영자는 애플리케이션 상태 및 성능 정보를 모니터링 하고 필요에 따라 실제 인프라를 유지 관리합니다.

개발

  1. 서비스 개발자Reliable Actors 또는 Reliable Services 프로그래밍 모델을 사용하여 여러 유형의 서비스를 개발합니다.
  2. 서비스 개발자 는 하나 이상의 코드, 구성 및 데이터 패키지로 구성된 서비스 매니페스트 파일에 개발된 서비스 유형에 대한 내용을 선언적으로 설명합니다.
  3. 그런 다음, 애플리케이션 개발자는 다른 서비스 유형을 사용하여 애플리케이션을 빌드합니다.
  4. 애플리케이션 개발자는 구성 서비스의 서비스 매니페스트를 참조하여 애플리케이션에 대한 내용을 애플리케이션 매니페스트에 선언적으로 설명하고, 구성 서비스의 다른 구성 및 배포 설정을 적절하게 재정의 및 매개 변수화합니다.

이에 대한 예는 Reliable Actors 시작Reliable Services 시작을 참조하세요.

배포

  1. 애플리케이션 관리자는 애플리케이션 매니페스트에 있는 ApplicationType 요소의 매개 변수를 적절하게 지정하여 애플리케이션 유형을 서비스 패브릭 클러스터에 배포할 특정 애플리케이션으로 맞춤화합니다.
  2. 운영자CopyApplicationPackage 메서드 또는 Copy-ServiceFabricApplicationPackage cmdlet을 사용하여 애플리케이션 패키지를 클러스터 이미지 저장소에 업로드합니다. 애플리케이션 패키지는 애플리케이션 매니페스트 및 서비스 패키지 컬렉션을 포함합니다. 서비스 패브릭이 이미지 저장소에 저장된 애플리케이션 패키지의 애플리케이션을 배포합니다. ImageStore는 Azure Blob 저장소일 수도 있고 서비스 패브릭 시스템 서비스일 수도 있습니다.
  3. 그런 다음, 운영자ProvisionApplicationAsync 메서드, Register-ServiceFabricApplicationType cmdlet 또는 Provision an Application REST 작업을 사용하여 업로드된 애플리케이션 패키지의 대상 클러스터에 애플리케이션 유형을 프로비전합니다.
  4. 애플리케이션을 프로비전한 후 운영자CreateApplicationAsync 메서드, New-ServiceFabricApplication cmdlet 또는 애플리케이션 만들기 REST 작업을 사용하여 애플리케이션 관리자가 제공한 매개 변수로 애플리케이션을 시작합니다.
  5. 애플리케이션이 배포된 후 운영자CreateServiceAsync 메서드, New-ServiceFabricService cmdlet 또는 Create Service REST 작업을 사용하여 제공되는 서비스 유형에 따라 애플리케이션에 대한 새 서비스 인스턴스를 만듭니다.
  6. 이제 서비스 패브릭 클러스터에서 애플리케이션이 실행됩니다.

예는 애플리케이션 배포를 참조하세요.

테스트

  1. 로컬 개발 클러스터 또는 클러스터에 배포한 후 서비스 개발자FailoverTestScenarioParametersFailoverTestScenario 클래스 또는 Invoke-ServiceFabricFailoverTestScenario cmdlet를 사용하여 기본 제공 장애 조치(failover) 테스트 시나리오를 실행합니다. 장애 조치(failover) 테스트 시나리오는 중요한 전환 및 장애 조치(failover)를 통해 지정된 서비스를 실행하여 서비스가 중단 없이 작동되도록 보장합니다.
  2. 그런 다음 서비스 개발자ChaosTestScenarioParametersChaosTestScenario 클래스 또는 Invoke-ServiceFabricChaosTestScenario cmdlet를 사용하여 기본 제공 비정상 상황 테스트 시나리오를 실행합니다. 비정상 상황 테스트 시나리오는 임의로 여러 노드, 코드 패키지 및 복제 오류를 클러스터로 유도합니다.
  3. 그런 다음 service developer서비스 간 통신을 테스트 합니다.

자세한 내용은 오류 분석 서비스 소개 를 참조하세요.

업그레이드

  1. 서비스 개발자는 인스턴스화된 애플리케이션의 구성 서비스를 업데이트 하고/하거나 버그를 수정하고 새로운 서비스 매니페스트 버전을 제공합니다.
  2. 애플리케이션 개발자는 구성 서비스의 구성 및 배포 설정을 재정의 및 매개 변수화하고 새로운 애플리케이션 매니페스트 버전을 제공합니다. 그런 다음, 애플리케이션 개발자가 새로운 서비스 매니페스트 버전을 애플리케이션에 통합하고 업데이트된 애플리케이션 패키지에 새로운 버전의 애플리케이션 유형을 제공합니다.
  3. 애플리케이션 관리자는 적절한 매개 변수를 업데이트하여 새로운 버전의 애플리케이션 유형을 대상 애플리케이션에 통합합니다.
  4. 운영자CopyApplicationPackage 메서드 또는 Copy-ServiceFabricApplicationPackage cmdlet을 사용하여 업데이트된 애플리케이션 패키지를 클러스터 이미지 저장소에 업로드합니다. 애플리케이션 패키지는 애플리케이션 매니페스트 및 서비스 패키지 컬렉션을 포함합니다.
  5. 그런 다음, 운영자ProvisionApplicationAsync 메서드, Register-ServiceFabricApplicationType cmdlet 또는 Provision an Application REST 작업을 사용하여 대상 클러스터에 새로운 애플리케이션 버전을 프로비전합니다.
  6. 운영자UpgradeApplicationAsync 메서드, Start-ServiceFabricApplicationUpgrade cmdlet 또는 Upgrade an Application REST 작업을 사용하여 대상 애플리케이션을 새 버전으로 업그레이드합니다.
  7. 운영자GetApplicationUpgradeProgressAsync 메서드, Get-ServiceFabricApplicationUpgrade cmdlet 또는 Get Application Upgrade Progress REST 작업을 사용하여 업그레이드 진행 상황을 확인합니다.
  8. 필요한 경우 운영자UpdateApplicationUpgradeAsync 메서드, Update-ServiceFabricApplicationUpgrade cmdlet 또는 Update Application Upgrade REST 작업을 사용하여 현재 애플리케이션 업그레이드의 매개 변수를 수정하고 다시 적용합니다.
  9. 필요한 경우 운영자RollbackApplicationUpgradeAsync 메서드, Start-ServiceFabricApplicationRollback cmdlet 또는 Rollback Application Upgrade REST 작업을 사용하여 현재 애플리케이션 업그레이드를 롤백합니다.
  10. 모든 구성 서비스가 제공되는 상태로 서비스 패브릭이 클러스터에서 실행되는 대상 애플리케이션을 업그레이드합니다.

예제는 애플리케이션 업그레이드 자습서를 참조하세요.

유지 관리

  1. 운영 체제 업그레이드 및 패치의 경우 클러스터에서 실행 중인 모든 애플리케이션의 가용성을 보장하기 위해 서비스 패브릭이 Azure 인프라와 상호 작용합니다.
  2. 서비스 패브릭 플랫폼 업그레이드 및 패치의 경우 클러스터에서 실행 중인 애플리케이션의 가용성을 손실하지 서비스 패브릭이 자체적으로 업그레이드됩니다.
  3. 애플리케이션 관리자가 용량 사용률 데이터 및 향후 예상 수요를 분석한 후 클러스터에 대한 노드 추가 또는 제거를 승인합니다.
  4. 운영자애플리케이션 관리자가 지정한 노드를 추가 또는 제거합니다.
  5. 클러스터에 새 노드가 추가되거나 기존 노드 클러스터에서 노드가 제거되면 서비스 패브릭이 실행 중인 애플리케이션의 부하를 클러스터의 모든 노드로 분산하여 최적의 성능을 유지합니다.

제거

  1. 운영자DeleteServiceAsync 메서드, Remove-ServiceFabricService cmdlet 또는 Delete Service REST 작업을 사용하여 전체 애플리케이션을 제거하지 않고 클러스터에서 실행 중인 특정 인스턴스를 삭제할 수 있습니다.
  2. 또한 운영자DeleteApplicationAsync 메서드, Remove-ServiceFabricApplication cmdlet, or the Delete Application REST 작업을 사용하여 애플리케이션 인스턴스 및 모든 서비스를 삭제할 수 있습니다.
  3. 애플리케이션 및 서비스가 중지되면 운영자UnprovisionApplicationAsync 메서드, Unregister-ServiceFabricApplicationType cmdlet 또는 Unprovision an Application REST 작업을 사용하여 애플리케이션 유형의 프로비전을 해제할 수 있습니다. 애플리케이션 유형의 프로비전을 해제해도 ImageStore에서 애플리케이션 패키지가 제거되지는 않습니다.
  4. 운영자RemoveApplicationPackage 메서드 또는 Remove-ServiceFabricApplicationPackage cmdlet을 사용하여 ImageStore에서 애플리케이션 패키지를 제거합니다.

예는 애플리케이션 배포를 참조하세요.

클러스터 이미지 저장소에서 디스크 공간 유지

ImageStoreService는 복사된 패키지와 프로비저닝된 패키지를 유지하여 파일이 누적되도록 할 수 있습니다. 파일 누적으로 인해 ImageStoreService(fabric:/System/ImageStoreService)가 디스크를 채울 수 있으며 ImageStoreService 복제본의 빌드 시간이 늘어날 수 있습니다.

파일 누적을 방지하려면 다음 프로비저닝 시퀀스를 사용합니다.

  1. ImageStore에 패키지 복사 및 압축 옵션 사용

  2. 패키지 프로비저닝

  3. 이미지 저장소에서 패키지 제거

  4. 애플리케이션/클러스터 업그레이드

  5. 이전 버전 프로비저닝 해제

위의 절차에서 3단계와 5단계는 이미지 저장소에 파일이 누적되지 않도록 방지합니다.

자동 정리를 위한 구성

PowerShell 또는 XML을 사용하여 위의 3단계를 자동화할 수 있습니다. 이렇게 하면 애플리케이션 유형을 성공적으로 등록한 후 애플리케이션 패키지가 자동으로 삭제됩니다.

PowerShell:

Register-ServiceFabricApplicationTye -ApplicationPackageCleanupPolicy Automatic

XML:

<Section Name="Management">
  <Parameter Name="CleanupApplicationPackageOnProvisionSuccess" Value="True" />
</Section>

XML을 사용하여 위의 5단계를 자동화할 수 있습니다. 이렇게 하면 사용되지 않는 애플리케이션 유형이 자동으로 등록 취소됩니다.

<Section Name="Management">
  <Parameter Name="CleanupUnusedApplicationTypes" Value="true" />
  <Parameter Name="PeriodicCleanupUnusedApplicationTypes" Value="true" />     
  <Parameter Name="TriggerAppTypeCleanupOnProvisionSuccess" Value="true" />
  <Parameter Name="MaxUnusedAppTypeVersionsToKeep" Value="3" />
</Section>

노드에서 파일 및 데이터 정리

애플리케이션 파일의 복제는 분산 작업에 따라 결국 모든 노드에 파일을 배포합니다. 이로 인해 애플리케이션 수와 파일 크기에 따라 디스크 압력이 발생할 수 있습니다. 노드에서 실행 중인 활성 인스턴스가 없더라도 이전 인스턴스의 파일은 유지됩니다. 상태 저장 서비스에서 사용하는 신뢰할 수 있는 컬렉션의 데이터도 마찬가지입니다. 이는 고가용성의 용도로 사용됩니다. 동일한 노드에 새 애플리케이션 인스턴스가 있는 경우 파일을 복사할 수 없습니다. 신뢰할 수 있는 컬렉션의 경우 델타만 복제해야 합니다.

애플리케이션 이진 파일을 완전히 제거하려면 애플리케이션 유형을 등록 취소해야 합니다.

디스크 압력을 줄이기 위한 권장 사항:

  1. Remove-ServiceFabricApplicationPackage 이는 임시 업로드 위치에서 패키지를 제거합니다.
  2. Unregister-ServiceFabricApplicationType은 이미지 저장소 서비스 및 모든 노드에서 애플리케이션 형식 파일을 제거하여 스토리지 공간을 해제합니다. 삭제 관리자는 기본적으로 매시간 실행됩니다.
  3. CleanupUnusedApplicationTypes는 사용되지 않는 이전 애플리케이션 버전을 자동으로 정리합니다.
    {
      "name": "Management",
      "parameters": [
        {
          "name": "CleanupUnusedApplicationTypes",
          "value": true
        },
        {
          "name": "MaxUnusedAppTypeVersionsToKeep",
          "value": "3"
        }
      ]
    }
    
  4. Remove-ServiceFabricClusterPackage는 사용되지 않는 이전 런타임 설치 이진 파일을 제거합니다.

참고 항목

애플리케이션이 노드에서 제거되면 Service Fabric이 애플리케이션 폴더를 삭제할 수 있도록 하는 기능이 개발 중입니다.

다음 단계

서비스 패브릭 애플리케이션 및 서비스의 개발, 테스트 및 관리에 대한 자세한 내용은 다음 항목을 참조하세요.