Résistance de StreamInsight

Lorsqu'une défaillance du système interrompt le traitement des événements dans une application StreamInsight, vous vous attendez à ce que les sorties de l'application reprennent rapidement et convenablement une fois le problème réglé.

  1. Vous souhaitez que le contenu des flux de sortie soit le même que si la défaillance n'avait pas eu lieu.

  2. Vous souhaitez également que la défaillance soit aussi brève que possible.

L'édition Premium d'StreamInsight contient une fonction de point de contrôle qui enregistre régulièrement l'état des requêtes sur le disque dur. Vous pouvez utiliser cette fonction, ainsi que les adaptateurs d'entrée et de sortie, afin d'obtenir un flux de sortie équivalent une fois la défaillance réparée. Les adaptateurs d'entrée rédigés correctement ne relisent que les événements manqués depuis le dernier point de contrôle : ainsi, la durée de la récupération est réduite au maximum.

Dans cette rubrique

  • Points de contrôle

  • Trois niveaux de résistance

  • Limites supérieures

  • État et événements non enregistrés dans le point de contrôle

  • Relecture par les adaptateurs d'entrée

  • Élimination des doublons par les adaptateurs de sortie

  • Informations supplémentaires

Points de contrôle

Une opération de point de contrôle StreamInsight enregistre l'état d'une requête sur le disque de manière cohérente. Après une défaillance, l'état enregistré lors du dernier point de contrôle peut être restauré.

Les points de contrôle ne peuvent garantir à eux seuls que le flux d'événements généré par une requête en temps normal sera identique aux flux d'événements généré après une défaillance. Deux problèmes peuvent créer des différences :

  • Des événements peuvent être manqués. Les événements reçus par StreamInsight après le point de contrôle, ainsi que les événements qui se sont produits entre la défaillance et la récupération, ne sont pas pris en compte par le point de contrôle. Ces événements doivent être de nouveau présentés au serveur pour être intégrés dans les résultats de la requête. Pour résoudre ce problème, vous devez utiliser des adaptateurs d'entrée capables de relire des événements manqués.

  • Des événements peuvent être dupliqués. Les événements générés par StreamInsight après le dernier point de contrôle réalisé avant la défaillance sont de nouveau générés pendant la récupération lorsque les adaptateurs jouent leur rôle et relisent les événements. Pour résoudre ce problème, vous devez utiliser des adaptateurs de sortie capables de supprimer ces doublons d'événements.

Le journal des points de contrôle désigne un jeu de fichiers comprenant les informations du point de contrôle enregistrées. Le chemin d'accès du journal est désigné lors de la configuration de la résistance du serveur. Le répertoire de destination doit être réservé à StreamInsight et être traité de manière opaque.

[HAUT]

Trois niveaux de résistance

StreamInsight vous permet d'atteindre trois niveaux de résistance. Le niveau choisi dépend de vos besoins et de votre capacité à modifier les applications et les adaptateurs existants.

  1. Conservation des états. Vous pouvez utiliser les points de contrôle pour enregistrer les requêtes sans modifier les adaptateurs d'entrée ou de sortie. Ce niveau de résistance ne peut pas garantir que le flux généré après une défaillance sera identique au flux généré en temps normal, car les événements qui se sont produits après le dernier point de contrôle ont été perdus. Toutefois, ce problème n'en est pas un quand les résultats équivalents ne sont pas nécessaires et quand il est possible d'obtenir des sorties correctes avec des entrées partielles.

  2. Sortie complète. Aucun événement ne sera manqué en changeant les adaptateurs d'entrée pour relire les événements. Le flux de sortie d'une requête récupérée sera logiquement équivalent à un sur-ensemble du flux de sortie d'une requête ininterrompue, et les événements supplémentaires seront des doublons d'événements du flux ininterrompu.

  3. Sortie équivalente. Changer les adaptateurs d'entrée, ainsi que les adaptateurs de sortie pour éliminer les événements dupliqués, suffit à garantir une sortie logiquement équivalente.

[HAUT]

Limites supérieures

La limite supérieure correspond à l'heure la plus avancée de l'application constatée dans une période donnée du flux d'événements. Lorsqu'un point de contrôle est demandé, StreamInsight capture un point de contrôle en fonction de la limite supérieure de chacune des entrées.

[HAUT]

État et événements non enregistrés dans le point de contrôle

Afin de comprendre les éléments requis pour obtenir une sortie complète et équivalente après une défaillance, il est utile de savoir quel état et quels événements ne sont pas enregistrés dans les points de contrôle StreamInsight. Ceux-ci doivent être enregistrés séparément pour pouvoir être récupérés après une défaillance.

État ou événements non enregistrés dans le point de contrôle

Solution

Événements survenus après le dernier point de contrôle et avant la défaillance

Pour pouvoir relire ces événements après une défaillance, ceux-ci doivent être enregistrés dans un magasin de données.

Événements survenus pendant la défaillance

Ces événements doivent être enregistrés dans un magasin de données pour pouvoir être récupérés après une défaillance.

Connaissance des événements générés en tant que sorties après le dernier point de contrôle et avant la défaillance.

Ces événements doivent être enregistrés dans un magasin de données pour que les adaptateurs de sortie puissent supprimer les doublons d'événements après la récupération.

État géré par des adaptateurs d'entrée ou de sortie personnalisés

Pour pouvoir récupérer cet état après une défaillance, celui-ci doit être enregistré dans un magasin de données à l'aide des adaptateurs d'entrée ou de sortie personnalisés.

[HAUT]

Relecture par les adaptateurs d'entrée

Lorsqu'une application StreamInsight redémarre après une défaillance, l'appel à la méthode Create de la fabrique d'adaptateur d'entrée transmet la limite supérieure à la fabrique d'adaptateur. (La fabrique d'adaptateur doit implémenter les interfaces IHighWaterMarkInputAdapterFactory ou IHighWaterMarkTypedInputAdapterFactory pour pouvoir recevoir ces informations.) L'adaptateur d'entrée doit pouvoir relire son flux d'entrée à partir de la limite supérieure.

Vous obtiendrez une sortie complète si tous les adaptateurs d'entrée effectuent correctement la relecture.

Par conséquent, pour obtenir une sortie complète, les conditions suivantes doivent être remplies :

  • Une fabrique d'adaptateur d'entrée implémente les interfaces IHighWaterMarkInputAdapterFactory ou IHighWaterMarkTypedInputAdapterFactory.

  • Tous les événements survenus après le dernier point de contrôle et enregistrés avant la défaillance sont disponibles après la récupération.

  • Tous les événements survenus pendant la défaillance sont disponibles après la récupération.

  • Tous les adaptateurs d'entrée ont correctement relus ces événements.

  • L'état de requête a fait l'objet d'un point de contrôle et a pu être récupéré.

[HAUT]

Élimination des doublons par les adaptateurs de sortie

Pour localiser le point de contrôle dans le flux de sortie, l'appel à la méthode Create de la fabrique d'adaptateur de sortie fournit la limite supérieure, ainsi qu'un décalage de cette dernière. (La fabrique d'adaptateur doit implémenter les interfaces IHighWaterMarkOutputAdapterFactory ou IHighWaterMarkTypedOutputAdapterFactory pour pouvoir recevoir ces informations.) Ce décalage est nécessaire car le point de contrôle peut se trouver n'importe où dans le flux de sortie.

Si la requête est relue correctement, l'état de la requête interne sera le même que lors du dernier point de contrôle et tous les événements produits après celui-ci seront générés au redémarrage. Ainsi, tous les événements produits en tant que sortie après le dernier point de contrôle mais avant la défaillance seront générés une seconde fois lors de la récupération. Ce sont les doublons que l'adaptateur de sortie doit supprimer. L'adaptateur de sortie décide de la méthode de suppression : par exemple, il peut se contenter d'ignorer les doublons.

Pour obtenir une sortie équivalente, tous les adaptateurs de sortie doivent éliminer correctement les doublons une fois la relecture effectuée par tous les adaptateurs d'entrée.

Par conséquent, pour obtenir une sortie équivalente, les conditions suivantes doivent être remplies et viennent s'ajouter aux conditions nécessaires pour obtenir une sortie complète :

  • Une fabrique d'adaptateur de sortie qui implémente les interfaces IHighWaterMarkOutputAdapterFactory ou IHighWaterMarkTypedOutputAdapterFactory.

  • Tous les événements survenus après le dernier point de contrôle et enregistrés avant la défaillance sont disponibles après la récupération. (Leur emplacement dans le flux de données est localisé grâce à la limite supérieure et au décalage fournis à la fabrique d'adaptateur de sortie lors de sa création.)

  • Tous les adaptateurs de sortie ont correctement supprimé les doublons d'événements.

[HAUT]

Informations supplémentaires

Pour obtenir plus d'informations sur la conception, le contrôle et la résolution des problèmes liés aux applications résistantes StreamInsight, consultez les rubriques suivantes :

Pour visualiser des exemples de code de bout en bout complets d'une application résistante qui comprend des fonctions de relecture et de déduplication, consultez l'exemple de point de contrôle de la page d'exemples StreamInsight sur le site Codeplex.

[HAUT]