Service Fabric 애플리케이션 수명 주기
다른 플랫폼과 마찬가지로, Azure 서비스 패브릭 기반의 애플리케이션은 일반적으로 디자인, 개발, 테스트, 배포, 업그레이드, 유지 관리 및 제거 단계를 거칩니다. 서비스 패브릭은 개발부터 배포, 일상적인 관리, 유지 관리 및 최종적인 서비스 해제에 이르기까지 클라우드 애플리케이션의 전체 애플리케이션 수명 주기 관리에 대해 최고 수준의 지원을 제공합니다. 여러 역할이 애플리케이션 수명 주기에 독립적으로 참가할 수 있는 서비스 모델이 제공됩니다. 이 문서에서는 Service Fabric 애플리케이션 수명 주기의 모든 단계에서 여러 역할이 사용되는 방법 및 API에 대한 개요를 제공합니다.
애플리케이션 수명 주기를 관리하는 방법을 설명하는 교육 비디오는 이 페이지를 확인하세요.
Important
Service Fabric과 함께 사용되는 두 개의 CLI 유틸리티가 있습니다. Azure CLI를 사용하여 Azure 호스팅 Service Fabric 클러스터와 같은 Azure 리소스를 관리합니다. Service Fabric CLI를 사용하여 (호스팅되는 위치에 관계 없이) Service Fabric 클러스터에 직접 연결하고 클러스터, 애플리케이션 및 서비스를 관리합니다.
서비스 모델 역할
서비스 모델은 다음과 같습니다.
- 서비스 개발자: 유형이 같거나 다른 여러 애플리케이션에서 용도를 변경하고 사용할 수 있는 모듈식 및 일반 서비스를 개발합니다. 예를 들어 큐 서비스를 사용하여 발권 애플리케이션(헬프데스크) 또는 전자 상거래 애플리케이션(장바구니)을 만들 수 있습니다.
- 애플리케이션 개발자: 특정 요구 사항 또는 시나리오를 충족하도록 서비스 컬렉션을 통합하여 애플리케이션을 만듭니다. 예를 들어 전자 상거래 웹 사이트에 "JSON 상태 비저장 프런트엔드 서비스", "경매 상태 저장 서비스" 및 "큐 상태 저장 서비스"를 통합하여 경매 솔루션을 빌드합니다.
- 애플리케이션 관리자: 애플리케이션 구성(구성 템플릿 매개 변수를 입력), 배포(사용 가능한 리소스에 매핑) 및 서비스의 품질에 대한 결정을 내립니다. 예를 들어 애플리케이션 관리자가 애플리케이션의 언어 로캘을 결정합니다(예: 미국은 영어, 일본은 일본어). 배포된 다른 애플리케이션을 다르게 설정할 수 있습니다.
- 운영자: 애플리케이션 관리자가 지정한 애플리케이션 구성 및 요구 사항에 따라 애플리케이션을 배포합니다. 예를 들어 운영자가 애플리케이션을 프로비전 및 배포하고 Azure에서 실행되고 있는지 확인합니다. 운영자는 애플리케이션 상태 및 성능 정보를 모니터링 하고 필요에 따라 실제 인프라를 유지 관리합니다.
개발
- 서비스 개발자는 Reliable Actors 또는 Reliable Services 프로그래밍 모델을 사용하여 여러 유형의 서비스를 개발합니다.
- 서비스 개발자 는 하나 이상의 코드, 구성 및 데이터 패키지로 구성된 서비스 매니페스트 파일에 개발된 서비스 유형에 대한 내용을 선언적으로 설명합니다.
- 그런 다음, 애플리케이션 개발자는 다른 서비스 유형을 사용하여 애플리케이션을 빌드합니다.
- 애플리케이션 개발자는 구성 서비스의 서비스 매니페스트를 참조하여 애플리케이션에 대한 내용을 애플리케이션 매니페스트에 선언적으로 설명하고, 구성 서비스의 다른 구성 및 배포 설정을 적절하게 재정의 및 매개 변수화합니다.
이에 대한 예는 Reliable Actors 시작 및 Reliable Services 시작을 참조하세요.
배포
- 애플리케이션 관리자는 애플리케이션 매니페스트에 있는 ApplicationType 요소의 매개 변수를 적절하게 지정하여 애플리케이션 유형을 서비스 패브릭 클러스터에 배포할 특정 애플리케이션으로 맞춤화합니다.
- 운영자는 CopyApplicationPackage 메서드 또는 Copy-ServiceFabricApplicationPackage cmdlet을 사용하여 애플리케이션 패키지를 클러스터 이미지 저장소에 업로드합니다. 애플리케이션 패키지는 애플리케이션 매니페스트 및 서비스 패키지 컬렉션을 포함합니다. 서비스 패브릭이 이미지 저장소에 저장된 애플리케이션 패키지의 애플리케이션을 배포합니다. ImageStore는 Azure Blob 저장소일 수도 있고 서비스 패브릭 시스템 서비스일 수도 있습니다.
- 그런 다음, 운영자가 ProvisionApplicationAsync 메서드, Register-ServiceFabricApplicationType cmdlet 또는 Provision an Application REST 작업을 사용하여 업로드된 애플리케이션 패키지의 대상 클러스터에 애플리케이션 유형을 프로비전합니다.
- 애플리케이션을 프로비전한 후 운영자가 CreateApplicationAsync 메서드, New-ServiceFabricApplication cmdlet 또는 애플리케이션 만들기 REST 작업을 사용하여 애플리케이션 관리자가 제공한 매개 변수로 애플리케이션을 시작합니다.
- 애플리케이션이 배포된 후 운영자가 CreateServiceAsync 메서드, New-ServiceFabricService cmdlet 또는 Create Service REST 작업을 사용하여 제공되는 서비스 유형에 따라 애플리케이션에 대한 새 서비스 인스턴스를 만듭니다.
- 이제 서비스 패브릭 클러스터에서 애플리케이션이 실행됩니다.
예는 애플리케이션 배포를 참조하세요.
테스트
- 로컬 개발 클러스터 또는 클러스터에 배포한 후 서비스 개발자가 FailoverTestScenarioParameters 및 FailoverTestScenario 클래스 또는 Invoke-ServiceFabricFailoverTestScenario cmdlet를 사용하여 기본 제공 장애 조치(failover) 테스트 시나리오를 실행합니다. 장애 조치(failover) 테스트 시나리오는 중요한 전환 및 장애 조치(failover)를 통해 지정된 서비스를 실행하여 서비스가 중단 없이 작동되도록 보장합니다.
- 그런 다음 서비스 개발자가 ChaosTestScenarioParameters 및 ChaosTestScenario 클래스 또는 Invoke-ServiceFabricChaosTestScenario cmdlet를 사용하여 기본 제공 비정상 상황 테스트 시나리오를 실행합니다. 비정상 상황 테스트 시나리오는 임의로 여러 노드, 코드 패키지 및 복제 오류를 클러스터로 유도합니다.
- 서비스 개발자는 클러스터 주변에서 주 복제본을 이동하는 테스트 시나리오를 작성하여 서비스 간 통신을 테스트합니다.
자세한 내용은 오류 분석 서비스 소개 를 참조하세요.
업그레이드
- 서비스 개발자는 인스턴스화된 애플리케이션의 구성 서비스를 업데이트 하고/하거나 버그를 수정하고 새로운 서비스 매니페스트 버전을 제공합니다.
- 애플리케이션 개발자는 구성 서비스의 구성 및 배포 설정을 재정의 및 매개 변수화하고 새로운 애플리케이션 매니페스트 버전을 제공합니다. 그런 다음, 애플리케이션 개발자가 새로운 서비스 매니페스트 버전을 애플리케이션에 통합하고 업데이트된 애플리케이션 패키지에 새로운 버전의 애플리케이션 유형을 제공합니다.
- 애플리케이션 관리자는 적절한 매개 변수를 업데이트하여 새로운 버전의 애플리케이션 유형을 대상 애플리케이션에 통합합니다.
- 운영자는 CopyApplicationPackage 메서드 또는 Copy-ServiceFabricApplicationPackage cmdlet을 사용하여 업데이트된 애플리케이션 패키지를 클러스터 이미지 저장소에 업로드합니다. 애플리케이션 패키지는 애플리케이션 매니페스트 및 서비스 패키지 컬렉션을 포함합니다.
- 그런 다음, 운영자가 ProvisionApplicationAsync 메서드, Register-ServiceFabricApplicationType cmdlet 또는 Provision an Application REST 작업을 사용하여 대상 클러스터에 새로운 애플리케이션 버전을 프로비전합니다.
- 운영자가 UpgradeApplicationAsync 메서드, Start-ServiceFabricApplicationUpgrade cmdlet 또는 Upgrade an Application REST 작업을 사용하여 대상 애플리케이션을 새 버전으로 업그레이드합니다.
- 운영자가 GetApplicationUpgradeProgressAsync 메서드, Get-ServiceFabricApplicationUpgrade cmdlet 또는 Get Application Upgrade Progress REST 작업을 사용하여 업그레이드 진행 상황을 확인합니다.
- 필요한 경우 운영자가 UpdateApplicationUpgradeAsync 메서드, Update-ServiceFabricApplicationUpgrade cmdlet 또는 Update Application Upgrade REST 작업을 사용하여 현재 애플리케이션 업그레이드의 매개 변수를 수정하고 다시 적용합니다.
- 필요한 경우 운영자가 RollbackApplicationUpgradeAsync 메서드, Start-ServiceFabricApplicationRollback cmdlet 또는 Rollback Application Upgrade REST 작업을 사용하여 현재 애플리케이션 업그레이드를 롤백합니다.
- 모든 구성 서비스가 제공되는 상태로 서비스 패브릭이 클러스터에서 실행되는 대상 애플리케이션을 업그레이드합니다.
예제는 애플리케이션 업그레이드 자습서를 참조하세요.
유지 관리
- 운영 체제 업그레이드 및 패치의 경우 클러스터에서 실행 중인 모든 애플리케이션의 가용성을 보장하기 위해 서비스 패브릭이 Azure 인프라와 상호 작용합니다.
- 서비스 패브릭 플랫폼 업그레이드 및 패치의 경우 클러스터에서 실행 중인 애플리케이션의 가용성을 손실하지 서비스 패브릭이 자체적으로 업그레이드됩니다.
- 애플리케이션 관리자가 용량 사용률 데이터 및 향후 예상 수요를 분석한 후 클러스터에 대한 노드 추가 또는 제거를 승인합니다.
- 운영자는 애플리케이션 관리자가 지정한 노드를 추가 또는 제거합니다.
- 클러스터에 새 노드가 추가되거나 기존 노드 클러스터에서 노드가 제거되면 서비스 패브릭이 실행 중인 애플리케이션의 부하를 클러스터의 모든 노드로 분산하여 최적의 성능을 유지합니다.
제거
- 운영자는 DeleteServiceAsync 메서드, Remove-ServiceFabricService cmdlet 또는 Delete Service REST 작업을 사용하여 전체 애플리케이션을 제거하지 않고 클러스터에서 실행 중인 특정 인스턴스를 삭제할 수 있습니다.
- 또한 운영자는 DeleteApplicationAsync 메서드, Remove-ServiceFabricApplication cmdlet, or the Delete Application REST 작업을 사용하여 애플리케이션 인스턴스 및 모든 서비스를 삭제할 수 있습니다.
- 애플리케이션 및 서비스가 중지되면 운영자는 UnprovisionApplicationAsync 메서드, Unregister-ServiceFabricApplicationType cmdlet 또는 Unprovision an Application REST 작업을 사용하여 애플리케이션 유형의 프로비전을 해제할 수 있습니다. 애플리케이션 유형의 프로비전을 해제해도 ImageStore에서 애플리케이션 패키지가 제거되지는 않습니다.
- 운영자가 RemoveApplicationPackage 메서드 또는 Remove-ServiceFabricApplicationPackage cmdlet을 사용하여 ImageStore에서 애플리케이션 패키지를 제거합니다.
예는 애플리케이션 배포를 참조하세요.
클러스터 이미지 저장소에서 디스크 공간 유지
ImageStoreService는 복사된 패키지와 프로비저닝된 패키지를 유지하여 파일이 누적되도록 할 수 있습니다. 파일 누적으로 인해 ImageStoreService(fabric:/System/ImageStoreService)가 디스크를 채울 수 있으며 ImageStoreService 복제본의 빌드 시간이 늘어날 수 있습니다.
파일 누적을 방지하려면 다음 프로비저닝 시퀀스를 사용합니다.
ImageStore에 패키지 복사 및 압축 옵션 사용
패키지 프로비저닝
이미지 저장소에서 패키지 제거
애플리케이션/클러스터 업그레이드
이전 버전 프로비저닝 해제
위의 절차에서 3단계와 5단계는 이미지 저장소에 파일이 누적되지 않도록 방지합니다.
자동 정리를 위한 구성
PowerShell 또는 XML을 사용하여 위의 3단계를 자동화할 수 있습니다. 이렇게 하면 애플리케이션 유형을 성공적으로 등록한 후 애플리케이션 패키지가 자동으로 삭제됩니다.
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>
노드에서 파일 및 데이터 정리
애플리케이션 파일의 복제는 분산 작업에 따라 결국 모든 노드에 파일을 배포합니다. 이로 인해 애플리케이션 수와 파일 크기에 따라 디스크 압력이 발생할 수 있습니다. 노드에서 실행 중인 활성 인스턴스가 없더라도 이전 인스턴스의 파일은 유지됩니다. 상태 저장 서비스에서 사용하는 신뢰할 수 있는 컬렉션의 데이터도 마찬가지입니다. 이는 고가용성의 용도로 사용됩니다. 동일한 노드에 새 애플리케이션 인스턴스가 있는 경우 파일을 복사할 수 없습니다. 신뢰할 수 있는 컬렉션의 경우 델타만 복제해야 합니다.
애플리케이션 이진 파일을 완전히 제거하려면 애플리케이션 유형을 등록 취소해야 합니다.
디스크 압력을 줄이기 위한 권장 사항:
- Remove-ServiceFabricApplicationPackage 이는 임시 업로드 위치에서 패키지를 제거합니다.
- Unregister-ServiceFabricApplicationType은 이미지 저장소 서비스 및 모든 노드에서 애플리케이션 형식 파일을 제거하여 스토리지 공간을 해제합니다. 삭제 관리자는 기본적으로 매시간 실행됩니다.
- CleanupUnusedApplicationTypes는 사용되지 않는 이전 애플리케이션 버전을 자동으로 정리합니다.
{ "name": "Management", "parameters": [ { "name": "CleanupUnusedApplicationTypes", "value": true }, { "name": "MaxUnusedAppTypeVersionsToKeep", "value": "3" } ] }
- Remove-ServiceFabricClusterPackage는 사용되지 않는 이전 런타임 설치 이진 파일을 제거합니다.
참고 항목
애플리케이션이 노드에서 제거되면 Service Fabric이 애플리케이션 폴더를 삭제할 수 있도록 하는 기능이 개발 중입니다.
다음 단계
서비스 패브릭 애플리케이션 및 서비스의 개발, 테스트 및 관리에 대한 자세한 내용은 다음 항목을 참조하세요.