Neoxia s’est mobilisé tout au long des Tech Days 2010, pour connaître les dernières tendances chez Microsoft. C’est donc l’occasion de vous faire un retour sur ce que nous avons entendu, et ce que nous en pensons. Aujourd’hui, c’est une session sur StreamInsight et BizTalk qui a attiré notre attention.

BizTalk Server offre avec le Business Activity Monitoring, ou BAM, le moyen de suivre d’un point de vue métier l’ensemble des échanges entre les applications d’un SI. En effet, le rôle d’EAI que joue BizTalk en fait un excellent point d’observation. Et ce point de vue très haut niveau permet ensuite à des personnes du métier, au travers d’interfaces adaptées, de prendre des décisions éclairées.

Certaines entreprises, de part leur métier doivent traiter des quantités d’informations importantes, comme des mesures physiques, des transactions bancaires, des entrées/sorties de stock, ou bien encore des clics sur un site Web. Mais pour traiter puis analyser ces flux volumineux de données, et enfin prendre des décisions, BizTalk semble mal taillé.

Les équipes Microsoft se sont donc penchées sur le problème, en proposant une évolution portée dans SQL Server 2008 R2 : StreamInsight.

Le Complex Event Processing

Extraire des informations pertinentes d’un flux volumineux de données pour améliorer la qualité d’un processus, ou anticiper une décision, est un paradigme appelé Complex Event Processing, ou CEP. Les données en entrée sont considérées comme des événements. Nous prendrons comme exemple des entrées et sorties d’un stock d’articles. Nous admettrons que l’événement est simplement caractérisé par la référence de l’article, le sens du mouvement (entrée ou sortie), le nombre d’articles concernés, et l’état du stock après le mouvement.

Evidemment, on peut être intéressé de connaitre les articles pour lesquels le stock est inférieur à un certain seuil, nécessitant ainsi le déclenchement d’une commande chez le fournisseur. On peut également souhaiter connaître les références pour lesquels, dans une certaine fenêtre de temps, la quantité d’articles concernés par un mouvement, quel qu’il soit, dépasse un certain seuil. Cela permet de connaître les références pour lesquels il y a une forte rotation de stock, et ainsi discuter de l’intérêt de conserver un stock sur ces articles.

C’est le volume de données qui transitent dans le flux qui rend l’analyse complexe. Pour des raisons évidents de performance, il n’est pas possible de déclencher systématiquement un processus pour traiter chaque événement, d’où l’importance d’appliquer un filtre préalable. C’est ce qui a donné naissance au principe de CEP.

StreamInsight

La nouvelle mouture de SQL Server intègre un moteur de CEP, appelé StreamInsight. Ce moteur analyse des quantités importantes d’événements dans des temps proches de la milliseconde. Le moteur effectue ensuite un filtrage des événements, pour informer un utilisateur d’un événement particulier dans tout le flux. Pour paramétrer le moteur, on peut s’appuyer sur une API .NET fournie avec SQL Server. Il est d’abord nécessaire de définir un adaptateur d’entrée et un adaptateur de sortie. L’adaptateur d’entrée permet de connecter le flux d’événements à StreamInsight. L’adaptateur de sortie permet de rediriger les informations extraites du flux pour qu’elle soit consommée. On peut imaginer n’importe quel type d’adaptateur en entrée ou en sortie : fichiers, HTTP, etc. Ils sont en règle général conçus pour un usage très particulier. Il en existe même un sur le web pour le site Yahoo Finances.

Le filtrage des événements s’effectue grâce à des requêtes LINQ. Les fonctions de LINQ utilisées sont principalement la projection, la jointure, l’union, l’agrégation, etc. Mais chose intéressante, une extension intégrée à l’API permet d’agréger les données sur une certaine période de temps. On peut ainsi obtenir des données de plus haut niveau, et prendre des décisions sur des agrégats temporels. Dans notre exemple, nous pourrions utiliser ces nouvelles méthodes d’extension pour agréger les rotations de stock d’un article dans la fenêtre de temps souhaitée.

Enfin, on peut également faire appel à des données de références, situées dans le moteur de base de données relationnelle de SQL Server. On peut ainsi définir un niveau de stock minimum pour chaque article, de manière à générer l’alerte au moment opportun.

Et BizTalk dans tout ça ?

Certains se demanderont s’il n’est pas possible d’utiliser StreamInsight et BizTalk de concert. Et ils auront bien raison ! Reprenons notre exemple. Nous souhaitions être alerté de l’imminence d’une fin de stock pour un article. Il peut être intéressant de déclencher un workflow de commande pour l’article concerné. Dans ce cas, une solution basée sur StreamInsight et BizTalk peut donner entière satisfaction.

Les événements de mouvements de stocks sont adressés au moteur CEP de StreamInsight. Celui-ci extrait les événements indiquant l’imminence d’une fin de stock, en fonction de données de références, puis transmet le tout à BizTalk. Dans ce cas, on peut imaginer que l’adaptateur de sortie crée un fichier, que BizTalk détecte et analyse. Dès qu’il prend en charge l’événement, devenu un message, BizTalk déclenche l’exécution d’une orchestration intégrant l’appel à un système externe de commande, lié au fournisseur. BizTalk peut ensuite décider ou non de traiter les messages qui suivent en fonction de la réalisation de la commande, et de la date prévisionnelle de livraison.

Voici donc un scénario dans lequel les deux outils trouvent leur place, et forment un ensemble cohérent et performant. On peut maintenant souhaiter connaître les articles pour lesquels la fréquence des commandes est importante, ou suivre les processus de commande est connaître les fournisseurs dont le temps de traitement est le plus long. On va pouvoir dans ce cas s’appuyer sur le BAM de BizTalk. Grâce notamment à l’API fournie avec le BAM, on pourra consolider les informations pour tracer le processus de bout en bout, en intégrant des informations depuis le moteur CEP.

Un couple idéal

Avec l’exemple que nous avons suivi, nous avons essayé de montrer l’intérêt la technologie de Complex Event Processing intégré à SQL Server 2008 R2 : StreamInsight. Celui-ci offre une approche réellement différente, pour traiter et filtrer des données de masse.

Nous avons également vu à quel point StreamInsight et BizTalk peuvent être complémentaires, au travers de ce scénario. Devant ce couple idéal, le BAM apparaît comme un maitre de cérémonie tout à fait pertinent.

Face à ce constat, on peut légitimement se poser la question, entre autres, de performance. A cela, je n’aurais qu’une réponse : Just Test It !