none
Alerte de retard d'une tache pour 500 listes de tache réparties dans 500 sites ? RRS feed

  • Question

  • Bonjour,

    Je recherche le moyen le plus efficace de déclencher une alerte email pour toute tache dont la date d'échéance est échue, donc la date et l'heure inférieure à la date et heure du moment de la vérification, et ce, pour une vérification a intervalle de 5 minutes et dans des listes de taches réparties sur environ 500 sites dans une meme web app.

    Quel serait le meilleur moyen selon vous de pouvoir arriver au résultat voulut sans rencontrer de problème de performance ?

    J'ai pensé a une requete de contenu. Il semblerait qu'elle ne sera jamais assez rapide. Est-ce vrai ? Une requete de recherche ?

    Toute les lectures me conduisent a conclure que la requête ne pourra pas se faire dans l'intervalle de 5 minutes si elle doit naviguer a travers 500 sites ou plus.

    J'en suis arrivé a la conclusion qu'il serait mieux de dupliquer le minimum d'information de chaque nouvelle tache créée dans une liste centrale sur laquelle on ferait agir un timerjob. Ainsi, on évite au timerjob de devoir parcourir les 500 sites. Le timer job s'exécuterait alors en quelques secondes au grand maximum.

    Quelle est la solution que vous recommandé selon votre expérience ?

    Encore merci pour votre aide.

    Christophe

    samedi 15 septembre 2012 21:37

Réponses

  • Clairement le parcours des sites est long mais surtout les SPSIte (les collections donc), les SPWeb sont beaucoup plus vite chargés... et oui les SPQuery sont pas forcement hyper rapide sur du parcours recursif. (bien qu'avec un peu de mise en cache ça passe mieux)
     
    Votre idée d'une liste globale reprenant les infos pour faire l'alerte me semble judicieuse.  Elle pourrait etre alimenté/synchronisée par des EventReceiver branchés sur les listes de tâches des différents espaces de travail. Ceci dit j'ai peur que cette liste devienne très longue et que cela impacte de nouveau les perfs. De plus le code pour garder synchro cette liste risque d'etre fastidieux...
     
    Une autre idée serait peut être de faire un batch/timer jobs qui "tourne en permanence" avec plusieurs threads qui parcours en parallèle les différents espaces de travail. Cela peut suffire pour parcourir l'ensemble assez régulièrement ! Après selon l'activité sur les espaces de travail et le nb d'utilisateurs il faut peut être aussi envisager une infrastructure à la hauteur du timing désiré...
     
    Enfin l'idée de vouloir tout parcourir en 5 minute me semble un peu "inutile" fonctionnellement parlant dans la mesure où derrière ce sont des emails qui partent et que le temps de transport d'un mail n'est pas forcement garanti.
     


    Edit : Autres idée >

    Un service windows tourne en permanence. Il est chargé de 2 choses :

    1) Maintenir en mémoire un index "temps réel" de toutes les tâches (url + id + date échéance)

    2) Envoyer les mails d'alertes régulièrement en analysant le contenu de l'index en mémoire (sur un thread dédié par exemple) ce qui sera quasi instantané (pour l'analyse, pas l'envoi de mails)

    Pour la 1) on peut imaginer un système type synchro full / synchro incrémentielle/temps réel

    synchro full -> au démarrage du service et régulièrement (1 fois par jour par exemple) : parcours complet de toutes les listes de tâches de tous les sites et alimentation de l'index

    synchro incrémentale / temps réel -> des EventReceiver branchés sur les listes de tâches interceptent tout ajout /modif/suppression et appelle en WCF le service qui gère l'index pour mise à jour

    Avec ça le goulet d'étranglement ne sera plus SharePoint mais le serveur smtp :)


    Blog Sharepoint : www.paslatek.net Twitter : @LimozinLionel



    dimanche 16 septembre 2012 13:06

Toutes les réponses

  • Clairement le parcours des sites est long mais surtout les SPSIte (les collections donc), les SPWeb sont beaucoup plus vite chargés... et oui les SPQuery sont pas forcement hyper rapide sur du parcours recursif. (bien qu'avec un peu de mise en cache ça passe mieux)
     
    Votre idée d'une liste globale reprenant les infos pour faire l'alerte me semble judicieuse.  Elle pourrait etre alimenté/synchronisée par des EventReceiver branchés sur les listes de tâches des différents espaces de travail. Ceci dit j'ai peur que cette liste devienne très longue et que cela impacte de nouveau les perfs. De plus le code pour garder synchro cette liste risque d'etre fastidieux...
     
    Une autre idée serait peut être de faire un batch/timer jobs qui "tourne en permanence" avec plusieurs threads qui parcours en parallèle les différents espaces de travail. Cela peut suffire pour parcourir l'ensemble assez régulièrement ! Après selon l'activité sur les espaces de travail et le nb d'utilisateurs il faut peut être aussi envisager une infrastructure à la hauteur du timing désiré...
     
    Enfin l'idée de vouloir tout parcourir en 5 minute me semble un peu "inutile" fonctionnellement parlant dans la mesure où derrière ce sont des emails qui partent et que le temps de transport d'un mail n'est pas forcement garanti.
     


    Edit : Autres idée >

    Un service windows tourne en permanence. Il est chargé de 2 choses :

    1) Maintenir en mémoire un index "temps réel" de toutes les tâches (url + id + date échéance)

    2) Envoyer les mails d'alertes régulièrement en analysant le contenu de l'index en mémoire (sur un thread dédié par exemple) ce qui sera quasi instantané (pour l'analyse, pas l'envoi de mails)

    Pour la 1) on peut imaginer un système type synchro full / synchro incrémentielle/temps réel

    synchro full -> au démarrage du service et régulièrement (1 fois par jour par exemple) : parcours complet de toutes les listes de tâches de tous les sites et alimentation de l'index

    synchro incrémentale / temps réel -> des EventReceiver branchés sur les listes de tâches interceptent tout ajout /modif/suppression et appelle en WCF le service qui gère l'index pour mise à jour

    Avec ça le goulet d'étranglement ne sera plus SharePoint mais le serveur smtp :)


    Blog Sharepoint : www.paslatek.net Twitter : @LimozinLionel



    dimanche 16 septembre 2012 13:06
  • pas beaucoup d'autres avis.... :)

    Avez vous pu faire un peu de benchmarking sur les différentes idées ? avez vous un retour à partager ?

    Merci


    Blog Sharepoint : www.paslatek.net Twitter : @LimozinLionel

    jeudi 27 septembre 2012 13:34
  • Je n'ai pas eu d'autres idées. Et je n'ai pas encore pu tester votre solution. J'aimerais autant que possible croire qu'il existe un autre moyen que de tenir a jour une liste centrale de doublons des éléments pour lesquels on souhaite envoyer une alerte. J'espère que votre solution pourra marcher le moment venu. je vous tiens au courant. Encore merci.
    vendredi 12 octobre 2012 01:15
  • Bonjour neochop,

    Je marque la réponse de Lionel comme réponse, car elle me semble très correcte. Au cas contraire, vous pouvez toujours démarquer la réponse et l'on continura à vous aider.

    Cordialement,

    Gokan


    Gokan Ozcifci
    SharePoint Community Expert

    vendredi 19 octobre 2012 11:20