SlideShare ist ein Scribd-Unternehmen logo
1 von 56
Downloaden Sie, um offline zu lesen
REX Akka dans une architecture
microservices
REX Akka dans une architecture microservices
Présentations...
2
Joachim Rousseau
__jro
joe-mojo
REX Akka dans une architecture microservices
Agenda
▼ Contexte
▼ Comment avons-nous utilisé Akka streams
▼ Pourquoi Akka HTTP ?
▼ Socket et Akka TCP
▼ Production
3
Contexte
REX Akka dans une architecture microservices
4
Serv. 2
Serv. 3
Serv. 1
Serv. 4
Serv. 5
Serv. 6
TCP
TCP
HTTP
Reactive Manifesto
REX Akka dans une architecture microservices
5
REX Akka dans une architecture microservices
Par où commencer ?
▼ Le format du message ?
▼ Séparer le traitement en étapes ?
▼ Supporter plusieurs points d’entrée ?
6
REX Akka dans une architecture microservices
7
REX Akka dans une architecture microservices
Akka Stream
Back-pressured stream processing
8
REX Akka dans une architecture microservices
Akka Stream
Back pressure
9
Fast :)
Slow :’(
Publisher
Subscriber
REX Akka dans une architecture microservices
Akka Stream
Back pressure
10
100op/sec
1op/sec
Request(3)
REX Akka dans une architecture microservices
Akka Stream
Back pressure
11
REX Akka dans une architecture microservices
Akka Stream avec un message broker ?
12
Business Logic
Source Flow Sink
topic
message
commit
?
REX Akka dans une architecture microservices
Kafka
▼ Journal de messages
▼ Pub-Sub
▼ Distribué
▼ Rapide
▼ Persistance
▼ Consommation indépendante pour chaque client
▽ vitesses différentes
13
Web
Service
Integrator
Web
Service
Integratortopic
REX Akka dans une architecture microservices
Kafka
offsets
▼ Chaque µ-service est un consommateur
▼ Attention au lag
14
Consu.
Actor 2
Producer
Consu.
Actor 1
Consu.
Actor 3
logs
offset #923
offset #785
offset #1003
offset #1003
REX Akka dans une architecture microservices
Consommateur avec akka-stream-kafka
PlainSource vs CommitableSource
15
▼ CommitableSource
▽ Obligation de commiter l’offset
▽ “at least once”
▼ PlainSource
▽ Stockage externe de l’offset
▽ Pas d’auto-commit par défaut
REX Akka dans une architecture microservices
Consommateur avec akka-stream-kafka
16
Topic 1 Consumer
REX Akka dans une architecture microservices
Producteur avec akka-stream-kafka
PlainSink vs CommitableSink
17
▼ CommitableSink
▽ Du consommateur au producteur
▽ Commit auprès de la source lorsque la
production est finie
▼ PlainSink
▽ Pour un simple producteur
▽ Publie un message dans Kafka
Producer
Topic
1
Consumer
Producer
Topic
1
Topic
2
REX Akka dans une architecture microservices
Producteur avec akka-stream-kafka
18
Producer
Topic
1
REX Akka dans une architecture microservices
Producteur avec akka-stream-kafka
19
Consumer
Producer
Topic
1
Topic
2
REX Akka dans une architecture microservices
Producteur avec akka-stream-kafka
Batch
20
Consumer
Producer
Topic
1
Topic
2
REX Akka dans une architecture microservices
21
REX Akka dans une architecture microservices
22
Flow
Failure
REX Akka dans une architecture microservices
23
akka-stream
-contrib
Flow
Failure
REX Akka dans une architecture microservices
Review
24
REX Akka dans une architecture microservices
Akka-http
▼ Complet
▼ Complètement asynchrone
▼ réactif
▼ Serveur et client
▼ Existe en version acteur ou akka-stream
Flow[HttpRequest, HttpResponse]
25
REX Akka dans une architecture microservices
Akka-http
Processing pipeline
26ServerClient
User App Akka
HTTP
User AppAkka
HTTP
Request
Response
Single HTTP connection
REX Akka dans une architecture microservices
Akka-http
client
▼ Différents niveaux de détail
▼ Appel en tant que Flow
▼ Appel en tant qu’acteur
27
Consu.
Actor 2
Service
logs
REX Akka dans une architecture microservices
Akka-http
client
28
REX Akka dans une architecture microservices
Akka-http
serveur
29
Service
2
Kafka
Consu
Health
Checker
topic 1
topic 2
HTTP
topic 2
REX Akka dans une architecture microservices
Akka-http
création du serveur
30
REX Akka dans une architecture microservices
Akka-http
serveur : directives
31
Directive?
REX Akka dans une architecture microservices
Akka-http
serveur : directives
32
REX Akka dans une architecture microservices
Review
33
REX Akka dans une architecture microservices
Sockets
avec akka-tcp
34
REX Akka dans une architecture microservices
Akka-tcp
▼ Client et serveur
▼ Envoie et reçoit des “commandes” TCP
▽ ex: Bind, Connect, Close…
▼ Envoie et reçoit des données
▼ Permet d’implémenter n’importe quel
protocole applicatif
35
Server
TCP
REX Akka dans une architecture microservices
Akka-tcp
Côté client
36
Akka IO
Client
Actor
Connect
create
register
Connected
Delegate
(“connection”)
Manages TCP
I/O to/from
remote
Akka IO
Client
Actor
Connect
Delegate
(“connection”)
Handler
Connected
register
handler
create
create
REX Akka dans une architecture microservices
Akka-tcp
Côté serveur
37
Akka IO
Server
Actor
Bind
Delegate
(“connection”)
Manages TCP
I/O to/from
remote
Akka IO
Server
Actor
Bind
Delegate
(“connection”)
Handler
Bound
create
register
handler
create
register
Bound
REX Akka dans une architecture microservices
Akka-tcp
Le protocole CB2A
38
● Business Message #1
● Business Message #2
● Business Message #3
● Business Message #4
● Business Message #5
TCPPackets
REX Akka dans une architecture microservices
Akka-tcp
Tampon de paquets TCP
def receive = buffering(sessionActor) orElse ???
REX Akka dans une architecture microservices
Akka-tcp
Choisir le bon message du potocole
REX Akka dans une architecture microservices
Akka-tcp
Dépliage (décodage en chaîne) des messages
REX Akka dans une architecture microservices
Akka-tcp
Dépliage (décodage en chaîne) des messages
REX Akka dans une architecture microservices
Review
43
REX Akka dans une architecture microservices
Production
44
REX Akka dans une architecture microservices
Monitoring de Kafka
Est-ce que mes consommateurs fonctionnent ?
45
▼ __consumer_offset
▽ Interne à Kafka
▽ Stocker la métadonnée
▼ Burrow
▽ REST API
▽ Vérification du lag
▽ https://github.com/linkedin/Burrow
REX Akka dans une architecture microservices
Logger avec un MDC
46
REX Akka dans une architecture microservices
Logger avec un MDC
47
REX Akka dans une architecture microservices
Logger avec un MDC
48
Actor MyOwnActor
+ mdc
Slf4jMDCLoggingActor
+ aroundReceive
REX Akka dans une architecture microservices
Executé dans un conteneur Docker
49
Container
Kafka
Consu
Health
Checker
Topic
1
Topic
2
REX Akka dans une architecture microservices
Packaging / Livraison
50
sbt publish sbt marathon:config publish to S3
REX Akka dans une architecture microservices
Monitoring des acteurs
51
▼ Kamon
▼ Yammer metrics
▼ InfluxDb
Influx
DB
Actor
Grafana
Tele-
graph
Actor
Tele-
graph
REX Akka dans une architecture microservices
Monitoring des acteurs
52
REX Akka dans une architecture microservices
Au final
53
REX Akka dans une architecture microservices
Littérature
54
REX Akka dans une architecture microservices
Remerciements
55
Fabian Gutierrez
FabGutierr
fagossa
REX Akka dans une architecture microservices
Merci !
Des questions ?
https://github.com/fagossa/scalaio_akka/

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (20)

Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'e...
Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'e...Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'e...
Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'e...
 
REX Openshift à la Poste
REX Openshift à la PosteREX Openshift à la Poste
REX Openshift à la Poste
 
Paris Container Day 2016 : Architecture microservices hautement disponible au...
Paris Container Day 2016 : Architecture microservices hautement disponible au...Paris Container Day 2016 : Architecture microservices hautement disponible au...
Paris Container Day 2016 : Architecture microservices hautement disponible au...
 
Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...
Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...
Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...
 
Industrialisation PHP - Canal+
Industrialisation PHP - Canal+Industrialisation PHP - Canal+
Industrialisation PHP - Canal+
 
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
 
OpenShift en production - Akram Ben Assi & Eloïse Faure
OpenShift en production - Akram Ben Assi & Eloïse FaureOpenShift en production - Akram Ben Assi & Eloïse Faure
OpenShift en production - Akram Ben Assi & Eloïse Faure
 
Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?
 
Paris Container Day 2016 : De la construction au déploiement d’applications...
Paris Container Day 2016 :  De la construction au déploiement d’applications...Paris Container Day 2016 :  De la construction au déploiement d’applications...
Paris Container Day 2016 : De la construction au déploiement d’applications...
 
Paris Container Day 2016 : Cloudunit v2 (Treeptik)
Paris Container Day 2016 : Cloudunit v2 (Treeptik)Paris Container Day 2016 : Cloudunit v2 (Treeptik)
Paris Container Day 2016 : Cloudunit v2 (Treeptik)
 
Paris Container Day 2016 : Les nouveaux défis du déploiement (Xebia Labs)
Paris Container Day 2016 : Les nouveaux défis du déploiement (Xebia Labs)Paris Container Day 2016 : Les nouveaux défis du déploiement (Xebia Labs)
Paris Container Day 2016 : Les nouveaux défis du déploiement (Xebia Labs)
 
Introduction à ASP.NET Core
Introduction à ASP.NET CoreIntroduction à ASP.NET Core
Introduction à ASP.NET Core
 
ScriptRunner : automatisez vos traitement dans Jira
ScriptRunner : automatisez vos traitement dans JiraScriptRunner : automatisez vos traitement dans Jira
ScriptRunner : automatisez vos traitement dans Jira
 
Devoxx France - Où sont passés mes serveurs ?
Devoxx France - Où sont passés mes serveurs ?Devoxx France - Où sont passés mes serveurs ?
Devoxx France - Où sont passés mes serveurs ?
 
12-Factor
12-Factor12-Factor
12-Factor
 
Déploiement et gestion d'un site web avec Rancher
Déploiement et gestion d'un site web avec RancherDéploiement et gestion d'un site web avec Rancher
Déploiement et gestion d'un site web avec Rancher
 
DevOps : mission [im]possible ?
DevOps : mission [im]possible ?DevOps : mission [im]possible ?
DevOps : mission [im]possible ?
 
5- [ASP.NET Core] Devops : VSTS, Git, Azure, Docker, Linux
5- [ASP.NET Core] Devops : VSTS, Git, Azure, Docker, Linux5- [ASP.NET Core] Devops : VSTS, Git, Azure, Docker, Linux
5- [ASP.NET Core] Devops : VSTS, Git, Azure, Docker, Linux
 
Tadx - Présentation Conteneurisation
Tadx -  Présentation ConteneurisationTadx -  Présentation Conteneurisation
Tadx - Présentation Conteneurisation
 
Les micro orm, alternatives à entity framework
Les micro orm, alternatives à entity frameworkLes micro orm, alternatives à entity framework
Les micro orm, alternatives à entity framework
 

Ähnlich wie XebiCon'17 : Rex Akka dans une architecture microservice - Joachim Rousseau

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
ebiznext
 
#OSSPARIS19 - Stream processing : de la base de données classique au streamin...
#OSSPARIS19 - Stream processing : de la base de données classique au streamin...#OSSPARIS19 - Stream processing : de la base de données classique au streamin...
#OSSPARIS19 - Stream processing : de la base de données classique au streamin...
Paris Open Source Summit
 
RAPPORT DU PREMIER MINI PROJET «FORUM DE CHAT» Novembre 2005.pdf
RAPPORT DU PREMIER MINI PROJET «FORUM DE CHAT» Novembre 2005.pdfRAPPORT DU PREMIER MINI PROJET «FORUM DE CHAT» Novembre 2005.pdf
RAPPORT DU PREMIER MINI PROJET «FORUM DE CHAT» Novembre 2005.pdf
Souf212
 

Ähnlich wie XebiCon'17 : Rex Akka dans une architecture microservice - Joachim Rousseau (20)

Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014
Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014
Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014
 
Apache kafka big data track
Apache kafka   big data trackApache kafka   big data track
Apache kafka big data track
 
Apache Kafka, Un système distribué de messagerie hautement performant
Apache Kafka, Un système distribué de messagerie hautement performantApache Kafka, Un système distribué de messagerie hautement performant
Apache Kafka, Un système distribué de messagerie hautement performant
 
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
 
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
 
#OSSPARIS19 - Stream processing : de la base de données classique au streamin...
#OSSPARIS19 - Stream processing : de la base de données classique au streamin...#OSSPARIS19 - Stream processing : de la base de données classique au streamin...
#OSSPARIS19 - Stream processing : de la base de données classique au streamin...
 
Administration VMware esxi vsphere
Administration VMware esxi  vsphere Administration VMware esxi  vsphere
Administration VMware esxi vsphere
 
Event sourcing avec Kafka, UPEC
Event sourcing avec Kafka, UPECEvent sourcing avec Kafka, UPEC
Event sourcing avec Kafka, UPEC
 
Traitement temps réel de flux réseaux IPFIX/Netflow avec PySpark, Kafka et Ca...
Traitement temps réel de flux réseaux IPFIX/Netflow avec PySpark, Kafka et Ca...Traitement temps réel de flux réseaux IPFIX/Netflow avec PySpark, Kafka et Ca...
Traitement temps réel de flux réseaux IPFIX/Netflow avec PySpark, Kafka et Ca...
 
LUGE - Introduction aux brokers
LUGE - Introduction aux brokersLUGE - Introduction aux brokers
LUGE - Introduction aux brokers
 
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...
 
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services Par Al...
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services  Par Al...XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services  Par Al...
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services Par Al...
 
Tk08 Silverlight Une Cure De Jouvence Pour Vos Applications Asp Fr
Tk08 Silverlight Une Cure De Jouvence Pour Vos Applications Asp FrTk08 Silverlight Une Cure De Jouvence Pour Vos Applications Asp Fr
Tk08 Silverlight Une Cure De Jouvence Pour Vos Applications Asp Fr
 
Liquibase
LiquibaseLiquibase
Liquibase
 
Docker Geneva Meetup - Swarm
Docker Geneva Meetup - SwarmDocker Geneva Meetup - Swarm
Docker Geneva Meetup - Swarm
 
Riak introduction
Riak introductionRiak introduction
Riak introduction
 
Orchestrating Docker in production - TIAD Camp Docker
Orchestrating Docker in production - TIAD Camp DockerOrchestrating Docker in production - TIAD Camp Docker
Orchestrating Docker in production - TIAD Camp Docker
 
Messaging temps réel avec Go
Messaging temps réel avec GoMessaging temps réel avec Go
Messaging temps réel avec Go
 
Lagom framework - Touraine Tech 2018
Lagom framework - Touraine Tech 2018Lagom framework - Touraine Tech 2018
Lagom framework - Touraine Tech 2018
 
RAPPORT DU PREMIER MINI PROJET «FORUM DE CHAT» Novembre 2005.pdf
RAPPORT DU PREMIER MINI PROJET «FORUM DE CHAT» Novembre 2005.pdfRAPPORT DU PREMIER MINI PROJET «FORUM DE CHAT» Novembre 2005.pdf
RAPPORT DU PREMIER MINI PROJET «FORUM DE CHAT» Novembre 2005.pdf
 

Mehr von Publicis Sapient Engineering

Mehr von Publicis Sapient Engineering (20)

XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humain
XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humainXebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humain
XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humain
 
Xebicon'18 - IoT: From Edge to Cloud
Xebicon'18 - IoT: From Edge to CloudXebicon'18 - IoT: From Edge to Cloud
Xebicon'18 - IoT: From Edge to Cloud
 
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveurXebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
 
XebiCon'18 - Modern Infrastructure
XebiCon'18 - Modern InfrastructureXebiCon'18 - Modern Infrastructure
XebiCon'18 - Modern Infrastructure
 
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...
 
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin XebiCon'18 - Des notebook pour le monitoring avec Zeppelin
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin
 
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?XebiCon'18 - Event Sourcing et RGPD, incompatibles ?
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?
 
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?
 
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribué
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribuéXebiCon'18 - Boostez vos modèles avec du Deep Learning distribué
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribué
 
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...
 
XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !
XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !
XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !
 
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des dataviz
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des datavizXebiCon'18 - Comment fausser l'interprétation de vos résultats avec des dataviz
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des dataviz
 
XebiCon'18 - Le développeur dans la Pop Culture
XebiCon'18 - Le développeur dans la Pop Culture XebiCon'18 - Le développeur dans la Pop Culture
XebiCon'18 - Le développeur dans la Pop Culture
 
XebiCon'18 - Architecturer son application mobile pour la durabilité
XebiCon'18 - Architecturer son application mobile pour la durabilitéXebiCon'18 - Architecturer son application mobile pour la durabilité
XebiCon'18 - Architecturer son application mobile pour la durabilité
 
XebiCon'18 - Sécuriser son API avec OpenID Connect
XebiCon'18 - Sécuriser son API avec OpenID ConnectXebiCon'18 - Sécuriser son API avec OpenID Connect
XebiCon'18 - Sécuriser son API avec OpenID Connect
 
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...
 
XebiCon'18 - Spark NLP, un an après
XebiCon'18 - Spark NLP, un an aprèsXebiCon'18 - Spark NLP, un an après
XebiCon'18 - Spark NLP, un an après
 
XebiCon'18 - La sécurité, douce illusion même en 2018
XebiCon'18 - La sécurité, douce illusion même en 2018XebiCon'18 - La sécurité, douce illusion même en 2018
XebiCon'18 - La sécurité, douce illusion même en 2018
 
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
 
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...
 

XebiCon'17 : Rex Akka dans une architecture microservice - Joachim Rousseau

  • 1. REX Akka dans une architecture microservices
  • 2. REX Akka dans une architecture microservices Présentations... 2 Joachim Rousseau __jro joe-mojo
  • 3. REX Akka dans une architecture microservices Agenda ▼ Contexte ▼ Comment avons-nous utilisé Akka streams ▼ Pourquoi Akka HTTP ? ▼ Socket et Akka TCP ▼ Production 3
  • 4. Contexte REX Akka dans une architecture microservices 4 Serv. 2 Serv. 3 Serv. 1 Serv. 4 Serv. 5 Serv. 6 TCP TCP HTTP
  • 5. Reactive Manifesto REX Akka dans une architecture microservices 5
  • 6. REX Akka dans une architecture microservices Par où commencer ? ▼ Le format du message ? ▼ Séparer le traitement en étapes ? ▼ Supporter plusieurs points d’entrée ? 6
  • 7. REX Akka dans une architecture microservices 7
  • 8. REX Akka dans une architecture microservices Akka Stream Back-pressured stream processing 8
  • 9. REX Akka dans une architecture microservices Akka Stream Back pressure 9 Fast :) Slow :’( Publisher Subscriber
  • 10. REX Akka dans une architecture microservices Akka Stream Back pressure 10 100op/sec 1op/sec Request(3)
  • 11. REX Akka dans une architecture microservices Akka Stream Back pressure 11
  • 12. REX Akka dans une architecture microservices Akka Stream avec un message broker ? 12 Business Logic Source Flow Sink topic message commit ?
  • 13. REX Akka dans une architecture microservices Kafka ▼ Journal de messages ▼ Pub-Sub ▼ Distribué ▼ Rapide ▼ Persistance ▼ Consommation indépendante pour chaque client ▽ vitesses différentes 13 Web Service Integrator Web Service Integratortopic
  • 14. REX Akka dans une architecture microservices Kafka offsets ▼ Chaque µ-service est un consommateur ▼ Attention au lag 14 Consu. Actor 2 Producer Consu. Actor 1 Consu. Actor 3 logs offset #923 offset #785 offset #1003 offset #1003
  • 15. REX Akka dans une architecture microservices Consommateur avec akka-stream-kafka PlainSource vs CommitableSource 15 ▼ CommitableSource ▽ Obligation de commiter l’offset ▽ “at least once” ▼ PlainSource ▽ Stockage externe de l’offset ▽ Pas d’auto-commit par défaut
  • 16. REX Akka dans une architecture microservices Consommateur avec akka-stream-kafka 16 Topic 1 Consumer
  • 17. REX Akka dans une architecture microservices Producteur avec akka-stream-kafka PlainSink vs CommitableSink 17 ▼ CommitableSink ▽ Du consommateur au producteur ▽ Commit auprès de la source lorsque la production est finie ▼ PlainSink ▽ Pour un simple producteur ▽ Publie un message dans Kafka Producer Topic 1 Consumer Producer Topic 1 Topic 2
  • 18. REX Akka dans une architecture microservices Producteur avec akka-stream-kafka 18 Producer Topic 1
  • 19. REX Akka dans une architecture microservices Producteur avec akka-stream-kafka 19 Consumer Producer Topic 1 Topic 2
  • 20. REX Akka dans une architecture microservices Producteur avec akka-stream-kafka Batch 20 Consumer Producer Topic 1 Topic 2
  • 21. REX Akka dans une architecture microservices 21
  • 22. REX Akka dans une architecture microservices 22 Flow Failure
  • 23. REX Akka dans une architecture microservices 23 akka-stream -contrib Flow Failure
  • 24. REX Akka dans une architecture microservices Review 24
  • 25. REX Akka dans une architecture microservices Akka-http ▼ Complet ▼ Complètement asynchrone ▼ réactif ▼ Serveur et client ▼ Existe en version acteur ou akka-stream Flow[HttpRequest, HttpResponse] 25
  • 26. REX Akka dans une architecture microservices Akka-http Processing pipeline 26ServerClient User App Akka HTTP User AppAkka HTTP Request Response Single HTTP connection
  • 27. REX Akka dans une architecture microservices Akka-http client ▼ Différents niveaux de détail ▼ Appel en tant que Flow ▼ Appel en tant qu’acteur 27 Consu. Actor 2 Service logs
  • 28. REX Akka dans une architecture microservices Akka-http client 28
  • 29. REX Akka dans une architecture microservices Akka-http serveur 29 Service 2 Kafka Consu Health Checker topic 1 topic 2 HTTP topic 2
  • 30. REX Akka dans une architecture microservices Akka-http création du serveur 30
  • 31. REX Akka dans une architecture microservices Akka-http serveur : directives 31 Directive?
  • 32. REX Akka dans une architecture microservices Akka-http serveur : directives 32
  • 33. REX Akka dans une architecture microservices Review 33
  • 34. REX Akka dans une architecture microservices Sockets avec akka-tcp 34
  • 35. REX Akka dans une architecture microservices Akka-tcp ▼ Client et serveur ▼ Envoie et reçoit des “commandes” TCP ▽ ex: Bind, Connect, Close… ▼ Envoie et reçoit des données ▼ Permet d’implémenter n’importe quel protocole applicatif 35 Server TCP
  • 36. REX Akka dans une architecture microservices Akka-tcp Côté client 36 Akka IO Client Actor Connect create register Connected Delegate (“connection”) Manages TCP I/O to/from remote Akka IO Client Actor Connect Delegate (“connection”) Handler Connected register handler create create
  • 37. REX Akka dans une architecture microservices Akka-tcp Côté serveur 37 Akka IO Server Actor Bind Delegate (“connection”) Manages TCP I/O to/from remote Akka IO Server Actor Bind Delegate (“connection”) Handler Bound create register handler create register Bound
  • 38. REX Akka dans une architecture microservices Akka-tcp Le protocole CB2A 38 ● Business Message #1 ● Business Message #2 ● Business Message #3 ● Business Message #4 ● Business Message #5 TCPPackets
  • 39. REX Akka dans une architecture microservices Akka-tcp Tampon de paquets TCP def receive = buffering(sessionActor) orElse ???
  • 40. REX Akka dans une architecture microservices Akka-tcp Choisir le bon message du potocole
  • 41. REX Akka dans une architecture microservices Akka-tcp Dépliage (décodage en chaîne) des messages
  • 42. REX Akka dans une architecture microservices Akka-tcp Dépliage (décodage en chaîne) des messages
  • 43. REX Akka dans une architecture microservices Review 43
  • 44. REX Akka dans une architecture microservices Production 44
  • 45. REX Akka dans une architecture microservices Monitoring de Kafka Est-ce que mes consommateurs fonctionnent ? 45 ▼ __consumer_offset ▽ Interne à Kafka ▽ Stocker la métadonnée ▼ Burrow ▽ REST API ▽ Vérification du lag ▽ https://github.com/linkedin/Burrow
  • 46. REX Akka dans une architecture microservices Logger avec un MDC 46
  • 47. REX Akka dans une architecture microservices Logger avec un MDC 47
  • 48. REX Akka dans une architecture microservices Logger avec un MDC 48 Actor MyOwnActor + mdc Slf4jMDCLoggingActor + aroundReceive
  • 49. REX Akka dans une architecture microservices Executé dans un conteneur Docker 49 Container Kafka Consu Health Checker Topic 1 Topic 2
  • 50. REX Akka dans une architecture microservices Packaging / Livraison 50 sbt publish sbt marathon:config publish to S3
  • 51. REX Akka dans une architecture microservices Monitoring des acteurs 51 ▼ Kamon ▼ Yammer metrics ▼ InfluxDb Influx DB Actor Grafana Tele- graph Actor Tele- graph
  • 52. REX Akka dans une architecture microservices Monitoring des acteurs 52
  • 53. REX Akka dans une architecture microservices Au final 53
  • 54. REX Akka dans une architecture microservices Littérature 54
  • 55. REX Akka dans une architecture microservices Remerciements 55 Fabian Gutierrez FabGutierr fagossa
  • 56. REX Akka dans une architecture microservices Merci ! Des questions ? https://github.com/fagossa/scalaio_akka/