56
De 20 000 à 4 millions Khanh Tuong Maudoux @jetoile

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

Embed Size (px)

Citation preview

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

De 20 000 à 4 millions

Khanh Tuong Maudoux

@jetoile

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

2

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

Qui suis-

Khanh Tuong Maudoux

Développeur Java indépendant

blog : http://blog.jetoile.fr

@jetoile

[email protected]

3

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

Contexte

Collecteur

Stockage

Lecture

Traitement

4

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

Contexte

5

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

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

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

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 !

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

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

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

Contexte État des lieux

9

Stockage TimeSeries

Data Data

Data Data

Collecteur Consolidation Applicatif

Stockage

Stockage

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

Contexte État des lieux

10

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

Contexte Objectifs

11

Objectif : Remplacer la solution de stockage

Ne pas oublier la phase le ré-import totale! (~3 ans de données)

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

Collecteur

12

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

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

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

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

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

Collecteur Pistes

15

Pistes :

Spring Batch

EIP

Spring Batch + EIP

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

Collecteur

16

Outils / Framework : Spring Integration

Metrics

JMX / Jolokia

Hawt.io

Maven!

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

Collecteur

17

Spring Integration Architecture « Pipe and Filters »

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

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

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

Collecteur

19

Spring Integration

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

Collecteur

20

Spring Integration

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

Collecteur

21

Spring Integration

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

Collecteur

22

Spring Integration

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

Collecteur

23

Spring Integration

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

Collecteur

24

Spring Integration Message-history

Scalabilité horizontale

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

Collecteur

25

Metrics

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

Collecteur

26

Jolokia JMX via HTTP/JSON

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

Collecteur

27

Hawt.io

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

Collecteur

28

Maven maven-jaxb2-plugin (org.jvnet.jaxb2.maven2)

appassembler-maven-plugin (org.codehaus.mojo)

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

Collecteur

29

endpoint REST pour injection

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

Stockage

30

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

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)

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

Stockage

32

Cassandra Base de données orientée colonnes

Keyspace

Column Family

Column

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

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

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

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

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

Stockage

35

Jolokia Comme agent sur la JVM

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

Lecture

36

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

Lecture Objectifs

37

Évaluer la pertinence de la solution de stockage

Véloce

Simple

Remonté de métriques

=> injecteur !

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

Lecture Pistes

38

Pistes : From scratch

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

Lecture

39

Outils / Framework : RestEasy Netty

Swagger

JMX / Jolokia

Hawt.io

Maven

Gatling / AB

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

Lecture

40

RestEasy Netty : JAX-RS

Netty

Simple

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

Lecture

41

Swagger :

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

Lecture

42

Jolokia

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

Lecture

43

Gatling

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

Traitement

44

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

Traitement Rappel

45

Stockage TimeSeries

Data Data

Data Data

Collecteur Consolidation Applicatif

Stockage

Stockage

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

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 !

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

Traitement Objectifs

47

Objectif : Lambda architecture

Query = function (all data)

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

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

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

Traitement

49

Spark / Hadoop

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

Traitement Objectifs ?

50

Volumétrie non acceptable pour la production :

Duplication de la donnée

Souhaite une solution avec calcul à la demande

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

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

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

Traitement Objectifs ?

52

Algorithme de lissage en amont

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

53

Conclusion

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

Merci !

54

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

Questions ?

55

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

pas le feedback en sortant !

ou ?