De 20 000 à 4 millions
Khanh Tuong Maudoux
@jetoile
2
Qui suis-
Khanh Tuong Maudoux
Développeur Java indépendant
blog : http://blog.jetoile.fr
@jetoile
khanh.maudoux@jetoile.fr...
Contexte
Collecteur
Stockage
Lecture
Traitement
4
Contexte
5
Contexte
Fonctionnel
6
Réception de relevés de compteurs (fichiers xml)
Fournir une consolidation (valorisation) des conso...
Contexte
Volumétrie
7
Avant :
20.0000 clients
Cible :
4.000.000 clients
~ 3.000.000 fichiers par jours (~156 Go/jour)
Avec...
Contexte
État des lieux
8
Algorithmes de lissage et de détection fait au moment de la collecte
long »
=> anomalies « coura...
Contexte
État des lieux
9
Stockage
TimeSeries
Data
Data
Data
Data
Collecteur Consolidation Applicatif
Stockage
Stockage
Contexte
État des lieux
10
Contexte
Objectifs
11
Objectif :
Remplacer la solution de stockage
Ne pas oublier la phase le ré-import totale! (~3 ans de...
Collecteur
12
Collecteur
Objectifs
13
Batch de collecte avec stockage dans une solution propriétaire
Objectifs :
Valider différentes sol...
Collecteur
État des lieux
14
Stockage
Data
Data
Data
Data
Transformation
Objetpivot
Routageparxpath
Transformation
Objetpi...
Collecteur
Pistes
15
Pistes :
Spring Batch
EIP
Spring Batch + EIP
Collecteur
16
Outils / Framework :
Spring Integration
Metrics
JMX / Jolokia
Hawt.io
Maven!
Collecteur
17
Spring Integration
Architecture « Pipe and Filters »
Collecteur
18
Stockage
Data
Data
Data
Data
Transformation
Objetpivot
Routageparxpath
Transformation
Objetpivot
Data
XML
Da...
Collecteur
19
Spring Integration
Collecteur
20
Spring Integration
Collecteur
21
Spring Integration
Collecteur
22
Spring Integration
Collecteur
23
Spring Integration
Collecteur
24
Spring Integration
Message-history
Scalabilité horizontale
Collecteur
25
Metrics
Collecteur
26
Jolokia
JMX via HTTP/JSON
Collecteur
27
Hawt.io
Collecteur
28
Maven
maven-jaxb2-plugin (org.jvnet.jaxb2.maven2)
appassembler-maven-plugin (org.codehaus.mojo)
Collecteur
29
endpoint REST pour injection
Stockage
30
Stockage
Objectifs
31
Rappels :
Remplacer la solution existante de stockage
Chaque capteur remonte une donnée toutes les 3...
Stockage
32
Cassandra
Base de données orientée colonnes
Keyspace
Column Family
Column
Stockage
33
Cassandra
Time series : 1 ligne avec de multiples colonnes (clé composite)
CREATE TABLE capteur (
capteur_id t...
Stockage
34
Attention longueur/taille de ligne
CREATE TABLE capteur (
capteur_id text,
event_period text,
event timestamp,...
Stockage
35
Jolokia
Comme agent sur la JVM
Lecture
36
Lecture
Objectifs
37
Évaluer la pertinence de la solution de stockage
Véloce
Simple
Remonté de métriques
=> injecteur !
Lecture
Pistes
38
Pistes :
From scratch
Lecture
39
Outils / Framework :
RestEasy Netty
Swagger
JMX / Jolokia
Hawt.io
Maven
Gatling / AB
Lecture
40
RestEasy Netty :
JAX-RS
Netty
Simple
Lecture
41
Swagger :
Lecture
42
Jolokia
Lecture
43
Gatling
Traitement
44
Traitement
Rappel
45
Stockage
TimeSeries
Data
Data
Data
Data
Collecteur Consolidation Applicatif
Stockage
Stockage
Traitement
Objectifs
46
Objectif :
Collecte
Rapide
Pas de pertes de données (sécurisation de la données)
Détection des don...
Traitement
Objectifs
47
Objectif :
Lambda architecture
Query = function (all data)
Traitement
Objectifs
48
Objectif :
Query = function (all data)
Service LayerBatch Layer
Data
Data
Data
Data
collecte
C*
Tr...
Traitement
49
Spark / Hadoop
Traitement
Objectifs ?
50
Volumétrie non acceptable pour la production :
Duplication de la donnée
Souhaite une solution av...
Traitement
Objectifs ?
51
Traitement
Service Layer
Data
Data
Data
Data
collecte
C*Transformation
Objetpivot
C*DAO
Valo
C*
...
Traitement
Objectifs ?
52
Algorithme de lissage en amont
53
Conclusion
Merci !
54
Questions ?
55
pas le feedback en sortant !
ou ?
Upcoming SlideShare
Loading in …5
×

De 20 000 à 4 millions d'utilisateurs : mode d'emploi

843
-1

Published on

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".

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
843
On Slideshare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

De 20 000 à 4 millions d'utilisateurs : mode d'emploi

  1. 1. De 20 000 à 4 millions Khanh Tuong Maudoux @jetoile
  2. 2. 2
  3. 3. Qui suis- Khanh Tuong Maudoux Développeur Java indépendant blog : http://blog.jetoile.fr @jetoile khanh.maudoux@jetoile.fr 3
  4. 4. Contexte Collecteur Stockage Lecture Traitement 4
  5. 5. Contexte 5
  6. 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
  7. 7. Contexte Volumétrie 7 Avant : 20.0000 clients Cible : 4.000.000 clients ~ 3.000.000 fichiers par jours (~156 Go/jour) Avec un pas de 30 minutes !
  8. 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
  9. 9. Contexte État des lieux 9 Stockage TimeSeries Data Data Data Data Collecteur Consolidation Applicatif Stockage Stockage
  10. 10. Contexte État des lieux 10
  11. 11. Contexte Objectifs 11 Objectif : Remplacer la solution de stockage Ne pas oublier la phase le ré-import totale! (~3 ans de données)
  12. 12. Collecteur 12
  13. 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
  14. 14. Collecteur État des lieux 14 Stockage Data Data Data Data Transformation Objetpivot Routageparxpath Transformation Objetpivot Data XML Data XML Transformation JAXB Transformation JAXB Data Java Data Java Data DTO Data DTO
  15. 15. Collecteur Pistes 15 Pistes : Spring Batch EIP Spring Batch + EIP
  16. 16. Collecteur 16 Outils / Framework : Spring Integration Metrics JMX / Jolokia Hawt.io Maven!
  17. 17. Collecteur 17 Spring Integration Architecture « Pipe and Filters »
  18. 18. Collecteur 18 Stockage Data Data Data Data Transformation Objetpivot Routageparxpath Transformation Objetpivot Data XML Data XML Transformation JAXB Transformation JAXB Data Java Data Java Data DTO Data DTO Spring Integration
  19. 19. Collecteur 19 Spring Integration
  20. 20. Collecteur 20 Spring Integration
  21. 21. Collecteur 21 Spring Integration
  22. 22. Collecteur 22 Spring Integration
  23. 23. Collecteur 23 Spring Integration
  24. 24. Collecteur 24 Spring Integration Message-history Scalabilité horizontale
  25. 25. Collecteur 25 Metrics
  26. 26. Collecteur 26 Jolokia JMX via HTTP/JSON
  27. 27. Collecteur 27 Hawt.io
  28. 28. Collecteur 28 Maven maven-jaxb2-plugin (org.jvnet.jaxb2.maven2) appassembler-maven-plugin (org.codehaus.mojo)
  29. 29. Collecteur 29 endpoint REST pour injection
  30. 30. Stockage 30
  31. 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)
  32. 32. Stockage 32 Cassandra Base de données orientée colonnes Keyspace Column Family Column
  33. 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. 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
  35. 35. Stockage 35 Jolokia Comme agent sur la JVM
  36. 36. Lecture 36
  37. 37. Lecture Objectifs 37 Évaluer la pertinence de la solution de stockage Véloce Simple Remonté de métriques => injecteur !
  38. 38. Lecture Pistes 38 Pistes : From scratch
  39. 39. Lecture 39 Outils / Framework : RestEasy Netty Swagger JMX / Jolokia Hawt.io Maven Gatling / AB
  40. 40. Lecture 40 RestEasy Netty : JAX-RS Netty Simple
  41. 41. Lecture 41 Swagger :
  42. 42. Lecture 42 Jolokia
  43. 43. Lecture 43 Gatling
  44. 44. Traitement 44
  45. 45. Traitement Rappel 45 Stockage TimeSeries Data Data Data Data Collecteur Consolidation Applicatif Stockage Stockage
  46. 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 !
  47. 47. Traitement Objectifs 47 Objectif : Lambda architecture Query = function (all data)
  48. 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
  49. 49. Traitement 49 Spark / Hadoop
  50. 50. Traitement Objectifs ? 50 Volumétrie non acceptable pour la production : Duplication de la donnée Souhaite une solution avec calcul à la demande
  51. 51. Traitement Objectifs ? 51 Traitement Service Layer Data Data Data Data collecte C*Transformation Objetpivot C*DAO Valo C* C* transformation All datas Precompute views Batch views
  52. 52. Traitement Objectifs ? 52 Algorithme de lissage en amont
  53. 53. 53 Conclusion
  54. 54. Merci ! 54
  55. 55. Questions ? 55
  56. 56. pas le feedback en sortant ! ou ?
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×