인스턴스 저장소, 쿼리 및 제어 공급자
인스턴스 저장소는 인스턴스의 논리 컨테이너입니다. 인스턴스 데이터와 메타데이터가 저장되는 위치입니다. 인스턴스 저장소가 전용 실제 저장소를 의미하지는 않습니다. 인스턴스 저장소에는 SQL Server 데이터베이스의 지속적 정보 또는 메모리의 비지속적 상태 정보가 포함될 수 있습니다. .NET Framework 버전 4에는 워크플로에서 인스턴스 데이터와 메타데이터를 SQL Server 2005 또는 SQL Server 2008 데이터베이스에 유지할 수 있게 하는 인스턴스 저장소의 구체적 구현인 SQL 워크플로 인스턴스 저장소가 포함됩니다. 자세한 내용은 .NET Framework 도움말에서 인스턴스 저장소(https://go.microsoft.com/fwlink/?LinkId=181533)를 참조하십시오. AppFabric에서는 워크플로 서비스 인스턴스를 SQL Server 2008 데이터베이스에 유지하는 기능만 지원합니다.
인스턴스 저장소를 AppFabric 도구(Windows PowerShell cmdlet 및 IIS 관리자 확장) 및 워크플로 관리 서비스와 함께 사용하려면 해당 인스턴스 저장소에 대한 인스턴스 저장소 공급자, 인스턴스 쿼리 공급자 및 인스턴스 제어 공급자를 개발해야 합니다. 다음 섹션에서는 이러한 세 가지 공급자 유형에 대해 설명합니다.
참고
인스턴스 쿼리 및 제어 공급자 API는 .NET Framework 2.0을 기반으로 하고, 인스턴스 저장소 공급자 API는 .NET Framework 버전 4를 기반으로 합니다.
인스턴스 저장소 공급자
인스턴스 저장소의 인스턴스 저장소 공급자는 클라이언트가 인스턴스 저장소 개체를 만들기 위해 호출하는 API를 제공합니다. 클라이언트는 인스턴스 저장소 개체를 사용하여 워크플로 인스턴스를 기본 인스턴스 저장소(예: SQL Server 데이터베이스)에 저장하거나 인스턴스 저장소에서 인스턴스를 로드합니다.
AppFabric에는 SQL 워크플로 인스턴스 저장소에 대한 인스턴스 저장소 공급자가 포함되어 있습니다. 다른 인스턴스 저장소를 지원하려면 해당 인스턴스 저장소에 대한 인스턴스 저장소 공급자를 만들어야 합니다. 인스턴스 저장소 공급자를 만들려면 InstanceStoreProvider 클래스에서 파생되는 클래스를 만들고 SqlWorkflowInstanceStore와 같은 인스턴스 저장소를 만드는 메서드를 구현해야 합니다. 자세한 내용은 방법: 인스턴스 저장소 공급자 개발을 참조하십시오.
인스턴스 쿼리 공급자
인스턴스 저장소의 인스턴스 쿼리 공급자를 통해 인스턴스 저장소에 대해 쿼리를 실행할 수 있습니다. Get-ASAppServiceInstance와 같은 cmdlet을 사용하여 인스턴스 저장소에서 인스턴스를 쿼리할 경우 cmdlet은 쿼리 공급자 개체를 만들고 개체에 대한 메서드를 호출합니다. 쿼리 공급자 개체는 쿼리를 만들고 인스턴스 저장소에 대해 쿼리를 실행하며 쿼리 결과를 cmdlet에 반환합니다. AppFabric IIS 관리자 확장은 대부분의 시나리오에서 cmdlet을 사용하여 인스턴스 저장소에 대해 쿼리합니다. 따라서 이 확장은 쿼리 공급자에 따라 달라집니다.
모든 쿼리 공급자는 동일한 API를 구현하고 다양한 기본 인스턴스 저장소를 통해 추상화 계층을 제공합니다. AppFabric에는 SQL Server 지속성 데이터베이스에 저장된 인스턴스를 쿼리할 수 있는 SQL 워크플로 인스턴스 저장소에 대한 인스턴스 쿼리 공급자가 포함되어 있습니다. SQL 쿼리 공급자는 클라이언트(예: Windows PowerShell cmdlet)에서 쿼리를 수신하면 SQL Server 데이터베이스에서 인스턴스 데이터를 쿼리 및 검색하고 결과 집합을 클라이언트에 반환합니다. SQL 워크플로 인스턴스 저장소에 대한 인스턴스 쿼리 공급자는 Microsoft.ApplicationServer.StoreManagement.dll에 구현되어 있습니다.
다른 유형의 인스턴스 저장소 쿼리를 지원하려면 해당 저장소에 대한 인스턴스 쿼리 공급자가 있어야 합니다. 사용자 지정 쿼리 공급자를 만들려면 InstanceQueryProvider 클래스에서 파생된 클래스를 만들고 클라이언트를 대신하여 쿼리를 실행할 메서드를 구현해야 합니다. 자세한 내용은 방법: 인스턴스 쿼리 공급자 개발을 참조하십시오.
인스턴스 제어 공급자
인스턴스 제어 공급자를 사용하여 클라이언트에서 인스턴스 저장소의 인스턴스에 대해 제어 명령을 실행하고, 인스턴스에 대해 실행해야 하는 명령을 검색할 수 있습니다. AppFabric Windows PowerShell cmdlet을 사용하여 인스턴스 저장소의 인스턴스를 제어(일시 중단, 다시 시작 등)할 경우 cmdlet은 제어 공급자 개체를 만들고 개체에 대한 메서드를 호출하여 명령을 명령 큐에 추가합니다. 제어 공급자는 인스턴스 저장소에 저장된 명령 큐를 유지 관리합니다. WMS(워크플로 관리 서비스)와 같은 일반 호스트는 제어 공급자 개체를 만들고 개체에 대한 메서드를 호출하여 명령 큐에 저장된 명령을 검색하고 명령을 실행합니다. WMS는 실행 실패 또는 성공에 대해 제어 공급자에 알립니다. 실행이 성공한 경우 제어 공급자는 큐에서 명령을 제거하고, 그렇지 않으면 WMS가 실패에 대해 제어 공급자에 알리고 공급자가 적절한 작업을 수행합니다.
인스턴스 제어 공급자는 명령을 명령 큐에서 WMS로 전달할 뿐만 아니라 명령이 실행되는 대상 인스턴스에 대한 메타데이터가 포함된 속성 모음을 전달합니다. 이 속성 모음에는 인스턴스의 사이트 이름과 가상 서비스 경로가 포함되어 있습니다. 제어 공급자는 인스턴스 저장소에서 이 메타데이터를 가져옵니다. WMS는 이 메타데이터를 사용하여 서비스 인스턴스에서 제공하는 ICE(인스턴스 제어 끝점)에 대한 액세스 권한을 얻고 끝점에서 적절한 메서드를 호출합니다.
모든 쿼리 공급자는 동일한 API를 구현하고 다양한 기본 인스턴스 저장소를 통해 추상화 계층을 제공합니다. AppFabric에는 SQL Server 지속성 데이터베이스에 저장된 인스턴스에 대해 제어 명령을 실행할 수 있는 SQL 워크플로 인스턴스 저장소에 대한 인스턴스 제어 공급자가 포함되어 있습니다. SQL 워크플로 인스턴스 저장소에 대한 인스턴스 제어 공급자는 Microsoft.ApplicationServer.StoreManagement.dll에 구현되어 있습니다. 다른 유형의 인스턴스 저장소에 저장된 인스턴스에 대한 명령 실행을 지원하려면 해당 저장소에 대한 인스턴스 제어 공급자를 개발해야 합니다.
사용자 지정 제어 공급자를 만들려면 InstanceControlProvider 클래스에서 파생된 클래스를 만들고 클라이언트를 대신하여 명령 큐에 대해 명령을 추가 및 검색할 메서드를 구현해야 합니다. 자세한 내용은 방법: 인스턴스 컨트롤 공급자 개발을 참조하십시오.
SQL 워크플로 인스턴스 저장소에 대한 인스턴스 제어 공급자
AppFabric에는 SQL 워크플로 인스턴스 저장소에 대한 인스턴스 제어 공급자가 포함되어 있습니다. 인스턴스 제어 공급자는 SQL Server 데이터베이스에서 명령 큐를 유지 관리합니다. 제어 cmdlet을 SQL 워크플로 인스턴스 저장소에 대해 실행하면 인스턴스 제어 공급자는 요청을 받고 명령 정보를 SQL Server 데이터베이스의 명령 큐에 저장합니다. WMS는 인스턴스 제어 공급자를 사용하여 명령 큐에서 명령을 검색하고, SQL 워크플로 인스턴스 저장소에 대해 명령을 실행하고, 명령 실행이 성공한 경우 명령 큐에서 명령을 삭제합니다. SQL 워크플로 인스턴스 저장소에 대한 인스턴스 제어 공급자는 Microsoft.ApplicationServer.StoreManagement.dll에 구현되어 있습니다.
다음 내용은 SQL 워크플로 인스턴스 저장소에 대한 인스턴스 제어 공급자에 적용됩니다.
인스턴스 제어 공급자는 Delete 명령을 즉시(동기적으로) 처리합니다. 모든 다른 명령은 제어 공급자가 처리를 위해 명령을 WMS에 전달하기 전에 명령 큐에 삽입(추가)됩니다.
명령 큐는 FIFO(처음 들어간 것부터 사용) 큐입니다. 제어 공급자는 새 명령을 큐의 끝에 추가하고 명령을 맨 앞부터 읽습니다. 제어 공급자는 WMS에 대해 잠기지 않은 가장 오래된 명령을 반환합니다.
제어 공급자는 인스턴스당 하나의 명령만 큐에 저장할 수 있습니다. 공급자는 명령이 이미 큐에 있는 인스턴스의 명령에 대해 큐에 삽입 요청을 수신하면 명령이 잠기지 않은 경우 기존 명령을 덮어씁니다. 명령이 잠겨 있거나 명령이 보류 중 상태에 있는 경우 제어 공급자는 오류를 반환합니다.
제어 공급자는 명령 큐에서 명령을 읽은 후 명령을 일시적으로 잠급니다. 이 잠금은 65초 후에 만료됩니다. WMS에서 명령 실행 성공에 대한 알림을 수신한 후 공급자는 명령 큐에서 명령을 제거합니다.
명령 실행이 실패할 경우 제어 공급자는 명령을 5회 다시 시도합니다. 명령 큐는 실패한 실행 시도의 카운터를 유지 관리합니다. 명령 실행이 5회 실패하면 공급자가 명령 큐에서 명령을 제거합니다.
제어 공급자는 데이터베이스에서 명령 실행 오류 로그를 유지 관리합니다. 이 로그는 실패한 명령 및 실패 이유에 대한 메타데이터를 저장합니다. 로그에는 인스턴스당 최대 하나의 실패한 명령이 포함되어 있습니다. 각 로그 항목에는 명령 유형, 인스턴스 ID, 오류 코드, 오류 메시지, 마지막 실행 시도 시간, 명령 실행이 수행된 컴퓨터 ID 및 실행 시도 횟수가 포함되어 있습니다.
인스턴스에 대한 로그 항목은 인스턴스에 대한 새로운 명령이 큐에 삽입되거나 사용자가 인스턴스 저장소에서 인스턴스를 제거할 때 제거됩니다. 사용자는 cmdlet(예: Remove-ASAppServiceInstance)을 사용하여 인스턴스를 제거할 수 있습니다.
제어 공급자는 큐에서 명령을 10개씩 일괄 제거합니다.
참고 항목
개념
방법: 인스턴스 저장소 공급자 개발
방법: 인스턴스 쿼리 공급자 개발
방법: 인스턴스 컨트롤 공급자 개발
방법: 인스턴스 저장소, 쿼리 및 컨트롤 공급자 구성
2011-12-05