StreamInsight 복구

시스템 중단으로 인해 StreamInsight 응용 프로그램의 이벤트 처리가 중단될 경우에 대비해 일반적으로 복구가 끝난 후의 응용 프로그램 출력 품질과 시기 적절성에 대한 요구 사항을 마련해야 합니다.

  1. 출력 스트림의 내용은 중단이 발생하지 않았을 때와 일치해야 합니다.

  2. 중단 기간은 가능하면 짧아야 합니다.

StreamInsight Premium 버전에서는 쿼리 상태를 정기적으로 디스크에 저장하는 검사점 설정 기능을 제공합니다. 이 기능을 입력 및 출력 어댑터의 관련 기능과 함께 사용하면 중단을 복구한 후에 동일한 출력 스트림을 확보할 수 있습니다. 제대로 작성된 입력 어댑터는 캡처된 마지막 검사점 이후의 누락된 이벤트만 재생하므로 복구에 소요되는 시간이 최소한으로 줄어듭니다.

StreamInsight 검사점 작업은 쿼리 상태를 일관된 방식으로 디스크에 보관합니다. 따라서 시스템 중단이 발생할 경우 쿼리를 검사점 시점의 상태로 복원할 수 있습니다.

검사점 설정만으로는 중단이 발생하지 않았을 경우 쿼리에 의해 생성된 이벤트 스트림과 중단이 발생한 후에 생성된 이벤트 스트림의 동일성을 보장할 수 없습니다. 두 가지 문제가 동일성에 영향을 줄 수 있습니다.

  • 이벤트 누락 가능. 검사점 이후 StreamInsight에서 받은 이벤트 및 중단과 복구 사이에 발생한 이벤트는 검사점에 의해 캡처되지 않습니다. 이러한 이벤트는 서버에 다시 제공해야만 쿼리 출력에 포함됩니다. 이 문제를 해결하려면 누락된 이벤트를 재생할 수 있는 입력 어댑터가 관여해야 합니다.

  • 이벤트 중복 가능. 마지막 검사점 이후, 중단 전에 StreamInsight에서 생성한 이벤트는 입력 어댑터가 예상대로 이벤트를 재생할 경우 중단을 복구하는 동안 다시 생성됩니다. 이 문제를 해결하려면 중복되는 이벤트를 제거할 수 있는 출력 어댑터가 관여해야 합니다.

검사점 로그는 보관된 검사점 정보가 포함된 파일 집합입니다. 이 로그는 서버에 복구를 구성할 때 지정한 디렉터리에 저장됩니다. 이 디렉터리는 StreamInsight 전용으로 예약해야 하며 비공개로 취급해야 합니다.

[맨 위로]

StreamInsight에서는 세 가지 수준의 복구를 구현할 수 있습니다. 요구 사항과 기존 응용 프로그램 및 어댑터의 변경 가능 여부에 따라 적절한 복구 수준을 선택할 수 있습니다.

  1. 상태 보존. 입력 어댑터나 출력 어댑터를 변경하지 않고 검사점을 사용하여 쿼리 상태를 저장할 수 있습니다. 이 복구 수준은 중단을 복구한 후의 결과 스트림이 중단이 발생하지 않았을 때의 스트림과 동일하도록 보장하지 않습니다. 이는 마지막 검사점이 캡처된 후에 발생한 이벤트는 손실되기 때문입니다. 이 복구 수준은 동일한 결과가 필요 없는 경우와 입력의 일부만으로 거의 올바른 출력을 얻을 수 있는 경우에 적합합니다.

  2. 완전한 출력. 이벤트를 재생하도록 입력 어댑터를 변경하여 이벤트가 누락되지 않도록 보장할 수 있습니다. 복구된 쿼리의 출력 스트림은 중단되지 않은 쿼리의 출력 스트림 상위 집합과 논리적으로 동일하며, 남는 이벤트는 중단되지 않은 스트림에 있는 중복 이벤트입니다.

  3. 동일한 출력. 입력 어댑터를 변경하고 중복 이벤트를 제거하도록 출력 어댑터도 변경하여 논리적으로 동일한 출력을 보장할 수 있습니다.

[맨 위로]

상위 워터마크는 이벤트 스트림의 특정 지점까지 표시된 최고 응용 프로그램 시간입니다. 검사점이 요청되면 StreamInsight는 각 입력에서 상위 워터마크에 있는 검사점을 캡처합니다.

[맨 위로]

중단을 복구한 후의 완전하고 동일한 출력을 얻기 위한 필수 구성 요소를 이해하려면 먼저 StreamInsight 검사점 설정으로 저장할 수 없는 이벤트 및 상태에 대해 알아보는 것이 좋습니다. 이러한 이벤트 및 상태는 중단을 복구한 후에도 사용이 가능하도록 별도로 보관되어야 합니다.

검사점 설정으로 저장할 수 없는 이벤트 및 상태

해결 방법

마지막 검사점 이후, 중단 전에 도착한 이벤트

중단을 복구한 후 재생할 수 있으려면 이러한 이벤트를 데이터 저장소에 보관해야 합니다.

중단 중 도착한 이벤트

중단을 복구한 후 사용할 수 있으려면 이러한 이벤트를 데이터 저장소에 보관해야 합니다.

마지막 검사점 이후, 중단 전에 출력으로 생성된 이벤트에 대한 정보

복구가 끝난 후 출력 어댑터가 중복 이벤트를 제거할 수 있으려면 이러한 이벤트를 데이터 저장소에 보관해야 합니다.

사용자 지정 입력 어댑터 또는 출력 어댑터가 유지 관리하는 모든 상태

중단을 복구한 후 사용할 수 있으려면 사용자 지정 입력 또는 출력 어댑터가 이 상태를 데이터 저장소에 보관해야 합니다.

[맨 위로]

중단이 발생한 후 StreamInsight 응용 프로그램을 다시 시작하면 입력 어댑터 팩터리의 Create 메서드가 호출되어 어댑터 팩터리에 상위 워터마크가 제공됩니다. 이 정보를 받으려면 어댑터 팩터리가 IHighWaterMarkInputAdapterFactory 또는 IHighWaterMarkTypedInputAdapterFactory 인터페이스를 구현해야 합니다. 입력 어댑터는 상위 워터마크에서 해당 입력 스트림을 재생합니다.

모든 입력 어댑터가 이벤트를 제대로 재생하면 완전한 출력이 보장됩니다.

따라서 출력이 완전하려면 다음과 같은 사항이 충족되어야 합니다.

  • 입력 어댑터 팩터리가 IHighWaterMarkInputAdapterFactory 또는 IHighWaterMarkTypedInputAdapterFactory 인터페이스를 구현해야 합니다.

  • 중단 전에 캡처된 마지막 검사점 이후에 발생한 모든 이벤트를 복구가 끝난 후에 사용할 수 있어야 합니다.

  • 중단 중 발생한 모든 이벤트를 복구가 끝난 후에 사용할 수 있어야 합니다.

  • 모든 입력 어댑터가 이러한 이벤트를 제대로 재생해야 합니다.

  • 검사점을 설정하고 쿼리 상태를 복구해야 합니다.

[맨 위로]

출력 스트림에서의 검사점 위치를 확인하기 위해 출력 어댑터 팩터리의 Create 메서드가 호출되어 상위 워터마크 및 이 상위 워터마크의 오프셋이 제공됩니다. 이 정보를 받으려면 어댑터 팩터리가 IHighWaterMarkOutputAdapterFactory 또는 IHighWaterMarkTypedOutputAdapterFactory 인터페이스를 구현해야 합니다. 오프셋이 필요한 이유는 출력 스트림에서 검사점에 해당하는 위치가 스트림의 어느 위치에든 나올 수 있기 때문입니다.

쿼리가 제대로 재생되면 내부 쿼리 상태는 마지막 검사점 시점의 상태가 되고 마지막 검사점이 캡처된 후에 생성된 이벤트는 시스템을 다시 시작하면 생성됩니다. 즉, 마지막 검사점 이후, 중단 전에 출력으로 생성된 모든 이벤트는 복구 중 한 번 더 생성됩니다. 이것이 바로 출력 어댑터가 제거해야 하는 중복 항목입니다. 이벤트 제거 방법은 출력 어댑터에 따라 다릅니다. 예를 들어 중복 이벤트 복사본을 무시하는 방법이 있습니다.

모든 입력 어댑터가 이벤트를 제대로 재생한 후 모든 출력 어댑터가 중복 이벤트를 제대로 제거하면 동일한 출력이 보장됩니다.

따라서 동일한 출력을 보장하려면 위에 나온 완전한 출력에 대한 요구 사항과 함께 다음과 같은 요구 사항을 충족해야 합니다.

  • 출력 어댑터 팩터리가 IHighWaterMarkOutputAdapterFactory 또는 IHighWaterMarkTypedOutputAdapterFactory 인터페이스를 구현해야 합니다.

  • 중단 전에 캡처된 마지막 검사점 이후에 발생한 모든 이벤트를 복구가 끝난 후에 사용할 수 있어야 합니다. 스트림에서 이 위치는 출력 어댑터 팩터리를 만들 때 팩터리에 제공된 상위 워터마크 및 오프셋을 통해 식별됩니다.

  • 모든 출력 어댑터가 중복 이벤트를 제대로 제거해야 합니다.

[맨 위로]

복구 가능한 StreamInsight 응용 프로그램 빌드, 모니터링 및 문제 해결에 대한 자세한 내용은 다음 항목을 참조하십시오.

재생 및 중복 제거를 비롯하여 복구 가능한 응용 프로그램의 전체 코드 샘플은 Codeplex의 StreamInsight 샘플 페이지에서 검사점 설정 샘플을 참조하십시오.

[맨 위로]

표시: