지속성 및 오케스트레이션 엔진
상태 지속성, 해당 관리 및 복원을 기반으로 하여 오케스트레이션 엔진의 많은 기본 기능이 작동합니다. 특히 다음과 같은 기능이 올바르게 작동하려면 지속성이 중요합니다.
디하이드레이션 및 리하이드레이션
컴퓨터에 구애받지 않는 실행 및 리하이드레이션
보정 모델
제어된 시스템 종료
복구
오케스트레이션 엔진은 다양한 포인트에서 실행 중인 오케스트레이션 인스턴스의 전체 상태를 영구적 저장소에 저장하므로 나중에 메모리에서 인스턴스를 완전하게 복원할 수 있습니다. 상태에는 다음이 포함됩니다.
엔진의 현재 진행 상태를 비롯한 내부 상태
오케스트레이션에 의해 사용되며 상태 정보를 유지 관리하는 .NET 구성 요소의 상태
메시지 및 변수 값
지속성 포인트
오케스트레이션 엔진은 다양한 포인트에서 실행 중인 오케스트레이션 인스턴스의 상태를 저장합니다. 오케스트레이션 인스턴스를 리하이드레이션해야 하거나 제어된 종료 상태에서 다시 시작하거나 예기치 못한 종료에서 복구해야 할 경우에는 아무런 오류가 발생하지 않았어도 마지막 지속성 포인트부터 오케스트레이션 인스턴스를 실행합니다. 예를 들어 메시지가 수신되었지만 상태가 저장되기 전에 시스템이 예기치 않게 종료되면 엔진은 메시지를 수신했다는 사실을 기록하지 않으므로 시스템이 다시 시작될 때 메시지를 다시 수신합니다. 엔진은 다음과 같은 경우에 오케스트레이션의 상태를 저장합니다.
트랜잭션 범위의 끝에 도달한 경우
엔진은 오케스트레이션이 다시 시작되어야 하는 포인트가 정확히 정의되고 필요한 경우 보정이 올바르게 수행되도록 트랜잭션 범위 끝에 상태를 저장합니다.
지속성이 성공적으로 유지될 경우 오케스트레이션은 범위 끝부터 계속 실행되고, 그렇지 않으면 적절한 예외 핸들러가 호출됩니다.
트랜잭션 및 원자성 범위인 경우 엔진은 커밋할 때 원자성 범위의 끝에서 상태를 저장합니다.
트랜잭션 및 장기 실행 범위인 경우 엔진은 새 트랜잭션을 생성하고 범위가 완료될 때 런타임의 완료 상태를 지속합니다.
디버깅 중단점에 도달한 경우
메시지가 송신된 경우. 유일한 예외는 원자성 트랜잭션 범위 내에서 메시지가 송신된 경우입니다.
오케스트레이션은 오케스트레이션 시작 셰이프와 마찬가지로 다른 오케스트레이션 을 비동기적으로 시작합니다.
오케스트레이션 인스턴스가 일시 중지된 경우
오케스트레이션 엔진에 종료 요청이 들어오면 엔진이 실행 중인 모든 오케스트레이션 인스턴스의 현재 상태뿐만 아니라 컨트롤 정보를 저장하므로 엔진을 다시 시작할 때 인스턴스를 계속 실행할 수 있습니다. 엔진이 현재 상태를 저장하지 못하면 종료 전에 발생한 마지막 지속성 포인트에서 오케스트레이션 인스턴스를 다시 시작합니다. 이는 비정상적 종료뿐만 아니라 제어 상태에서의 시스템 종료에도 적용됩니다.
엔진에서 인스턴스의 디하이드레이션을 결정하는 경우
오케스트레이션 인스턴스가 종료될 경우
Serialization
오케스트레이션 상태를 유지하려면 오케스트레이션에서 직접적 또는 다른 개체를 통해 간접적으로 참조하는 모든 개체 인스턴스를 serialize할 수 있어야 합니다. 두 가지 예외 사항이 있습니다.
원자성 트랜잭션 내부에서는 순차 불가능 개체가 선언될 수 있습니다. 이것은 원자성 범위에는 지속성 포인트가 포함되지 않으므로 가능합니다.
System.Xml.XmlDocument는 순차 가능 클래스가 아니므로 특별한 경우로 취급되어 모든 곳에서 사용할 수 있습니다.
주의
.NET 개체를 유지하려면 순차 가능으로 표시해야 합니다.
참고
COM 개체는 표준 .NET serialization 절차를 사용하여 유지될 수 없습니다. 원자성 트랜잭션 외부에서 COM 개체를 호출하려면 .NET 순차 가능 개체이면서 COM 개체의 상태 유지 및 복원 방법을 알고 있는 .NET 개체에 COM 개체를 래핑해야 합니다.
시스템 종료
오케스트레이션 엔진에 종료 요청이 들어오면 엔진이 실행 중인 모든 오케스트레이션 인스턴스의 현재 상태뿐만 아니라 컨트롤 정보를 저장하므로 엔진을 다시 시작할 때 인스턴스를 계속 실행할 수 있습니다. 엔진이 현재 상태를 저장하지 못하면 종료 전에 발생한 마지막 지속성 포인트에서 오케스트레이션 인스턴스를 다시 시작합니다. 이는 비정상적 종료뿐만 아니라 제어 상태에서의 시스템 종료에도 적용됩니다.
복구
엔진은 오케스트레이션 인스턴스의 상태 정보를 영구 저장소에 정기적으로 저장하고 시스템 종료 시에도 상태 정보를 저장합니다.
특정 이유로 인해 오케스트레이션 인스턴스에 비정상적인 장애가 발생하면 마지막에 저장된 상태로부터 인스턴스를 복구하고 장애가 발생하지 않은 것처럼 인스턴스를 계속 실행할 수 있습니다. 인스턴스를 실행하던 원본 서버가 특정 이유로 인해 다운되더라도 이러한 복구 기능이 수행되며, 이때 인스턴스는 별개의 시스템에서 실행을 계속할 수 있습니다. 이러한 다중 서버 복구 모델로 인해 클러스터링은 더 이상 필요하지 않습니다.