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

Preview:

Citation preview

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

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 ?

Recommended