Skip to content

Instantly share code, notes, and snippets.

@sebprunier
Last active December 14, 2015 17:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save sebprunier/5123503 to your computer and use it in GitHub Desktop.
Save sebprunier/5123503 to your computer and use it in GitHub Desktop.
Nantes JUG - 18 mars 2013

Description

Traçabilité d'une architecture distribuée avec NodeJS et MongoDB

Les architectures distribuées soulèvent un certains nombre de problématiques en terme de traçabilité : détection des anomalies, suivi des utilisateurs, mesure des performances des différents services ... Durant cette session, nous vous montrerons - démonstration à l'appui - comment nous avons apporté une solution simple à ces problématiques, en mettant en place un système de consolidation de logs avec Node.js et MongoDb. Code Story 2013

Une des bonnes nouvelles du début d’année a été le concours Code Story pour l’édition 2013 de Devoxx France. Une superbe occasion de développer et de tester de nouvelles technos, tout en s'amusant ! Nous débuterons la session par un retour sur notre participation à la première phase de ce concours, en vous présentant et en comparant nos choix technologiques.

Partie 1 - Code Story

  • Présentation de la phase 1 du concours Code Story 2013
    • Sondage
      • Qui connait Code Story ?
      • Qui a participé ?
      • Qui va à Devoxx France ?
    • Rappel de l'énoncé
      • "Mettre à disposition un serveur web public qui doit répondre à des questions"
      • Exemple avec la première question sur nos deux instances
        • curl "http://[server_id]/?q=Quelle+est+ton+adresse+email"
      • D'autres exemples ...
        • curl "http://[server_id]/?q=(1+2)/2"
        • Scalaskel : curl "http://[server_id]/scalaskel/change/21"
        • Jajascript : time curl -X POST -d @flights.json "http://[server_id]/jajascript/optimize"
          • flights.json = [ { "VOL": "MONAD42", "DEPART": 0, "DUREE": 5, "PRIX": 10 }, { "VOL": "META18", "DEPART": 3, "DUREE": 7, "PRIX": 14 }, { "VOL": "LEGACY01", "DEPART": 5, "DUREE": 9, "PRIX": 8 }, { "VOL": "YAGNI17", "DEPART": 5, "DUREE": 9, "PRIX": 7 } ]
  • Explication de ce qu'on va faire
    • Imaginer de nouvelles questions
    • Objectif : vous montrer nos choix technologiques et implémentant les réponses à ces nouvelles questions
    • Nouvelle question 1 - la stack de Jérôme
      • curl "http://[server_id]/?q=Veux+tu+encore+jouer(OUI|NON)"
      • ((une autre question ?))
      • ((TODO Jérôme : préparer la démo))
    • Nouvelle question 2 - la stack de Sébastien
      • Envoi d'un énoncé au format Markdown : curl -X POST -d @enonce.md "http://[server_id]/enonce/3"
        • enonce.md = "Sur l'URL /capitalize?data=xxx, votre serveur doit renvoyer la valeur du paramètre 'data' en majuscule"
        • curl "http://[server_id]/capitalize?data=NantesJug"
      • ((TODO Sébastien : préparer la démo))
    • Evoquer la stack de Gaëtan
      • Python et Google AppEngine

Partie 2 - Traçabilité avec NodeJS et MongoDB

Détails des slides de la présentation :

  • Titre
  • Architecture
    • Un slide animé qui présente notre architecture distribuée. L'idée est de partir que quelques services qui intéragissent, puis d'en ajouter de nouveaux avec de nouvelles interactions. Jusqu'à obtenir un joli plat de nouilles ! :-)
  • Infrastructure
    • Serveur d'app et clusters : montrer qu'un même service est déployé plusieurs fois, sur plusieurs machines différentes
  • Objectif 1 : Traçabilité
    • Image "SourceMap"
    • Montrer avec un schéma l'exécution d'une requête d'un bout à l'autre de l'architecture
  • Objectif 2 : Détection des anomalies
    • Le hamburger géant, avec le cheval
    • Montrer une erreur sur une instance d'un service
  • Objectif 3 : Mesure des performances
    • Les sauteurs de haies
    • Montrer des timers service par service sur une requête complète
  • Que trace-t-on ?
    • Lister les éléments tracés
    • L'importance des request ids
  • Comment trace-t-on ?
    • Dans les fichiers de logs !
  • Comment transporte-t-on les éléments à tracer ?
    • Théorie : Headers HTTP, headers SOAP
    • Pratique : Exemple intercepteurs REST, Spring, WS ...
  • Besoin de consolider !
  • Les FBI : fausses bonnes idées
    • Logguer en BDD
  • Une bonne pratique
    • Au plus proche de la machine : fichier de logs
  • Consolidation asynchrone
    • Schéma global de l'architecture de notre solution
  • Le choix de nodeJS
    • Pour les agents (logs scanners)
    • Pour le serveur de consolidation
      • express
  • Le choix du NoSQL
    • Schema less : faciliter l'intégration de nouvelles traces
    • Performances en écriture
    • Eventual Consistency : ce n'est pas du tout un problème pour notre use-case
  • Le déploiement des agents
    • Avec svn update
  • La configuration des agents
    • Centralisation de la configuration sur le serveur
  • La console de restitution
  • Démo
@jcreigno
Copy link

Partie 2 :
à la fin, il faudrait parler de logstash / graylog2 en expliquant les différences.

@jcreigno
Copy link

sinon ça me plait bien !

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment