Écrit par

Associate professor at Igor Sikorsky Kyiv Polytechnic Institute
Article Iryna Mykhailova · 3 h il y a 6m read

Maintien du traitement FIFO avec une taille de pool plus qu'à 1

Introduction

L’ajout récent des groupes FIFO permet de maintenir un traitement des messages en mode First-In, First-Out (FIFO) dans une production d’interopérabilité même lorsque le Pool Size est supérieur à 1, ce qui permet d’améliorer les performances sans sacrifier l’exactitude. Cette fonctionnalité apparaît pour la première fois dans InterSystems IRIS® data platform, InterSystems IRIS® for Health et InterSystems Health Connect™ à partir de la version 2025.3.

Le traitement des messages en mode First-In, First-Out est essentiel dans de nombreux scénarios d’intégration, en particulier dans le secteur de la santé. Traditionnellement, l’ordre FIFO est appliqué en configurant chaque hôte métier pour ne traiter qu’un seul message à la fois (Pool Size = 1). Bien qu’efficace, cette approche peut limiter le débit et sous-utiliser les ressources système. Les groupes FIFO permettent de préserver l’ordre FIFO lorsque cela est nécessaire, sans imposer un Pool Size de 1.

 

Groupes FIFO : la clé du parallélisme avec conservation de l’ordre FIFO

Les groupes FIFO offrent un moyen de préserver l’ordre au sein d’un groupe défini de messages liés, tout en permettant le traitement parallèle entre des groupes non liés.

Au lieu d’imposer FIFO globalement, les groupes FIFO vous permettent de :

  • Maintenir l’ordre FIFO pour les messages qui dépendent les uns des autres.
  • Traiter simultanément des flux de messages indépendants.

Fonctionnement des groupes FIFO

  1. Déterminer un identifiant de groupe FIFO Identifiez une valeur dans le message qui définit une dépendance, par exemple le MRN du patient (Medical Record Number).  Le choix d’un identifiant de groupe FIFO approprié est essentiel. Dans le domaine de la santé, un exemple courant consiste à utiliser l’identifiant du patient, mais tout identifiant spécifique au métier peut être utilisé.
  2. Affecter les messages à des groupes FIFO Utilisez une transformation de données ou du code personnalisé pour affecter à chaque message un identifiant de groupe FIFO basé sur une valeur contenue dans le message. Les messages portant le même identifiant sont garantis d’être traités dans l’ordre FIFO.
  3. Activer le traitement parallèle entre groupes Les messages appartenant à des groupes FIFO différents peuvent être traités en même temps. Le Pool Size détermine combien de groupes FIFO peuvent être traités simultanément.
  4. Contrôler le moment où les contraintes FIFO prennent fin Des hôtes de fin de traitement peuvent être définis pour libérer les contraintes FIFO une fois que l’ordre n’est plus requis en aval.

Quand utiliser les groupes FIFO

Envisagez d’utiliser des groupes FIFO lorsque :

  • Un Pool Size = 1 ne répond pas aux exigences de performance.
  • L’ordre FIFO est requis pour des sous-ensembles de messages, et non globalement.
  • L’utilisation CPU est inférieure à 80 % de la capacité et le parallélisme améliorerait le débit.
  • Les dépendances entre messages peuvent être clairement identifiées (par exemple via l’identifiant du patient, le numéro de compte ou l’identifiant de commande).

Exemple : l’identifiant du groupe FIFO est l’identifiant patient et le Pool Size = 2

Considérons un scénario de messages de santé avec un Pool Size = 2 :

  • Les patients 55, 66 et 77 ont chacun un message de pré-admission, d’admission et de sortie envoyé dans la production dans cet ordre.
  • Les messages de pré-admission, d’admission et de sortie des patients 55, 66 et 77 doivent chacun être traités dans l’ordre pour ce patient.
  • Les messages des patients 55, 66 et 77 sont indépendants.

Avec les groupes FIFO :

  • Tous les messages de chaque patient sont traités séquentiellement.
  • Un message pour n’importe quel patient peut être traité en parallèle avec le message d’un autre patient.
    • Par exemple, les pré-admissions des patients 55 et 66 peuvent être traitées en même temps.
  • Aucune séquence de messages d’un patient n’est violée, même si deux messages sont traités simultanément.

Cette approche offre à la fois exactitude et performance.

Pour plus de détails sur le traitement de ces messages pour les patients 55, 66 et 77, reportez-vous à la section Examen plus détaillé du traitement des groupes FIFO à la fin.


Exemple de configuration d’un groupe FIFO avec Pool Size > 1

Description de la production : La production accepte les données, transforme les données selon les besoins du système en aval, puis envoie les données vers le système en aval. Les messages de chaque patient doivent être traités dans l’ordre de réception (FIFO).

Étape 1 : Identifier l’identifiant du groupe FIFO

  • Déterminez ce qui définit l’ordre des messages. Cette valeur devient l’identifiant du groupe FIFO, par exemple l’identifiant du patient, le numéro de compte ou l’identifiant de commande.

Dans cet exemple : MRN comme identifiant du groupe FIFO.

Étape 2 : Choisir l’hôte de départ

  • Identifiez où le regroupement FIFO doit commencer :
    • Souvent un processus métier ou un moteur de routage.
    • Il s’agit du premier hôte métier où les messages doivent être ordonnés.

Dans cet exemple : Example.MessageRouter

Étape 3 : Créer une transformation de données pour calculer le groupe FIFO

  • Créez une transformation de données avec :
    • Source : le type de message en entrée
    • Cible : Ens.Queue.FIFOMessageGroup.Data
      • Create=new pour le message cible
  • Définissez la propriété obligatoire suivante :
    • Identifier : une chaîne dérivée du message (par exemple, l’ID patient)
  • Définissez les propriétés optionnelles si nécessaire (voir la documentation) :
    • Dependencies (optionnel) : autres groupes FIFO devant être traités en premier
    • CompletionHosts (optionnel) : hôtes responsables de la levée des contraintes FIFO

Étape 4 : Configurer l’hôte de départ

  • Sur l’hôte métier de départ :
  • Définissez Group Calculation avec le nom de la transformation de données
  • Cela active le regroupement FIFO pour les messages entrants

Étape 5 : Définir un Pool Size > 1

  • Configurez un Pool Size supérieur à 1 sur l’hôte de départ
  • Le Pool Size détermine combien de groupes FIFO peuvent être traités en parallèle
    • Par exemple, un Pool Size = 2 permet de traiter deux groupes FIFO simultanément, donc deux flux indépendants

Conclusion

L’utilisation des groupes FIFO permet d’augmenter le Pool Size au-delà de 1 en toute sécurité, en autorisant le traitement parallèle lorsque cela est possible, tout en conservant un ordre strict lorsque cela est nécessaire. Cette approche est particulièrement utile pour les intégrations à fort volume, où la performance et la cohérence sont toutes deux essentielles.


Analyse détaillée du traitement des groupes FIFO

Cette section décrit le fonctionnement du traitement avec des groupes FIFO étape par étape.

Dans l’exemple ci-dessous, la file de messages du routeur contient les messages dans l’ordre de réception. Bien que cet ordre global ne soit pas strictement respecté, l’ordre FIFO est maintenu pour chaque groupe de messages dépendants.

Exemple : traitement simultané des messages pour les patients 55, 66 et 77 avec un Pool Size = 2.

DÉBUT

  • Deux messages sont en cours de traitement : pré-admission du patient 55 et du patient 66


ÉTAPE SUIVANTE

  • Le message de pré-admission du patient 66 est terminé, celui du patient 55 est toujours en cours

  • Message suivant :
    • Pré-admission du patient 77 (aucun traitement en cours pour ce patient)


ÉTAPE SUIVANTE

  • Pré-admission du patient 77 terminée, patient 55 toujours en cours

  • Message suivant :
    • Impossible de traiter les messages du patient 55 (toujours en cours)
    • Traitement possible pour le patient 77


ÉTAPE SUIVANTE

  • Pré-admission du patient 55 terminée, admission du patient 77 en cours

  • Message suivant :
    • Admission du patient 55 (aucun traitement en cours pour ce patient)


ÉTAPE SUIVANTE

  • Admission du patient 77 terminée, admission du patient 55 en cours

  • Message suivant :
    • Impossible de traiter la sortie du patient 55 (toujours en cours)
    • Admission du patient 66 possible