Présentation donnée au breizhCamp 2014 concernant un retour d'expérience d'une mission dont l'objectif était de passer de 20 000 utilisateurs à 4 millions.
Pour ce faire, il a été nécessaire de revoir certaines parties du SI afin de pouvoir stocker en masse les données des utilisateurs mais également afin d'être capable de les traiter.
Ce retour d'expérience montrera comment, avec une approche et des technologies simples, il a été possible de revoir la façon de faire et comment il a été proposé de traiter le sujet.
Il montrera également les pistes qui ont été étudiées et les solutions qui ont été retenues.
Les différents points qui seront abordés seront : Cassandra, REST, Netty, Spring Integration, Jolokia, Metrics saupoudré d'un peu de "Big Data".
6. Contexte
Fonctionnel
6
Réception de relevés de compteurs (fichiers xml)
Fournir une consolidation (valorisation) des consommations en fonction
de différents critères
Algorithmes de lissage et de détection à faire sur les données
Algorithmes de valorisation à faire sur les données
8. Contexte
État des lieux
8
Algorithmes de lissage et de détection fait au moment de la collecte
long »
=> anomalies « courantes »
Algorithmes de consolidation exécutés par batch sur les données
stockées
13. Collecteur
Objectifs
13
Batch de collecte avec stockage dans une solution propriétaire
Objectifs :
Valider différentes solutions (Cassandra, MySQL Cluster)
Valider le modèle de données
31. Stockage
Objectifs
31
Rappels :
Remplacer la solution existante de stockage
Chaque capteur remonte une donnée toutes les 30 minutes
Time series (au plus 50 000 colonnes par ligne)
33. Stockage
33
Cassandra
Time series : 1 ligne avec de multiples colonnes (clé composite)
CREATE TABLE capteur (
capteur_id text,
event timestamp,
temperature text,
PRIMARY KEY (capteur_id, event)
)
Ordonnée
capteur_id
event
temperature
event
temperature
34. Stockage
34
Attention longueur/taille de ligne
CREATE TABLE capteur (
capteur_id text,
event_period text,
event timestamp,
value text,
PRIMARY KEY ((capteur_id, event_period), event)
)
Attention modélisation
aggrégation
46. Traitement
Objectifs
46
Objectif :
Collecte
Rapide
Pas de pertes de données (sécurisation de la données)
Détection des données fausses
Faite en aval de la collecte
Consolidation
Faite sur les données « valides » avec stockage des mesures dans des « batch View »
Séparation des concepts !
48. Traitement
Objectifs
48
Objectif :
Query = function (all data)
Service LayerBatch Layer
Data
Data
Data
Data
collecte
C*
Transformation
Objetpivot
C*DAO
Valo
C*
C*
transformation
All datas Precompute views Batch views