SlideShare une entreprise Scribd logo
1  sur  47
Télécharger pour lire hors ligne
#IaaC	

Realtime Web avec Akka, Kafka,
Spark et Mesos
@hayssams
Hayssam Saleh
@jpbunaz
Jean-Philippe Bunaz
#IaaC	

Sommaire
Tomcat	

Tomcat	

FrontfacingApp	

FrontfacingApp	

Akka	

Akka	

Akka	

Akka	

Stream Processing	

(Spark Streaming)	

RealtimeViews	

(ElasticSearch)	

All Data	

(Spark)	

Precompute	

Views	

BatchViews	

Query	

(Tomcat,Kibana,…)	

NewDataStream	

Kafka	

Speed Layer	

Batch Layer	

 Serving Layer	

Product 	

Updates	

Mesos	

Marathon	

Zookeeper	

Server 1	

 Server 2	

Leader
#IaaC	

Pourquoi Akka
Mesos	

Tomcat	

Tomcat	

FrontfacingApp	

FrontfacingApp	

Akka	

Akka	

Stream Processing	

(Spark Streaming)	

RealtimeViews	

(ElasticSearch)	

All Data	

(Spark)	

Precompute	

Views	

BatchViews	

Query	

(Tomcat,Kibana,…)	

NewDataStream	

Kafka	

Speed Layer	

Batch Layer	

 Serving Layer	

Product 	

Updates	

Marathon	

Zookeeper	

Server 1	

 Server 2	

Leader
#IaaC	

Kompass
• Annuaire d’entreprise
• Moteur de recherche
• Afficher les informations
• Disponible dans 70 pays
• …
@jpbunaz
#IaaC	

Objectifs
Quelles
entreprises
sont vues	

Nombre de
visiteurs	

Mise en place d’un plan de taggage
@jpbunaz
#IaaC	

Challenge
Un tag par
prestataire	

Changer
les règles	

Informations
en session	

Intercepter les requêtes sur le serveur
@jpbunaz
#IaaC	

Utilisation d’une Valve
A
P
A
C
H
E	

TOMCAT	

WEB APP	

SESSION	

VALVE	

RESPONSE
REQUEST
?	

PARAM	

LOG	

REQUEST
RESPONSE
REQUEST
RESPONSE
@jpbunaz
#IaaC	

Impacts
Mon log
peut être
long	

Différent
type de log	

Perturbe mon
application	

La valve doit être non bloquante
@jpbunaz
#IaaC	

Valve non-bloquante
A
P
A
C
H
E	

TOMCAT	

WEB APP	

SESSION	

VALVE	

?	

PARAM	

REQUEST
ACTOR	

LOG	

MAILBOX	

REQUEST REQUEST
@jpbunaz
#IaaC	

Acteur : Vue d’avion
TASK	

2	

TASK	

1	

TASK	

4	

TASK	

4	

Tâches indépendantes qui
communiquent entre elles de
manière asynchrone via des
messages	

TASK	

3	

TASK	

5	

@jpbunaz
#IaaC	

Création d’un Message
case class MonMessage(param1: String, param2: String,
param3: String, param4: String)
	

@jpbunaz
#IaaC	

Création d’un Acteur
class MonActeur() extends Actor {
def receive = {
case MonMessage(param1: String, param2: String,
param3: String, param4: String) =>
// Code de logging
case
}
}	

@jpbunaz
#IaaC	

Envoi du message à l’acteur
// Initialisation de l’acteur
val monActeur = actorSystem.actorOf(Props[MyActeur])
// Initialisation du message
val monMessage = MonMessage("value1", "value2",
"value3", "value4")
// Envoi aynchrone du message à l’acteur
monActeur ! monMessage
// Code exécution avant traitement du message
ExecuterLaSuiteDansLaFoulée()
@jpbunaz
#IaaC	

Acteur : Points de vigilance
N’expose pas son état
interne
class UglyActeur() extends Actor {
var variableCanAccess = null
def receive = {
case String =>
// My acteur code…
}
}	

@jpbunaz
#IaaC	

Acteur : Points de vigilance
Les messages doivent
être immuables
case class UglyMessage(
var param1: String,
var param2: String)
@jpbunaz
#IaaC	

Acteur : Points de vigilance
TASK	

	

	

	

Working…	

@jpbunaz	

• L’acteur ne traite qu’un seul message à la fois
• Les messages sont mis en attente dans une boite aux
lettres
#IaaC	

Maitriser le nombre d’acteurs
Nombre
d’Acteur !!!	

Un message
à la fois !!!	

Utiliser un router
@jpbunaz
#IaaC	

Routeur
• Maîtriser le nombre d’Acteur
• Différents types de routage (RoundRobin, Random …)
• Configuration externalisée dans un fichier de propriétés
@jpbunaz
#IaaC	

Créer un routeur
val monRouteur = actorSystem.actorOf(
FromConfig.props(routeProps = Props[MonActeur])
, name = "monRouteur"
)
@jpbunaz
#IaaC	

Configurer un routeur
Akka.actor.deployment {
/monRouteur {
router = round-robin-pool
nr-of-instances = 5
}
}
@jpbunaz
#IaaC	

Conclusion sur les Acteurs
• Simple à mettre en oeuvre
• Contrôle sur les ressources en adéquation avec la
charge
• Gestion multithread transparente, pas de lock, de
synchronized
• Naturellement asynchrone
@jpbunaz
#IaaC	

Objectifs
Spark Streaming	

Spark Classic	

Kafka	

Mesos	

⇒ Scale Up / Scale Out
@hayssams
#IaaC	

Pourquoi Kafka ?
Mesos	

Tomcat	

Tomcat	

FrontfacingApp	

FrontfacingApp	

Akka	

Akka	

Akka	

Akka	

Stream Processing	

(Spark Streaming)	

RealtimeViews	

(ElasticSearch)	

All Data	

(Spark)	

Precompute	

Views	

BatchViews	

Query	

(Tomcat,Kibana,…)	

NewDataStream	

Kafka	

Speed Layer	

Batch Layer	

 Serving Layer	

Product 	

Updates	

Marathon	

Zookeeper	

Server 1	

 Server 2	

Leader	

@hayssams
#IaaC	

Avant les messages groups
U2E3	

 U1E3	

 U2E2	

 U1E2	

 U2E1	

•  Solution traditionnelle : Un seul consommateur pour toute la file
U1E1	

U2E3	

 U1E3	

 U2E2	

 U1E2	

 U2E1	

U1E1	

@hayssams
#IaaC	

Avec Kafka : partitionnement par clef
U2E3	

 U2E2	

 U2E1	

U1E3	

 U1E2	

 U1E1	

U2E3	

 U2E2	

 U2E1	

U1E3	

 U1E2	

 U1E1	

Cluster Kafka	

P1R1	

 P2R1	

P1R2	

 P2R2	

Pro	

Cons	

Cons	

Avec JMSGroupID
•  Un local manager (SPOF) plusieurs remote
•  Requiert un serveur de backup
@hayssams	

Avec Kafka
•  Support natif du partitionnement
•  Réplication des messages
•  Tolérance au pannes
#IaaC	

Pourquoi Spark Streaming
Mesos	

Tomcat	

Tomcat	

FrontfacingApp	

FrontfacingApp	

Akka	

Akka	

Akka	

Akka	

Stream Processing	

(Spark Streaming)	

RealtimeViews	

(ElasticSearch)	

All Data	

(Spark)	

Precompute	

Views	

BatchViews	

Query	

(Tomcat,Kibana,…)	

NewDataStream	

Kafka	

Speed Layer	

Batch Layer	

 Serving Layer	

Product 	

Updates	

Marathon	

Zookeeper	

Server 1	

 Server 2	

Leader	

@hayssams
#IaaC	

•  Récupération du Tuple(request, response, session, url)
• val tuples = kafka.initStream(context, "requests », 2 seconds)"
•  Validation des règles
• rdd = tuples.filter( t => RulesHandler.match(t))"
•  Transformation du tuple en document JSON
• rdd2 = rdd.map( t => toDocument)"
•  Injection dans ES
• rdd2.foreachRDD(doc => es.insert doc)"
•  Identification des relations
• rdd3 = rdd.flatMap(_.toRelations)!
• rdd3.foreachRDD(rel => neo4j.insert rel)"
=> Statistiques d’accès en temps réel
Traitement continu des accès utilisateurs
@hayssams
#IaaC	

Avec Spark: API unique pour la batch et le streaming
Flux continu provevant de réseau	

2s	

 2s	

 2s	

 2s	

 2s	

 2s	

 2s	

t	

 t +16	

•  Découpage du flux en un paquet de données
(RDD) toutes les 2 secondes
•  Un RDD est une collection de données
RDD	

 RDD	

 RDD	

 RDD	

 RDD	

 RDD	

 RDD	

•  Chaque paquet est traité comme un comme
un RDD soumis au batch Spark classique
Out	

 Out	

 Out	

 Out	

	

D	

Out	

	

D	

Out	

	

Out	

	

•  Spark exécute les opérations sur le RDD
comme dans un batch classique et renvoie
le résultat en retour.
Spark	

•  Exécution de microbatchs
@hayssams
#IaaC	

Avec Spark: Tolérance aux pannes au coût minimum
val tuples = kafka.initStream(context,"requests », 2 seconds"
!
rdd = tuples.filter( t => RulesHandler.match(t))"
"
rdd2 = rdd.map( t => toDocument)"
"
rdd2.foreachRDD(doc => es.insert doc) // via Kafka"
!
rdd3 = rdd.flatMap(_.toRelations)!
!
rdd3.foreachRDD(rel => neo4j.insert rel) // via Kafka
KafkaInputDStream	

FilteredDStream	

MappedDStream	

ForEachDStream	

MappedDStream	

ForEachDStream	

•  Le code ci-dessus ne génère aucun calcul, juste un graphe d’objets
•  Le Scheduler Spark va soumettre le graphe d’objets aux workers pour exécution
•  J En cas de panne, il suffit juste de soumettre à nouveau le graphe d’objets à un autre worker.
•  Pas besoin de réplication des résultats ou d’upstream backup
@hayssams
#IaaC	

Mesos	

Tomcat	

Tomcat	

FrontfacingApp	

FrontfacingApp	

Akka	

Akka	

Akka	

Akka	

Stream Processing	

(Spark Streaming)	

RealtimeViews	

(ElasticSearch)	

All Data	

(Spark)	

Precompute	

Views	

BatchViews	

Query	

(Tomcat,Kibana,…)	

NewDataStream	

Kafka	

Speed Layer	

Batch Layer	

 Serving Layer	

Product 	

Updates	

Marathon	

Zookeeper	

Server 1	

 Server 2	

Leader	

Pourquoi Spark Classic
@hayssams
#IaaC	

Notification des clients
rdd= Sc.readFromXMLFile(…)"
rdd.persist!
val updatedRDD = rdd.filter(product => product.existsInMapWithDifferentHash)"
val newRDD = rdd.filter(product => !product.existInMap)"
"
val updateNotifications = updatedRDD.map(_.executeStrategies)"
"
val newNotifications = newRDD.map(_.executeStrategies)"
"
updateNotifications.union(newNotifications).foreachRDD(_.notifyClient)"
"
RDD	

Action	

@hayssams
#IaaC	

Avec Spark : Une riche librairie d’opérations
d1	

d2	

d3	

d1	

d2	

d3	

d1	

d2	

d3	

d2	

d3	

d1	

d2	

d3	

d1	

d2	

d3	

d1	

d2	

d3	

map	

 filter	

 union	

 groupByKey	

reduceByKey	

reduce	

collect	

count	

take	

first	

foreach	

…	

•  Avec en plus
•  J Contrôle sur le partitionnement
•  J broadcast
•  J accumulateurs
•  J Les chaînage d’actions ne requiert pas d’écriture intermédiaire sur disque
@hayssams
#IaaC	

Mesos	

Tomcat	

Tomcat	

FrontfacingApp	

FrontfacingApp	

Akka	

Akka	

Akka	

Akka	

Stream Processing	

(Spark Streaming)	

RealtimeViews	

(ElasticSearch)	

All Data	

(Spark)	

Precompute	

Views	

BatchViews	

Query	

(Tomcat,Kibana,…)	

NewDataStream	

Kafka	

Speed Layer	

Batch Layer	

 Serving Layer	

Product 	

Updates	

Marathon	

Zookeeper	

Server 1	

 Server 2	

Leader	

Pourquoi Apache Zookeeper
@hayssams
#IaaC	

Pourquoi Zookeeper
• Election de leader pour la tolérance au pannes
Maitre	

Esclave	

	

Esclave	

Esclave	

Maitre de secours	

Esclave et maitre de secours	

	

Esclave et maitre de secours	

	

Esclave et maitre de secours	

	

Esclave et maitre de secours	

	

Election de leader	

Avec Zookeeper	

Tout noeud est un master potentiel	

@hayssams
#IaaC	

Pourquoi Zookeeper
• Centralisation de la configuration
/
services
…
master
nodes
es
node1
node2
node1
Zookeeper	

Server 1	

 Server 2	

Leader	

Service	

Service	

1.Enregistrementdesservices	

Client	

2. Récupération de la localisation des workers	

4. sollicitation du service	

3. Sélection du worker	

@hayssams
#IaaC	

Mesos	

Tomcat	

Tomcat	

FrontfacingApp	

FrontfacingApp	

Akka	

Akka	

Akka	

Akka	

Stream Processing	

(Spark Streaming)	

RealtimeViews	

(ElasticSearch)	

All Data	

(Spark)	

Precompute	

Views	

BatchViews	

Query	

(Tomcat,Kibana,…)	

NewDataStream	

Kafka	

Speed Layer	

Batch Layer	

 Serving Layer	

Product 	

Updates	

Zookeeper	

Server 1	

 Server 2	

Leader	

Pourquoi Mesos
Marathon	

@hayssams
#IaaC	

Avant Mesos Démultiplication nombre de VMs
•  €€€ Cluster Tomcat : Frontend facing app
•  € Cluster Kafka : Middleware de messages
•  €€ Cluster Spark
•  €€€ Cluster ElasticSearch
•  TTT : Compléxité de configuration
•  Apache Mesos et Marathon à la rescousse
•  Voir l’ensemble des VMs comme une seule machine sur laquelle tournent plusieurs
JVMs
@hayssams
#IaaC	

Avant Mesos Démultiplication nombre de VMs
Dev.	

Int.	

PréProd.	

Prod.	

•  Requiert d’exécuter un OS en
entier pour obtenir une isolation
des ressources et de la sécurité
•  Temps de démarrage assez long
(5 à 10 minutes par VM)
•  Plus d’OS => encore plus de
systèmes à administrer
•  Coût de licence des VMs
•  Allocation statique => Sous
utilisation de la CPU
VM	

VM	

VM	

VM	

VM	

VM	

VM	

VM	

VM	

VM	

VM	

VM	

VM	

VM	

VM	

VM	

VM	

VM	

VM	

VM	

VM	

VM	

VM	

VM	

VM	

VM	

VM	

@hayssams
#IaaC	

Avec Linux cgroups
OS Hôte	

OS Guest	

 OS Guest	

 OS Guest	

App1	

 App2	

 App3	

OS Hôte	

App1	

 App2	

 App3	

•  Isolation
•  CPU
•  Mémoire
•  I/O
•  Réseau
VM	

 Linux cgroups	

@hayssams
#IaaC	

Avec Mesos
Serveur	

	

Serveur	

	

Serveur	

	

Serveur	

	

80 CPU, 640Go	

	

App	

	

App	

	

App	

	

App	

	

App	

	

App	

	

App	

	

App	

	

App	

	

•  J Partage des ressources
•  J Tolérant aux pannes
•  Pour les applications longue durée (MOM / AS)
•  Si vous n’avez jamais cherché à savoir sur quel cœur s’exécute
votre tâche alors vous n’avez probablement pas besoin de
savoir non plus sur quel serveur.
•  IaaC : Infrastructure as a (Single) Computer
•  Faire fonctionner les différents environnements (dev / Int/
Preprod / Prod) sur la même infrastructure
•  Y compris les jobs Jenkins
@hayssams
#IaaC	

Architecture Mesos
Mesos Master	

Mesos Worker	

 Mesos Worker	

MonAppScheduler	

MonAppExecutor	

MonAppExecutor	

2CPUs, 20Go	

Tâche	

•  Pour s’exécuter sur Mesos une application doit
implémenter :
•  Un scheduler
•  Un Executor
@hayssams
#IaaC	

Mesos	

Tomcat	

Tomcat	

FrontfacingApp	

FrontfacingApp	

Akka	

Akka	

Akka	

Akka	

Stream Processing	

(Spark Streaming)	

RealtimeViews	

(ElasticSearch)	

All Data	

(Spark)	

Precompute	

Views	

BatchViews	

Query	

(Tomcat,Kibana,…)	

NewDataStream	

Kafka	

Speed Layer	

Batch Layer	

 Serving Layer	

Product 	

Updates	

Marathon	

Zookeeper	

Server 1	

 Server 2	

Leader	

Marathon
@hayssams
#IaaC	

Pourquoi Marathon
• Eviter d’avoir à développer un Executor et un Scheduler pour les
applications « longue durée »
• Marathon permet via une API REST de configurer des instances
applicatives au dessus de Mesos en indiquant la commande à
lancer
@hayssams
#IaaC	

Exemple de commande Marathon
POST /v2/apps HTTP/1.1"
"
{"
"id": "TomcatApp","
"cmd": "/path/bin/catalina.sh run $PORT","
"mem": 1024,"
"cpus": 2.0,"
"instances": 3,"
"constraints": ["
"
"
]"
}"
"
•  Marathon utilisé pour lancer
•  Kafka
•  ElasticSearch
•  Tomcat
•  Scale up/down par simple appel REST avec une nouvelle configuration
Régulation de charge et découverte	

	

GET /apps/MonApp/tasks 	

Hot haproxy.cfg reload	

@hayssams	

["hostname", "UNIQUE", ""],!
["hostname", ”like", ”front{1,2}"]
@YourTwitterHandle	

#DVXFR14{session hashtag}	

#IaaC
#IaaC	

Conclusion
• Neal Real time Analytics
• Batch Analytics
• Middleware de messages
• Partage dynamique de ressources
Spark Streaming	

Spark Classic	

Mesos	

Marathon	

Kafka	

Un seul framework	

IaaC	

Partionnement 	

automatique	

@hayssams
@YourTwitterHandle	

#DVXFR14{session hashtag}	

#IaaC

Contenu connexe

Tendances

Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02
Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02
Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02Jérôme Mainaud
 
DataStax Enterprise et Cas d'utilisation de Apache Cassandra
DataStax Enterprise et Cas d'utilisation de Apache CassandraDataStax Enterprise et Cas d'utilisation de Apache Cassandra
DataStax Enterprise et Cas d'utilisation de Apache CassandraVictor Coustenoble
 
Paris stormusergroup intrudocution
Paris stormusergroup intrudocutionParis stormusergroup intrudocution
Paris stormusergroup intrudocutionParis_Storm_UG
 
DataStax et Apache Cassandra pour la gestion des flux IoT
DataStax et Apache Cassandra pour la gestion des flux IoTDataStax et Apache Cassandra pour la gestion des flux IoT
DataStax et Apache Cassandra pour la gestion des flux IoTVictor Coustenoble
 
DataStax Enterprise - La plateforme de base de données pour le Cloud
DataStax Enterprise - La plateforme de base de données pour le CloudDataStax Enterprise - La plateforme de base de données pour le Cloud
DataStax Enterprise - La plateforme de base de données pour le CloudVictor Coustenoble
 
Apache Cassandra - Concepts et fonctionnalités
Apache Cassandra - Concepts et fonctionnalitésApache Cassandra - Concepts et fonctionnalités
Apache Cassandra - Concepts et fonctionnalitésRomain Hardouin
 
Paris Spark meetup : Extension de Spark (Tachyon / Spark JobServer) par jlamiel
Paris Spark meetup : Extension de Spark (Tachyon / Spark JobServer) par jlamielParis Spark meetup : Extension de Spark (Tachyon / Spark JobServer) par jlamiel
Paris Spark meetup : Extension de Spark (Tachyon / Spark JobServer) par jlamielModern Data Stack France
 
Zenika matinale spark-zeppelin_ml
Zenika matinale spark-zeppelin_mlZenika matinale spark-zeppelin_ml
Zenika matinale spark-zeppelin_mlZenika
 
Spark SQL principes et fonctions
Spark SQL principes et fonctionsSpark SQL principes et fonctions
Spark SQL principes et fonctionsMICHRAFY MUSTAFA
 
Stockage et analyse temps réel d'événements avec Riak chez Booking.com
Stockage et analyse temps réel d'événements avec Riak chez Booking.comStockage et analyse temps réel d'événements avec Riak chez Booking.com
Stockage et analyse temps réel d'événements avec Riak chez Booking.comDamien Krotkine
 
Cours Big Data Chap4 - Spark
Cours Big Data Chap4 - SparkCours Big Data Chap4 - Spark
Cours Big Data Chap4 - SparkAmal Abid
 
Realtime Web avec Kafka, Spark et Mesos
Realtime Web avec Kafka, Spark et MesosRealtime Web avec Kafka, Spark et Mesos
Realtime Web avec Kafka, Spark et Mesosebiznext
 
Kafka Connect & Kafka Streams - Paris Kafka User Group
Kafka Connect & Kafka Streams - Paris Kafka User GroupKafka Connect & Kafka Streams - Paris Kafka User Group
Kafka Connect & Kafka Streams - Paris Kafka User GroupHervé Rivière
 
BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : SparkLilia Sfaxi
 
Delta Lake, un vernis pour parquet
Delta Lake, un vernis pour parquetDelta Lake, un vernis pour parquet
Delta Lake, un vernis pour parquetAlban Phélip
 

Tendances (20)

Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02
Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02
Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02
 
DataStax Enterprise et Cas d'utilisation de Apache Cassandra
DataStax Enterprise et Cas d'utilisation de Apache CassandraDataStax Enterprise et Cas d'utilisation de Apache Cassandra
DataStax Enterprise et Cas d'utilisation de Apache Cassandra
 
Paris stormusergroup intrudocution
Paris stormusergroup intrudocutionParis stormusergroup intrudocution
Paris stormusergroup intrudocution
 
DataStax et Apache Cassandra pour la gestion des flux IoT
DataStax et Apache Cassandra pour la gestion des flux IoTDataStax et Apache Cassandra pour la gestion des flux IoT
DataStax et Apache Cassandra pour la gestion des flux IoT
 
DataStax Enterprise - La plateforme de base de données pour le Cloud
DataStax Enterprise - La plateforme de base de données pour le CloudDataStax Enterprise - La plateforme de base de données pour le Cloud
DataStax Enterprise - La plateforme de base de données pour le Cloud
 
Webinar Degetel DataStax
Webinar Degetel DataStaxWebinar Degetel DataStax
Webinar Degetel DataStax
 
spark_intro_1208
spark_intro_1208spark_intro_1208
spark_intro_1208
 
Apache Cassandra - Concepts et fonctionnalités
Apache Cassandra - Concepts et fonctionnalitésApache Cassandra - Concepts et fonctionnalités
Apache Cassandra - Concepts et fonctionnalités
 
Paris Spark meetup : Extension de Spark (Tachyon / Spark JobServer) par jlamiel
Paris Spark meetup : Extension de Spark (Tachyon / Spark JobServer) par jlamielParis Spark meetup : Extension de Spark (Tachyon / Spark JobServer) par jlamiel
Paris Spark meetup : Extension de Spark (Tachyon / Spark JobServer) par jlamiel
 
Riak introduction
Riak introductionRiak introduction
Riak introduction
 
Zenika matinale spark-zeppelin_ml
Zenika matinale spark-zeppelin_mlZenika matinale spark-zeppelin_ml
Zenika matinale spark-zeppelin_ml
 
Chapitre 3 spark
Chapitre 3 sparkChapitre 3 spark
Chapitre 3 spark
 
Spark SQL principes et fonctions
Spark SQL principes et fonctionsSpark SQL principes et fonctions
Spark SQL principes et fonctions
 
Stockage et analyse temps réel d'événements avec Riak chez Booking.com
Stockage et analyse temps réel d'événements avec Riak chez Booking.comStockage et analyse temps réel d'événements avec Riak chez Booking.com
Stockage et analyse temps réel d'événements avec Riak chez Booking.com
 
Spark - Ippevent 19-02-2015
Spark - Ippevent 19-02-2015Spark - Ippevent 19-02-2015
Spark - Ippevent 19-02-2015
 
Cours Big Data Chap4 - Spark
Cours Big Data Chap4 - SparkCours Big Data Chap4 - Spark
Cours Big Data Chap4 - Spark
 
Realtime Web avec Kafka, Spark et Mesos
Realtime Web avec Kafka, Spark et MesosRealtime Web avec Kafka, Spark et Mesos
Realtime Web avec Kafka, Spark et Mesos
 
Kafka Connect & Kafka Streams - Paris Kafka User Group
Kafka Connect & Kafka Streams - Paris Kafka User GroupKafka Connect & Kafka Streams - Paris Kafka User Group
Kafka Connect & Kafka Streams - Paris Kafka User Group
 
BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : Spark
 
Delta Lake, un vernis pour parquet
Delta Lake, un vernis pour parquetDelta Lake, un vernis pour parquet
Delta Lake, un vernis pour parquet
 

En vedette

Apache Storm - Introduction au traitement temps-réel avec Storm
Apache Storm - Introduction au traitement temps-réel avec StormApache Storm - Introduction au traitement temps-réel avec Storm
Apache Storm - Introduction au traitement temps-réel avec StormParis_Storm_UG
 
Démystifions le machine learning avec spark par David Martin pour le Salon B...
Démystifions le machine learning avec spark par David Martin pour le Salon B...Démystifions le machine learning avec spark par David Martin pour le Salon B...
Démystifions le machine learning avec spark par David Martin pour le Salon B...Ippon
 
Atelier TDD (Test Driven Development)
Atelier TDD (Test Driven Development)Atelier TDD (Test Driven Development)
Atelier TDD (Test Driven Development)Ippon
 
Agilité, n’oublions pas les valeurs
Agilité, n’oublions pas les valeursAgilité, n’oublions pas les valeurs
Agilité, n’oublions pas les valeursIppon
 
JPA avec Cassandra, grâce à Achilles
JPA avec Cassandra, grâce à AchillesJPA avec Cassandra, grâce à Achilles
JPA avec Cassandra, grâce à AchillesIppon
 
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et MobileNouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et MobileIppon
 
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Ippon
 
One Web (API?) – Alexandre Bertails - Ippevent 10 juin 2014
One Web (API?) – Alexandre Bertails - Ippevent 10 juin 2014One Web (API?) – Alexandre Bertails - Ippevent 10 juin 2014
One Web (API?) – Alexandre Bertails - Ippevent 10 juin 2014Ippon
 
Multi criteria queries on a cassandra application
Multi criteria queries on a cassandra applicationMulti criteria queries on a cassandra application
Multi criteria queries on a cassandra applicationIppon
 
Quoi de neuf pour JHipster en 2016
Quoi de neuf pour JHipster en 2016Quoi de neuf pour JHipster en 2016
Quoi de neuf pour JHipster en 2016Ippon
 
Cassandra Java Driver : vers Cassandra 1.2 et au-delà
Cassandra Java Driver : vers Cassandra 1.2 et au-delàCassandra Java Driver : vers Cassandra 1.2 et au-delà
Cassandra Java Driver : vers Cassandra 1.2 et au-delàIppon
 
Système d’Information à l’Apec : un nouveau coeur de métier mis en place avec...
Système d’Information à l’Apec : un nouveau coeur de métier mis en place avec...Système d’Information à l’Apec : un nouveau coeur de métier mis en place avec...
Système d’Information à l’Apec : un nouveau coeur de métier mis en place avec...Ippon
 
Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014Ippon
 
Petit-déjeuner OCTO Technology : Calculez vos indicateurs en temps réel ave...
Petit-déjeuner OCTO Technology :  Calculez vos indicateurs en temps réel ave...Petit-déjeuner OCTO Technology :  Calculez vos indicateurs en temps réel ave...
Petit-déjeuner OCTO Technology : Calculez vos indicateurs en temps réel ave...OCTO Technology
 
Hibernate vs le_cloud_computing
Hibernate vs le_cloud_computingHibernate vs le_cloud_computing
Hibernate vs le_cloud_computingIppon
 
Stateful is beautiful
Stateful is beautifulStateful is beautiful
Stateful is beautifulIppon
 
CDI par la pratique
CDI par la pratiqueCDI par la pratique
CDI par la pratiqueIppon
 
Présentation du retour d'expérience sur Git
Présentation du retour d'expérience sur GitPrésentation du retour d'expérience sur Git
Présentation du retour d'expérience sur GitIppon
 
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014Ippon
 
Formation Usine Logicielle gratuite par Ippon 2014
Formation Usine Logicielle gratuite par Ippon 2014Formation Usine Logicielle gratuite par Ippon 2014
Formation Usine Logicielle gratuite par Ippon 2014Ippon
 

En vedette (20)

Apache Storm - Introduction au traitement temps-réel avec Storm
Apache Storm - Introduction au traitement temps-réel avec StormApache Storm - Introduction au traitement temps-réel avec Storm
Apache Storm - Introduction au traitement temps-réel avec Storm
 
Démystifions le machine learning avec spark par David Martin pour le Salon B...
Démystifions le machine learning avec spark par David Martin pour le Salon B...Démystifions le machine learning avec spark par David Martin pour le Salon B...
Démystifions le machine learning avec spark par David Martin pour le Salon B...
 
Atelier TDD (Test Driven Development)
Atelier TDD (Test Driven Development)Atelier TDD (Test Driven Development)
Atelier TDD (Test Driven Development)
 
Agilité, n’oublions pas les valeurs
Agilité, n’oublions pas les valeursAgilité, n’oublions pas les valeurs
Agilité, n’oublions pas les valeurs
 
JPA avec Cassandra, grâce à Achilles
JPA avec Cassandra, grâce à AchillesJPA avec Cassandra, grâce à Achilles
JPA avec Cassandra, grâce à Achilles
 
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et MobileNouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
 
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon
 
One Web (API?) – Alexandre Bertails - Ippevent 10 juin 2014
One Web (API?) – Alexandre Bertails - Ippevent 10 juin 2014One Web (API?) – Alexandre Bertails - Ippevent 10 juin 2014
One Web (API?) – Alexandre Bertails - Ippevent 10 juin 2014
 
Multi criteria queries on a cassandra application
Multi criteria queries on a cassandra applicationMulti criteria queries on a cassandra application
Multi criteria queries on a cassandra application
 
Quoi de neuf pour JHipster en 2016
Quoi de neuf pour JHipster en 2016Quoi de neuf pour JHipster en 2016
Quoi de neuf pour JHipster en 2016
 
Cassandra Java Driver : vers Cassandra 1.2 et au-delà
Cassandra Java Driver : vers Cassandra 1.2 et au-delàCassandra Java Driver : vers Cassandra 1.2 et au-delà
Cassandra Java Driver : vers Cassandra 1.2 et au-delà
 
Système d’Information à l’Apec : un nouveau coeur de métier mis en place avec...
Système d’Information à l’Apec : un nouveau coeur de métier mis en place avec...Système d’Information à l’Apec : un nouveau coeur de métier mis en place avec...
Système d’Information à l’Apec : un nouveau coeur de métier mis en place avec...
 
Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014
 
Petit-déjeuner OCTO Technology : Calculez vos indicateurs en temps réel ave...
Petit-déjeuner OCTO Technology :  Calculez vos indicateurs en temps réel ave...Petit-déjeuner OCTO Technology :  Calculez vos indicateurs en temps réel ave...
Petit-déjeuner OCTO Technology : Calculez vos indicateurs en temps réel ave...
 
Hibernate vs le_cloud_computing
Hibernate vs le_cloud_computingHibernate vs le_cloud_computing
Hibernate vs le_cloud_computing
 
Stateful is beautiful
Stateful is beautifulStateful is beautiful
Stateful is beautiful
 
CDI par la pratique
CDI par la pratiqueCDI par la pratique
CDI par la pratique
 
Présentation du retour d'expérience sur Git
Présentation du retour d'expérience sur GitPrésentation du retour d'expérience sur Git
Présentation du retour d'expérience sur Git
 
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
 
Formation Usine Logicielle gratuite par Ippon 2014
Formation Usine Logicielle gratuite par Ippon 2014Formation Usine Logicielle gratuite par Ippon 2014
Formation Usine Logicielle gratuite par Ippon 2014
 

Similaire à Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014

XebiCon'17 : Rex Akka dans une architecture microservice - Joachim Rousseau
XebiCon'17 : Rex Akka dans une architecture microservice - Joachim RousseauXebiCon'17 : Rex Akka dans une architecture microservice - Joachim Rousseau
XebiCon'17 : Rex Akka dans une architecture microservice - Joachim RousseauPublicis Sapient Engineering
 
Lagom framework - Touraine Tech 2018
Lagom framework - Touraine Tech 2018Lagom framework - Touraine Tech 2018
Lagom framework - Touraine Tech 2018Fabrice Sznajderman
 
Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...
Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...
Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...Bruno Bonnin
 
Comprendre et maîtriser la performance de ses applications Spark
Comprendre et maîtriser la performance de ses applications SparkComprendre et maîtriser la performance de ses applications Spark
Comprendre et maîtriser la performance de ses applications SparkRaphael Luta
 
Performance serveur et apache
Performance serveur et apachePerformance serveur et apache
Performance serveur et apacheafup Paris
 
Distributed computing with Spark 2.x
Distributed computing with Spark 2.xDistributed computing with Spark 2.x
Distributed computing with Spark 2.xDr Hajji Hicham
 
XebiCon'16 : WeScale - DNS as a Service, the OpenStack way. Par Pascal Edoua...
XebiCon'16 : WeScale - DNS as a Service, the OpenStack way.  Par Pascal Edoua...XebiCon'16 : WeScale - DNS as a Service, the OpenStack way.  Par Pascal Edoua...
XebiCon'16 : WeScale - DNS as a Service, the OpenStack way. Par Pascal Edoua...Publicis Sapient Engineering
 
3 Microsoft Advanced Threat Analytics - Genève
3   Microsoft Advanced Threat Analytics - Genève3   Microsoft Advanced Threat Analytics - Genève
3 Microsoft Advanced Threat Analytics - GenèveaOS Community
 
Event sourcing avec Kafka, UPEC
Event sourcing avec Kafka, UPECEvent sourcing avec Kafka, UPEC
Event sourcing avec Kafka, UPECSylia Baraka
 
Meetup kafka 21 Novembre 2017
Meetup kafka 21 Novembre 2017Meetup kafka 21 Novembre 2017
Meetup kafka 21 Novembre 2017Saïd Bouras
 
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseriesBreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseriesXavier MARIN
 
Paris Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearch
Paris Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearchParis Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearch
Paris Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearchMourad DACHRAOUI
 
Spark - An In-Memory Distributed Computing Engine.pptx
Spark - An In-Memory Distributed Computing Engine.pptxSpark - An In-Memory Distributed Computing Engine.pptx
Spark - An In-Memory Distributed Computing Engine.pptxAnass Nabil
 
[orleans-tech-19] Unifiez vos traitements Batch et Streaming avec Apache beam
[orleans-tech-19] Unifiez vos traitements Batch et Streaming avec Apache beam[orleans-tech-19] Unifiez vos traitements Batch et Streaming avec Apache beam
[orleans-tech-19] Unifiez vos traitements Batch et Streaming avec Apache beamAlexandre Touret
 
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquée
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquéeDéveloppement d'un générateur d'intépréteur de bytecodes pour une JVM embarquée
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquéeMustapha Tachouct
 
[tours-jug19] Unifiez vos traitements Batch et Streaming avec Apache beam
[tours-jug19] Unifiez vos traitements Batch et Streaming avec Apache beam[tours-jug19] Unifiez vos traitements Batch et Streaming avec Apache beam
[tours-jug19] Unifiez vos traitements Batch et Streaming avec Apache beamAlexandre Touret
 
Methodologie et outils d optimisation php mysql
Methodologie et outils d optimisation php mysqlMethodologie et outils d optimisation php mysql
Methodologie et outils d optimisation php mysqlCodizy
 

Similaire à Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014 (20)

Apache kafka big data track
Apache kafka   big data trackApache kafka   big data track
Apache kafka big data track
 
XebiCon'17 : Rex Akka dans une architecture microservice - Joachim Rousseau
XebiCon'17 : Rex Akka dans une architecture microservice - Joachim RousseauXebiCon'17 : Rex Akka dans une architecture microservice - Joachim Rousseau
XebiCon'17 : Rex Akka dans une architecture microservice - Joachim Rousseau
 
Lagom framework - Touraine Tech 2018
Lagom framework - Touraine Tech 2018Lagom framework - Touraine Tech 2018
Lagom framework - Touraine Tech 2018
 
Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...
Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...
Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...
 
Comprendre et maîtriser la performance de ses applications Spark
Comprendre et maîtriser la performance de ses applications SparkComprendre et maîtriser la performance de ses applications Spark
Comprendre et maîtriser la performance de ses applications Spark
 
Performance serveur et apache
Performance serveur et apachePerformance serveur et apache
Performance serveur et apache
 
Distributed computing with Spark 2.x
Distributed computing with Spark 2.xDistributed computing with Spark 2.x
Distributed computing with Spark 2.x
 
XebiCon'16 : WeScale - DNS as a Service, the OpenStack way. Par Pascal Edoua...
XebiCon'16 : WeScale - DNS as a Service, the OpenStack way.  Par Pascal Edoua...XebiCon'16 : WeScale - DNS as a Service, the OpenStack way.  Par Pascal Edoua...
XebiCon'16 : WeScale - DNS as a Service, the OpenStack way. Par Pascal Edoua...
 
3 Microsoft Advanced Threat Analytics - Genève
3   Microsoft Advanced Threat Analytics - Genève3   Microsoft Advanced Threat Analytics - Genève
3 Microsoft Advanced Threat Analytics - Genève
 
Event sourcing avec Kafka, UPEC
Event sourcing avec Kafka, UPECEvent sourcing avec Kafka, UPEC
Event sourcing avec Kafka, UPEC
 
Meetup kafka 21 Novembre 2017
Meetup kafka 21 Novembre 2017Meetup kafka 21 Novembre 2017
Meetup kafka 21 Novembre 2017
 
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseriesBreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
 
Paris Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearch
Paris Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearchParis Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearch
Paris Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearch
 
Spark - An In-Memory Distributed Computing Engine.pptx
Spark - An In-Memory Distributed Computing Engine.pptxSpark - An In-Memory Distributed Computing Engine.pptx
Spark - An In-Memory Distributed Computing Engine.pptx
 
NoSQL et Big Data
NoSQL et Big DataNoSQL et Big Data
NoSQL et Big Data
 
Paris RailsCamp 2009
Paris RailsCamp 2009Paris RailsCamp 2009
Paris RailsCamp 2009
 
[orleans-tech-19] Unifiez vos traitements Batch et Streaming avec Apache beam
[orleans-tech-19] Unifiez vos traitements Batch et Streaming avec Apache beam[orleans-tech-19] Unifiez vos traitements Batch et Streaming avec Apache beam
[orleans-tech-19] Unifiez vos traitements Batch et Streaming avec Apache beam
 
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquée
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquéeDéveloppement d'un générateur d'intépréteur de bytecodes pour une JVM embarquée
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquée
 
[tours-jug19] Unifiez vos traitements Batch et Streaming avec Apache beam
[tours-jug19] Unifiez vos traitements Batch et Streaming avec Apache beam[tours-jug19] Unifiez vos traitements Batch et Streaming avec Apache beam
[tours-jug19] Unifiez vos traitements Batch et Streaming avec Apache beam
 
Methodologie et outils d optimisation php mysql
Methodologie et outils d optimisation php mysqlMethodologie et outils d optimisation php mysql
Methodologie et outils d optimisation php mysql
 

Plus de Ippon

Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014Ippon
 
Formation html5 CSS3 offerte par ippon 2014
Formation html5 CSS3 offerte par ippon 2014Formation html5 CSS3 offerte par ippon 2014
Formation html5 CSS3 offerte par ippon 2014Ippon
 
Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014Ippon
 
Offre 2015 numeriq_ippon
Offre 2015 numeriq_ipponOffre 2015 numeriq_ippon
Offre 2015 numeriq_ipponIppon
 
Présentation Ippon DGA Liferay Symposium 2011
Présentation Ippon DGA Liferay Symposium 2011Présentation Ippon DGA Liferay Symposium 2011
Présentation Ippon DGA Liferay Symposium 2011Ippon
 
Scrum et forfait
Scrum et forfaitScrum et forfait
Scrum et forfaitIppon
 
Mule ESB Summit 2010 avec Ippon
Mule ESB Summit 2010 avec IpponMule ESB Summit 2010 avec Ippon
Mule ESB Summit 2010 avec IpponIppon
 
Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Ippon
 
Presentation Rex Methodes Agiles
Presentation Rex Methodes AgilesPresentation Rex Methodes Agiles
Presentation Rex Methodes AgilesIppon
 
Seminaire Portail Open Source
Seminaire Portail Open SourceSeminaire Portail Open Source
Seminaire Portail Open SourceIppon
 

Plus de Ippon (10)

Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014
 
Formation html5 CSS3 offerte par ippon 2014
Formation html5 CSS3 offerte par ippon 2014Formation html5 CSS3 offerte par ippon 2014
Formation html5 CSS3 offerte par ippon 2014
 
Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014
 
Offre 2015 numeriq_ippon
Offre 2015 numeriq_ipponOffre 2015 numeriq_ippon
Offre 2015 numeriq_ippon
 
Présentation Ippon DGA Liferay Symposium 2011
Présentation Ippon DGA Liferay Symposium 2011Présentation Ippon DGA Liferay Symposium 2011
Présentation Ippon DGA Liferay Symposium 2011
 
Scrum et forfait
Scrum et forfaitScrum et forfait
Scrum et forfait
 
Mule ESB Summit 2010 avec Ippon
Mule ESB Summit 2010 avec IpponMule ESB Summit 2010 avec Ippon
Mule ESB Summit 2010 avec Ippon
 
Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Présentation Rex GWT 2.0
Présentation Rex GWT 2.0
 
Presentation Rex Methodes Agiles
Presentation Rex Methodes AgilesPresentation Rex Methodes Agiles
Presentation Rex Methodes Agiles
 
Seminaire Portail Open Source
Seminaire Portail Open SourceSeminaire Portail Open Source
Seminaire Portail Open Source
 

Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014

  • 1. #IaaC Realtime Web avec Akka, Kafka, Spark et Mesos @hayssams Hayssam Saleh @jpbunaz Jean-Philippe Bunaz
  • 2. #IaaC Sommaire Tomcat Tomcat FrontfacingApp FrontfacingApp Akka Akka Akka Akka Stream Processing (Spark Streaming) RealtimeViews (ElasticSearch) All Data (Spark) Precompute Views BatchViews Query (Tomcat,Kibana,…) NewDataStream Kafka Speed Layer Batch Layer Serving Layer Product Updates Mesos Marathon Zookeeper Server 1 Server 2 Leader
  • 3. #IaaC Pourquoi Akka Mesos Tomcat Tomcat FrontfacingApp FrontfacingApp Akka Akka Stream Processing (Spark Streaming) RealtimeViews (ElasticSearch) All Data (Spark) Precompute Views BatchViews Query (Tomcat,Kibana,…) NewDataStream Kafka Speed Layer Batch Layer Serving Layer Product Updates Marathon Zookeeper Server 1 Server 2 Leader
  • 4. #IaaC Kompass • Annuaire d’entreprise • Moteur de recherche • Afficher les informations • Disponible dans 70 pays • … @jpbunaz
  • 6. #IaaC Challenge Un tag par prestataire Changer les règles Informations en session Intercepter les requêtes sur le serveur @jpbunaz
  • 7. #IaaC Utilisation d’une Valve A P A C H E TOMCAT WEB APP SESSION VALVE RESPONSE REQUEST ? PARAM LOG REQUEST RESPONSE REQUEST RESPONSE @jpbunaz
  • 8. #IaaC Impacts Mon log peut être long Différent type de log Perturbe mon application La valve doit être non bloquante @jpbunaz
  • 10. #IaaC Acteur : Vue d’avion TASK 2 TASK 1 TASK 4 TASK 4 Tâches indépendantes qui communiquent entre elles de manière asynchrone via des messages TASK 3 TASK 5 @jpbunaz
  • 11. #IaaC Création d’un Message case class MonMessage(param1: String, param2: String, param3: String, param4: String) @jpbunaz
  • 12. #IaaC Création d’un Acteur class MonActeur() extends Actor { def receive = { case MonMessage(param1: String, param2: String, param3: String, param4: String) => // Code de logging case } } @jpbunaz
  • 13. #IaaC Envoi du message à l’acteur // Initialisation de l’acteur val monActeur = actorSystem.actorOf(Props[MyActeur]) // Initialisation du message val monMessage = MonMessage("value1", "value2", "value3", "value4") // Envoi aynchrone du message à l’acteur monActeur ! monMessage // Code exécution avant traitement du message ExecuterLaSuiteDansLaFoulée() @jpbunaz
  • 14. #IaaC Acteur : Points de vigilance N’expose pas son état interne class UglyActeur() extends Actor { var variableCanAccess = null def receive = { case String => // My acteur code… } } @jpbunaz
  • 15. #IaaC Acteur : Points de vigilance Les messages doivent être immuables case class UglyMessage( var param1: String, var param2: String) @jpbunaz
  • 16. #IaaC Acteur : Points de vigilance TASK Working… @jpbunaz • L’acteur ne traite qu’un seul message à la fois • Les messages sont mis en attente dans une boite aux lettres
  • 17. #IaaC Maitriser le nombre d’acteurs Nombre d’Acteur !!! Un message à la fois !!! Utiliser un router @jpbunaz
  • 18. #IaaC Routeur • Maîtriser le nombre d’Acteur • Différents types de routage (RoundRobin, Random …) • Configuration externalisée dans un fichier de propriétés @jpbunaz
  • 19. #IaaC Créer un routeur val monRouteur = actorSystem.actorOf( FromConfig.props(routeProps = Props[MonActeur]) , name = "monRouteur" ) @jpbunaz
  • 20. #IaaC Configurer un routeur Akka.actor.deployment { /monRouteur { router = round-robin-pool nr-of-instances = 5 } } @jpbunaz
  • 21. #IaaC Conclusion sur les Acteurs • Simple à mettre en oeuvre • Contrôle sur les ressources en adéquation avec la charge • Gestion multithread transparente, pas de lock, de synchronized • Naturellement asynchrone @jpbunaz
  • 23. #IaaC Pourquoi Kafka ? Mesos Tomcat Tomcat FrontfacingApp FrontfacingApp Akka Akka Akka Akka Stream Processing (Spark Streaming) RealtimeViews (ElasticSearch) All Data (Spark) Precompute Views BatchViews Query (Tomcat,Kibana,…) NewDataStream Kafka Speed Layer Batch Layer Serving Layer Product Updates Marathon Zookeeper Server 1 Server 2 Leader @hayssams
  • 24. #IaaC Avant les messages groups U2E3 U1E3 U2E2 U1E2 U2E1 •  Solution traditionnelle : Un seul consommateur pour toute la file U1E1 U2E3 U1E3 U2E2 U1E2 U2E1 U1E1 @hayssams
  • 25. #IaaC Avec Kafka : partitionnement par clef U2E3 U2E2 U2E1 U1E3 U1E2 U1E1 U2E3 U2E2 U2E1 U1E3 U1E2 U1E1 Cluster Kafka P1R1 P2R1 P1R2 P2R2 Pro Cons Cons Avec JMSGroupID •  Un local manager (SPOF) plusieurs remote •  Requiert un serveur de backup @hayssams Avec Kafka •  Support natif du partitionnement •  Réplication des messages •  Tolérance au pannes
  • 26. #IaaC Pourquoi Spark Streaming Mesos Tomcat Tomcat FrontfacingApp FrontfacingApp Akka Akka Akka Akka Stream Processing (Spark Streaming) RealtimeViews (ElasticSearch) All Data (Spark) Precompute Views BatchViews Query (Tomcat,Kibana,…) NewDataStream Kafka Speed Layer Batch Layer Serving Layer Product Updates Marathon Zookeeper Server 1 Server 2 Leader @hayssams
  • 27. #IaaC •  Récupération du Tuple(request, response, session, url) • val tuples = kafka.initStream(context, "requests », 2 seconds)" •  Validation des règles • rdd = tuples.filter( t => RulesHandler.match(t))" •  Transformation du tuple en document JSON • rdd2 = rdd.map( t => toDocument)" •  Injection dans ES • rdd2.foreachRDD(doc => es.insert doc)" •  Identification des relations • rdd3 = rdd.flatMap(_.toRelations)! • rdd3.foreachRDD(rel => neo4j.insert rel)" => Statistiques d’accès en temps réel Traitement continu des accès utilisateurs @hayssams
  • 28. #IaaC Avec Spark: API unique pour la batch et le streaming Flux continu provevant de réseau 2s 2s 2s 2s 2s 2s 2s t t +16 •  Découpage du flux en un paquet de données (RDD) toutes les 2 secondes •  Un RDD est une collection de données RDD RDD RDD RDD RDD RDD RDD •  Chaque paquet est traité comme un comme un RDD soumis au batch Spark classique Out Out Out Out D Out D Out Out •  Spark exécute les opérations sur le RDD comme dans un batch classique et renvoie le résultat en retour. Spark •  Exécution de microbatchs @hayssams
  • 29. #IaaC Avec Spark: Tolérance aux pannes au coût minimum val tuples = kafka.initStream(context,"requests », 2 seconds" ! rdd = tuples.filter( t => RulesHandler.match(t))" " rdd2 = rdd.map( t => toDocument)" " rdd2.foreachRDD(doc => es.insert doc) // via Kafka" ! rdd3 = rdd.flatMap(_.toRelations)! ! rdd3.foreachRDD(rel => neo4j.insert rel) // via Kafka KafkaInputDStream FilteredDStream MappedDStream ForEachDStream MappedDStream ForEachDStream •  Le code ci-dessus ne génère aucun calcul, juste un graphe d’objets •  Le Scheduler Spark va soumettre le graphe d’objets aux workers pour exécution •  J En cas de panne, il suffit juste de soumettre à nouveau le graphe d’objets à un autre worker. •  Pas besoin de réplication des résultats ou d’upstream backup @hayssams
  • 30. #IaaC Mesos Tomcat Tomcat FrontfacingApp FrontfacingApp Akka Akka Akka Akka Stream Processing (Spark Streaming) RealtimeViews (ElasticSearch) All Data (Spark) Precompute Views BatchViews Query (Tomcat,Kibana,…) NewDataStream Kafka Speed Layer Batch Layer Serving Layer Product Updates Marathon Zookeeper Server 1 Server 2 Leader Pourquoi Spark Classic @hayssams
  • 31. #IaaC Notification des clients rdd= Sc.readFromXMLFile(…)" rdd.persist! val updatedRDD = rdd.filter(product => product.existsInMapWithDifferentHash)" val newRDD = rdd.filter(product => !product.existInMap)" " val updateNotifications = updatedRDD.map(_.executeStrategies)" " val newNotifications = newRDD.map(_.executeStrategies)" " updateNotifications.union(newNotifications).foreachRDD(_.notifyClient)" " RDD Action @hayssams
  • 32. #IaaC Avec Spark : Une riche librairie d’opérations d1 d2 d3 d1 d2 d3 d1 d2 d3 d2 d3 d1 d2 d3 d1 d2 d3 d1 d2 d3 map filter union groupByKey reduceByKey reduce collect count take first foreach … •  Avec en plus •  J Contrôle sur le partitionnement •  J broadcast •  J accumulateurs •  J Les chaînage d’actions ne requiert pas d’écriture intermédiaire sur disque @hayssams
  • 33. #IaaC Mesos Tomcat Tomcat FrontfacingApp FrontfacingApp Akka Akka Akka Akka Stream Processing (Spark Streaming) RealtimeViews (ElasticSearch) All Data (Spark) Precompute Views BatchViews Query (Tomcat,Kibana,…) NewDataStream Kafka Speed Layer Batch Layer Serving Layer Product Updates Marathon Zookeeper Server 1 Server 2 Leader Pourquoi Apache Zookeeper @hayssams
  • 34. #IaaC Pourquoi Zookeeper • Election de leader pour la tolérance au pannes Maitre Esclave Esclave Esclave Maitre de secours Esclave et maitre de secours Esclave et maitre de secours Esclave et maitre de secours Esclave et maitre de secours Election de leader Avec Zookeeper Tout noeud est un master potentiel @hayssams
  • 35. #IaaC Pourquoi Zookeeper • Centralisation de la configuration / services … master nodes es node1 node2 node1 Zookeeper Server 1 Server 2 Leader Service Service 1.Enregistrementdesservices Client 2. Récupération de la localisation des workers 4. sollicitation du service 3. Sélection du worker @hayssams
  • 36. #IaaC Mesos Tomcat Tomcat FrontfacingApp FrontfacingApp Akka Akka Akka Akka Stream Processing (Spark Streaming) RealtimeViews (ElasticSearch) All Data (Spark) Precompute Views BatchViews Query (Tomcat,Kibana,…) NewDataStream Kafka Speed Layer Batch Layer Serving Layer Product Updates Zookeeper Server 1 Server 2 Leader Pourquoi Mesos Marathon @hayssams
  • 37. #IaaC Avant Mesos Démultiplication nombre de VMs •  €€€ Cluster Tomcat : Frontend facing app •  € Cluster Kafka : Middleware de messages •  €€ Cluster Spark •  €€€ Cluster ElasticSearch •  TTT : Compléxité de configuration •  Apache Mesos et Marathon à la rescousse •  Voir l’ensemble des VMs comme une seule machine sur laquelle tournent plusieurs JVMs @hayssams
  • 38. #IaaC Avant Mesos Démultiplication nombre de VMs Dev. Int. PréProd. Prod. •  Requiert d’exécuter un OS en entier pour obtenir une isolation des ressources et de la sécurité •  Temps de démarrage assez long (5 à 10 minutes par VM) •  Plus d’OS => encore plus de systèmes à administrer •  Coût de licence des VMs •  Allocation statique => Sous utilisation de la CPU VM VM VM VM VM VM VM VM VM VM VM VM VM VM VM VM VM VM VM VM VM VM VM VM VM VM VM @hayssams
  • 39. #IaaC Avec Linux cgroups OS Hôte OS Guest OS Guest OS Guest App1 App2 App3 OS Hôte App1 App2 App3 •  Isolation •  CPU •  Mémoire •  I/O •  Réseau VM Linux cgroups @hayssams
  • 40. #IaaC Avec Mesos Serveur Serveur Serveur Serveur 80 CPU, 640Go App App App App App App App App App •  J Partage des ressources •  J Tolérant aux pannes •  Pour les applications longue durée (MOM / AS) •  Si vous n’avez jamais cherché à savoir sur quel cœur s’exécute votre tâche alors vous n’avez probablement pas besoin de savoir non plus sur quel serveur. •  IaaC : Infrastructure as a (Single) Computer •  Faire fonctionner les différents environnements (dev / Int/ Preprod / Prod) sur la même infrastructure •  Y compris les jobs Jenkins @hayssams
  • 41. #IaaC Architecture Mesos Mesos Master Mesos Worker Mesos Worker MonAppScheduler MonAppExecutor MonAppExecutor 2CPUs, 20Go Tâche •  Pour s’exécuter sur Mesos une application doit implémenter : •  Un scheduler •  Un Executor @hayssams
  • 42. #IaaC Mesos Tomcat Tomcat FrontfacingApp FrontfacingApp Akka Akka Akka Akka Stream Processing (Spark Streaming) RealtimeViews (ElasticSearch) All Data (Spark) Precompute Views BatchViews Query (Tomcat,Kibana,…) NewDataStream Kafka Speed Layer Batch Layer Serving Layer Product Updates Marathon Zookeeper Server 1 Server 2 Leader Marathon @hayssams
  • 43. #IaaC Pourquoi Marathon • Eviter d’avoir à développer un Executor et un Scheduler pour les applications « longue durée » • Marathon permet via une API REST de configurer des instances applicatives au dessus de Mesos en indiquant la commande à lancer @hayssams
  • 44. #IaaC Exemple de commande Marathon POST /v2/apps HTTP/1.1" " {" "id": "TomcatApp"," "cmd": "/path/bin/catalina.sh run $PORT"," "mem": 1024," "cpus": 2.0," "instances": 3," "constraints": [" " " ]" }" " •  Marathon utilisé pour lancer •  Kafka •  ElasticSearch •  Tomcat •  Scale up/down par simple appel REST avec une nouvelle configuration Régulation de charge et découverte GET /apps/MonApp/tasks Hot haproxy.cfg reload @hayssams ["hostname", "UNIQUE", ""],! ["hostname", ”like", ”front{1,2}"]
  • 46. #IaaC Conclusion • Neal Real time Analytics • Batch Analytics • Middleware de messages • Partage dynamique de ressources Spark Streaming Spark Classic Mesos Marathon Kafka Un seul framework IaaC Partionnement automatique @hayssams