De 20 000 à 4 millions d'utilisateurs : mode d'emploi
-
Upload
khanh-maudoux -
Category
Technology
-
view
743 -
download
1
Transcript of De 20 000 à 4 millions d'utilisateurs : mode d'emploi
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
3
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 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
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 !
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
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 données)
Collecteur
12
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
Collecteur État des lieux
14
Stockage
Data Data
Data Data
Tran
sfo
rmat
ion
O
bje
t p
ivo
t
Ro
uta
ge p
ar x
pat
h
Tran
sfo
rmat
ion
O
bje
t p
ivo
t
Data XML
Data XML
Tran
sfo
rmat
ion
JA
XB
Tr
ansf
orm
atio
n
JAX
B
Data Java
Data Java
Data DTO
Data DTO
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
Tran
sfo
rmat
ion
O
bje
t p
ivo
t
Ro
uta
ge p
ar x
pat
h
Tran
sfo
rmat
ion
O
bje
t p
ivo
t
Data XML
Data XML
Tran
sfo
rmat
ion
JA
XB
Tr
ansf
orm
atio
n
JAX
B
Data Java
Data Java
Data DTO
Data DTO
Spring Integration
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 30 minutes
Time series (au plus 50 000 colonnes par ligne)
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 text,
event timestamp,
temperature text,
PRIMARY KEY (capteur_id, event)
)
Ordonnée
capteur_id event
temperature
event
temperature
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
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 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 !
Traitement Objectifs
47
Objectif : Lambda architecture
Query = function (all data)
Traitement Objectifs
48
Objectif :
Query = function (all data)
Service Layer Batch Layer
Data Data
Data Data
collecte
C* Tr
ansf
orm
atio
n
Ob
jet
piv
ot
C*D
AO
Valo
C*
C*
transformation
All datas Precompute views Batch views
Traitement
49
Spark / Hadoop
Traitement Objectifs ?
50
Volumétrie non acceptable pour la production :
Duplication de la donnée
Souhaite une solution avec calcul à la demande
Traitement Objectifs ?
51
Traitement
Service Layer
Data Data
Data Data
collecte
C* Tr
ansf
orm
atio
n
Ob
jet
piv
ot
C*D
AO
Valo
C*
C*
transformation
All datas Precompute views Batch views
Traitement Objectifs ?
52
Algorithme de lissage en amont
53
Conclusion
Merci !
54
Questions ?
55
pas le feedback en sortant !
ou ?