IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Microsoft Azure Discussion :

Fonction AZURE et queue message FIFO


Sujet :

Microsoft Azure

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 85
    Par défaut Fonction AZURE et queue message FIFO
    Bonjour,

    J'ai plusieurs fonction azure qui tournent dans un plan, chacune ayant un trigger sur une queue storage.

    Mon problème est que ce type de queue n'est pas de type FIFO. Globalement j'aimerai que les messages reçu soient traité dans l'ordre d'arrivé (indépendamment de la queue dans laquelle ils arrivent).

    Ce n'est pas possible actuellement et de ce que je comprends, le service bus permet d'ordonner les messages mais uniquement dans une session (un paquet) or je n'ai pas ce type de problématique.

    Je cherche un trigger de message qui les prenne par ordre d'arrivé.

    Une idée ?

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Le Service Bus repond a cette problematique et garanti le FIFO : Storage queues and Service Bus queues - compared and contrasted.

    Si tu as absolument besoin du FIFO, il faut donc laisser tomber Azure Storage Queue et passer au Service Bus.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 85
    Par défaut
    De ce que je comprends, il faut utiliser les sessions pour garantir l'ordre, mais dans un lot !

    J'ai des messages qui arrivent au fil de l'eau et je les traitent 1 par 1 car certains peuvent prendre du temps (traitement d'image). Il arrive que ma file d'attente contiennent parfois une cinquantaine de message et qu'un message stagne en file d'attente car d'autres lui passent devant (j'utilise la queue de mon storage).


    Concrètement je cherche un trigger pour ma fonction azure qui prenne les messages par ordre d'arrivé (les plus vieux en premier), sachant que je n'ai pas de notion de lot, mais je ne trouve pas !

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Effectivement avec le Service Bus il faut utiliser les sessions. Je ne vois pas ce qui t'en empeche, tu peux creer une session par message... Le Service Bus contient des mecanismes internes qui garantissent le FIFO (par ex. Message sequencing and timestamps).

    Si tu n'es reellement pas en mesure d'utiliser les sessions du Service Bus, alors il faut que tu installes une VM et mantiennes ton propre systeme de queue comme par exemple Rabbit MQ.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 85
    Par défaut
    Je viens de faire quelques tests avec les sessions et le problème reste le même, l'ordre n'est pas respecter car 1 message = 1 session.

    Je vais essayer de présenter le problème sous un autre angle car je cherche peut-être dans la mauvaise direction.

    J'ai un lot de fonction Azure qui fait de la conversion de PDF en image et inversement. Ces fonctions sont optimisées pour exploiter au max la capacité CPU d'un nœud azure c'est pourquoi je ne traite que les messages un part un.

    Les demandes/messages arrivent au fil de l'eau, je peux donc avoir 1 message en fil à l'instant T et 20 messages à l'instant T+1 et certains messages peuvent prendre 10s à être traités alors que d'autres 5min.

    Mon problème actuel est que je n'arrive pas à scaler assez vite pour absorber un pic de charge et de ce fait certain message dans ma queue storage tardent parfois à être traités. Concrètement, si en moyenne tous les temps de traitement sont raisonnables, j'en ai toujours un où deux qui passent aux oubliettes pendant quelques temps, d'où ma demande pour le FIFO afin de réduire au mieux le temps d'attente des plus mal servit.

    Avez-vous une idée d'optimisation ?

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Merci pour les precisions !

    Citation Envoyé par rori Voir le message
    J'ai un lot de fonction Azure qui fait de la conversion de PDF en image et inversement. Ces fonctions sont optimisées pour exploiter au max la capacité CPU d'un nœud azure c'est pourquoi je ne traite que les messages un part un.
    Est-ce que tu peux preciser le scenario ici ? Par exemple, est-ce que ta perception que le FIFO n'est pas respecte ne viendrait pas que les fonctions Azure tournent en parallele, du coup les messages sont pris dans le bon ordre, mais comme certains sont traites plus vite que d'autres, ca te donne l'impression que le FIFO ne fonctionne pas ?

    Avec le Service Bus, c'est literalement garanti, meme entre plusieurs sessions.

    Si mon hypothese se confirme, alors une solution serait d'avoir une function Azure qui agirait en tant qu'orchestrateur qui depilerait et qui dispacherai les messages sur les differentes fonctions Azure. Ca revient au meme, sauf que tu as un moyen de t'assurer du FIFO toi-meme (le service bus gere ca tout seul donc attention a ne pas reinventer la roue).
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 85
    Par défaut
    Je viens de refaire des tests dans un environnement "propre" car ma solution est sur .NET Framework et les sessions sont disponible uniquement sur CORE. Mes messages semblent donc effectivement parsé en FIFO mais j'ai un autre soucis que je ne m'explique pas ! J'ai un délais de 1 minute entre chaque parsing de message et je ne comprends pas d'où cela vient !

  8. #8
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Difficile a dire sans voir le code et sans pouvoir reproduire le scenario. Si tu debug pas a pas, est-ce que tu peux voir quelle est la ligne qui prend du temps ? Est-ce que tu rouvres ta connexion a chaque fois ?
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 85
    Par défaut
    La fonction Azure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public static class Function1
        {
            [FunctionName("MessageHub")]
            public static void Run([ServiceBusTrigger("messagehub2", Connection = "AzureBus", IsSessionsEnabled = true)]string myQueueItem, ILogger log)
            {
                log.LogInformation($"Test: {myQueueItem}");
            }
        }
    Le host.json
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    {
      "version": "2.0",
      "extensions": {
        "serviceBus": {
     
          "SessionHandlerOptions": {
            "AutoComplete": true,
            "MaxConcurrentSessions": 1,
            "MaxAutoRenewDuration": "00:05:00"
          }
        }
      }
    }
    Je pense qu'on peut difficilement faire plus simple

    Le Bus contient déjà mes 100 messages quand je démarre la fonction. Le trigger prend un message par minute

Discussions similaires

  1. [POSTFIX]redirection user=>user en fonction du contenu du message
    Par boo64 dans le forum Administration système
    Réponses: 0
    Dernier message: 20/01/2012, 10h14
  2. Réponses: 3
    Dernier message: 26/06/2008, 21h33
  3. Réponses: 2
    Dernier message: 10/01/2007, 23h28
  4. Réponses: 4
    Dernier message: 11/07/2006, 22h58
  5. Fonction de traitements des messages VC\C++
    Par Pe04 dans le forum MFC
    Réponses: 6
    Dernier message: 23/02/2006, 15h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo