SlideShare une entreprise Scribd logo
z
Migration d’une Architecture
Microservice vers une
Architecture Event-Driven
Microservice avec
Kafka
1
Daniel FOUOMENE
daniel.fouomene@afrinnov.xyz
https://github.com/fouomene/poc-jcdecaux-spring-kafka-websocket
https://github.com/fouomene/poc-microservice-edge-spring-cloud
https://github.com/fouomene/poc-event-driven-microservice-edge-kafka-spring-cloud
z
Plan
I. Event-Driven Architecture
1. Introduction
2. Event Broker : Apache Kafka
3. Mise en œuvre : POC App JCDecaux Station avec Spring Kafka, Spring Websocket
II. Microservice Architecture
1. Introduction
2. Edge Microservice : Spring Cloud
3. Mise en œuvre : POC App Mini-Ecommerce avec Spring Cloud
III. Event-Driven Microservice Architecture
1. Introduction
2. Mise en œuvre : POC App Mini-Ecommerce avec Spring Cloud, Spring Kafka
IV. Références
2
z
I. Event-Driven Architecture
1. Introduction
3
z
I. Event-Driven Architecture
1. Introduction
 Event-Driven Architecture : Architecture Orientée Evénements
 Un modèle d'architecture logicielle utilisé pour la conception d'applications.
 La structure centrale de la solution repose
 sur la capture, la communication,
 le traitement et la persistance des événements (Events).
 Souvent appelée communication « Asynchrone »
 Cela signifie que le producteur (Producer) et le consommateur (Consumer) de
l’événement n'ont pas besoin d'attendre l'autre pour passer à la tâche suivante.
 Lorsqu'un événement a été détecté, il est transmis du producteur d'événements au consommateur via
des canaux d'événement ou Bus d’événement (Event Broker).
4
z
I. Event-Driven Architecture
1. Introduction
 Faiblement couplée
 Les producteurs d'événements ignorent quels consommateurs d'événements écoutent un
événement et que chaque événement ignore les conséquences de son apparition.
 Très scalable
 Facilité à multiplier indépendamment les instances des producteurs et consommateurs,
en fonction de leur charge de travail.
 L’exposition des événements en temps réel
 Facilité d’abonner de nouveaux consommateurs aux événements produits sans impact sur
les services en place, en particulier le service producteur de l’événement.
 Une Approche et non un langage
 Les applications orientées événements peuvent être créées à l'aide de n'importe quel
langage de programmation.
5
z
I. Event-Driven Architecture
1. Introduction
 Les challenges principaux à relever dans la mise en place d’une architecture event-
driven sont les suivants :
 La cohérence entre les services n’est pas immédiate, on parle de
cohérence à terme.
 Il faudra intégrer cet aspect dans la conception des traitements et veiller à ce que le délai de
synchronisation ne soit pas trop important, en s’assurant par exemple que la consommation
des événements soit plus rapide que leur production.
 S’assurer que tous les événements soient acheminés et traités,
 sans quoi deux services pourraient se trouver définitivement désynchronisés pour certaines
entités
 Être vigilant sur le paramétrage du bus d’événements ainsi que
des applicatifs producteurs et consommateurs d’événements.
6
z
I. Event-Driven Architecture
2. Event Broker : Apache Kafka
7
CONNECTOR
STREAMS
z
I. Event-Driven Architecture
2. Event Broker : Apache Kafka
 Kafka comme bus d’événement (Event Broker)
 Une plateforme distribuée de diffusion (Streaming) de données
en continu, capable de publier, stocker, traiter et souscrire à
des flux d'enregistrement en temps réel.
 Initialement développée par LinkedIn comme système interne
pour la gestion de ses 1 400 milliards de messages
quotidiens, c'est aujourd'hui une solution Open Source
Apache.
8
z
I. Event-Driven Architecture
2. Event Broker : Apache Kafka
9
 Kafka permet :
 Garantit le découplage entre producteurs de données et
consommateurs
 Supporte des consommateurs multiples
 Permet une forte scalabilité horizontale via une Architecture
distribuée
 Met en œuvre la persistance des données
 Les événements qui sont publiés dans Kafka ne sont pas
supprimés dès leur consommation, comme dans les solutions
orientées messaging (ex : RabbitMQ).
z
I. Event-Driven Architecture
2. Event Broker : Apache Kafka
10
z
I. Event-Driven Architecture
2. Event Broker : Apache Kafka
11
Config Kafka
“default.replication.factor=2” // nombre de
réplications des partitions dans les brokers
“min.insync.replicas=1” // le nombre minimal de
réplicas à maintenir en synchronisation à 2 tout
juste après écriture sur la partition leader
config Producer
“request.required.acks=all” pour que le broker
qui contient la partition leader n’acquitte (ack)
l’écriture qu’après avoir procédé à la réplication.
Pour que la réplication soit effective à tout moment
et éviter la perte de message.
Config Consumer
“enable.auto.commit=false”//
désactiver l’autocommit et réaliser un
commit explicite en fin de traitement
pour garantir que chaque événement qui
a fait l’objet d’un commit a bien été pris
en compte par le consommateur.
z
I. Event-Driven Architecture
2. Event Broker : Apache Kafka
12
z
 Data Streaming, le terrain de prédilection de Kafka
13
I. Event-Driven Architecture
2. Event Broker : Apache Kafka
 Dans cette étude(2017), si 50% des interrogés mentionnent « le messaging »
parmi les tâches confiées à Kafka, 66% évoquent le « streaming process ». Parmi
les cas d’usages, se détachent les data pipelines (81% de mentions), les
Microservices (50%), ou encore la supervision temps réel (43%).
z
I. Event-Driven Architecture
3. Mise en œuvre : POC App JCDecaux Station avec
Spring Kafka, Spring Websocket
14
JCDecaux Producer
DASHBOARD
Client Websocket UI
@MessageMapping
(/jcdecaux)
StompBroker
Send destination
/app/jcdecaux
Send destination
/topic/stations
Recieve
Message
/topic/stations
Request
Channel
Response
Channel
Broker
Channel
JCDecaux Consumer
DASHBOARD
Client Websocket UI
@MessageMapping
(/jcdecaux)
StompBroker
Send destination
/app/jcdecaux
Send destination
/topic/stations
Recieve
Message
/topic/stations
Request
Channel
Response
Channel
Broker
Channel
Request
Channel
station station
Observation en temps réel des locations des vélos à chaque station JCDecaux
dans le monde.
https://github.com/fouomene/poc-jcdecaux-spring-kafka-websocket
Broker
Channel
API
z
I. Event-Driven Architecture
3. Mise en œuvre : POC App JCDecaux Station avec
Spring Kafka, Spring Websocket
15
https://github.com/fouomene/poc-jcdecaux-spring-kafka-websocket
z
I. Event-Driven Architecture
3. Mise en œuvre : POC App JCDecaux Station avec
Spring Kafka, Spring Websocket
16
Kafka Manager https://github.com/yahoo/CMAK
z
II. Microservice Architecture
1. Introduction
17
 Architecture Microservice
 « Le style architectural des microservices est une approche permettant de
développer une application unique sous la forme d’une suite logicielle
intégrant plusieurs services. Ces services sont construits autour des
capacités de l’entreprise et peuvent être déployés de façon indépendante »
Martin Fowler
 Microservices sont une méthode développement logiciel utilisée pour
concevoir une application comme un ensemble de services modulaires.
Chaque module répond à un objectif métier spécifique et communique avec
les autres modules.
z
II. Microservice Architecture
1. Introduction
18
microservice C
code App
< / >
API
microservice B
code App
< / >
API
microservice A
code App
< / >
API microservice D
code App
< / >
API
Client
Communication
client to service
service to service
Database
Database
Database
Database
z
II. Microservice Architecture
1. Introduction
19
 Réduction du temps de développement
 Grâce à un développement distribué, plusieurs microservices peuvent être travaillés et
développés simultanément.
 Évolutivité accrue
 Avec les microservices et leur indépendance en termes de développement et de déploiement.
Cela permet de faire évoluer l’application sereinement pour répondre à de nouveaux besoins
et de nouvelles demandes sans entraver le fonctionnement du système.
 Réduction des pannes
 Les microservices étant indépendants, lorsqu’un élément tombe en panne ou rencontre un
problème, l’ensemble de l’application ne cesse pas de fonctionner contrairement aux applications
monolithiques. Il est également plus facile d’identifier et de résoudre une panne dans ce type
d’eco-système.
z
II. Microservice Architecture
1. Introduction
20
 L’adaptabilité de chaque microservice aux outils de travail
 L’indépendance des composants offre la possibilité de paramétrer les microservices avec
différents langages de programmation. Ainsi, les outils opérationnels utilisés par l’entreprise
peuvent être rendus compatibles avec la solution globale.
 La flexibilité par rapport au cloud
 Une entreprise qui utilise l’architecture en microservices peut réduire ou augmenter son usage
du cloud en fonction de la charge de l’application. L’organisation est ainsi beaucoup plus flexible.
 Le plus important dans l’implémentation des microservices, c’est de faire simple.
 Il faut déléguer le maximum d’exigences non fonctionnelles à l’infrastructure logicielle
(conteneurs, Services Mesh, etc…) pour réduire les risques futurs de dettes techniques, et
garantir un fonctionnement homogène des services.
 Pour cela, on se doit de respecter les règles des 12 factors (https://12factor.net/fr/ ).
z
II. Microservice Architecture
2. Edge Microservice : Spring Cloud
21
 Spring Cloud fournit des fonctionnalités pour les cas d'utilisation typiques
tels que l'enregistrement et la découverte de services, le routage, l'équilibrage
de charge et les circuit-breakers.
z
II. Microservice Architecture
2. Edge Microservice : Spring Cloud
22
 Spring Cloud Bootstrap (e.g. Bootstrap context and @RefreshScope)
 Spring Cloud Config : Se positionne comme serveur de distribution des fichiers de
configuration.
 Config Server
 Config Client
 Spring Cloud Netflix
 Discovery : Permet de découvrir les Microservice sur notre serveur. C’est aussi un outil clé
pour la gestion des Microservices.
 Eureka Server
 Eureka Client
 Load Balancer
 Ribbon (config et dépendance commenté) : Équilibrer les requêtes entre plusieurs
instances pour éviter une surcharge d’un serveur
 Circuit Breaker : Définit un ensemble de seuils qui, une fois dépassés, arrêteront
l'exécution d'un bloc de code.
 Hystrix : Une API pour la résilience d’applications.
z
II. Microservice Architecture
2. Edge Microservice : Spring Cloud
23
 Spring Cloud Routing
 Gateway : Le point d’entrée unique pour les API et Microservices.
 OpenFeign : Faire communiquer (synchrone) les microservices grâce à Feign.
 Spring Cloud Load Balancer : Équilibrer les requêtes entre plusieurs instances pour éviter
une surcharge d’un serveur
 Spring Cloud Observability
 Sleuth : Permet de donner des ID uniques à chaque requête, c'est
 Zipkin Client : permet exposer les traces vers Zipkin Server.
 Spring Boot Actuator : expose une API qui donne des informations sur le microservice
concerné, mais ne propose pas d'interface graphique.
 Zipkin Server : permet de tracer les requêtes de service en service uniquement si ces
services intègrent ses dépendances.
z
II. Microservice Architecture
3. Mise en œuvre : POC App Mini-Ecommerce avec Spring Cloud
24
z
II. Microservice Architecture
3. Mise en œuvre : POC App Mini-Ecommerce avec Spring Cloud
25
microservice
client UI
Instance
Port : 8080
API
microservice
produits
Instance
Port : 8001
API
microservice
produits
Instance
Port : 8011
API
microservice
commandes
Instance
Port : 8002
API
microservice
paiement
Instance
Port : 8003
API
Distributed tracing
Zipkin-Server
Instance
Port : 9411
Service Registry
Eureka-Server
Instance
Port : 8102
Service Routing
Gateway-Server
Instance
Port : 8004
Service Config
Config-Server
Instance
Port : 8101
Service Routing
Spring Load
Balancing
Communication
service to service
https://github.com/fouomene/poc-microservice-edge-spring-cloud
z
II. Microservice Architecture
3. Mise en œuvre : POC App Mini-Ecommerce avec Spring Cloud
26
https://github.com/fouomene/poc-microservice-edge-spring-cloud
z
II. Microservice Architecture
3. Mise en œuvre : POC App Mini-Ecommerce avec Spring Cloud
27
https://github.com/fouomene/poc-microservice-edge-spring-cloud
z
28
III. Event-Driven Microservice Architecture
1. Introduction
 De nombreux facteurs avantageux et déterminants caractéristiques de
l’architecture microservices se retrouvent dans une architecture orientée
événements, qui permettent toutes les deux de relever des défis similaires.
 Cependant, prenez une architecture microservices adoptant une approche
d’intégration demande/réponse synchrone traditionnelle ; ce type d’architecture
active un service atomique indépendant doté d’un cycle de vie indépendant et,
par conséquent et de manière générale, une équipe indépendante qui en est
responsable. Si ce service reposait une un flux d’intégration demande/réponse
avec un autre microservice (sans raison spécifique), alors le service ne serait pas
couplé de manière lâche et n’en serait pas véritablement indépendant. Vous ne
pourriez pas mettre à niveau/faire évoluer le service sans vous préoccuper du
service couplé.
z
29
III. Event-Driven Microservice Architecture
1. Introduction
 Il n’est pas indispensable de disposer d’une architecture orientée événements
pour surmonter ce problème, car un modèle asynchrone alternatif, comme une
file d’attente de messages, constituerait une solution efficace dans cette situation.
Cependant, cela démontre dans quelle mesure les caractéristiques d’une
architecture orientée événements et la diffusion d’événements peuvent interagir
de manière positive avec les microservices.
z
30
III. Event-Driven Microservice Architecture
1. Introduction
z
31
III. Event-Driven Microservice Architecture
1. Introduction
z
32
III. Event-Driven Microservice Architecture
1. Introduction
z
33
III. Event-Driven Microservice Architecture
1. Introduction
microservice C
code App
< / >
API
microservice B
code App
< / >
API
microservice A
code App
< / >
API microservice D
code App
< / >
API
Client
Communication
client to service
service to service
Database
Database
Database
Database
z
34
III. Event-Driven Microservice Architecture
1. Introduction
microservice C
code App
< / >
microservice B
code App
< / >
microservice A
code App
< / >
API
microservice D
code App
< / >
Client
Communication
client to service
service to broker
Database
Database
Database
Database
EVENT
API
EVENT
API
EVENT
API
EVENT
EVENT BROKER
z
35
microservice
client UI
Instance
Port : 8080
API
microservice
produits
Instance
Port : 8001
API
microservice
produits
Instance
Port : 8011
API
microservice
commandes
Instance
Port : 8002
API
microservice
paiement
Instance
Port : 8003
API
Distributed tracing
Zipkin-Server
Instance
Port : 9411
Service Registry
Eureka-Server
Instance
Port : 8102
Service Routing
Gateway-Server
Instance
Port : 8004
Service Config
Config-Server
Instance
Port : 8101
Service Routing
Spring Load
Balancing
Communication
service to service
https://github.com/fouomene/poc-microservice-edge-spring-cloud
III. Event-Driven Microservice Architecture
2. Mise en œuvre : POC App Mini-Ecommerce avec Spring Cloud, Spring Kafka
z
III. Event-Driven Microservice Architecture
2. Mise en œuvre : POC App Mini-Ecommerce avec Spring Cloud, Spring Kafka
36
microservice
client UI
Instance
Port : 8080
API
microservice
produits
Instance
Port : 8001
API
microservice
produits
Instance
Port : 8011
API
microservice
commandes
consumer
Instance
Port : 8002
microservice
paiement
producer
Instance
Port : 8003
Distributed tracing
Zipkin-Server
Instance
Port : 9411
Service Registry
Eureka-Server
Instance
Port : 8102
Service Routing
Gateway-Server
Instance
Port : 8004
Service Config
Config-Server
Instance
Port : 8101
Service Routing
Spring Load
Balancing
Communication
service to broker
API
EVENT
API
EVENT
https://github.com/fouomene/poc-event-driven-microservice-edge-kafka-spring-cloud
z
37
microservice
paiement
Instance
Port : 8003
API
database
Table : paiement
id idcommande montant
1 2 500
2 8 10000
3 5 20000
si le paiement est accepté
enregistrer paiement avec
idcommande = 5
return idpaiement = 3
requête pour paiement
de la commande
idcommande = 5
microservice
commandes
Instance
Port : 8003
API
database
Table : commande
id commandePaye quantite
2 false 2
5 true 10
8 false 30
9 false 1
mettre à jour le statut idcommande = 5
à commandePaye = true
2
enregistrer la commande
return idcommande = 5
requête création
commande
reponse commande crée
idcommande = 5
Client
1
3
4
5
6
7
requête pour mettre à jour
le statut de la commande
idcommande = 5
III. Event-Driven Microservice Architecture
2. Mise en œuvre : POC App Mini-Ecommerce avec Spring Cloud, Spring Kafka
z
38
microservice
paiement
Producer
Instance
Port : 8003
API
EVENT
database
Table : paiement
id idcommande montant
1 2 500
2 8 10000
3 5 20000
si le paiement est accepté
enregistrer paiement avec
idcommande = 5
return idpaiement = 3
requête pour paiement
de la commande
idcommande = 5
microservice
commandes
Consumer
Instance
Port : 8003
API
EVENT
database
Table : commande
id commandePaye quantite
2 false 2
5 true 10
8 false 30
9 false 1
mettre à jour le statut idcommande = 5
commandePaye = true
CommandeEvent
idcommande = 5
CommandeEvent
idcommande = 8
CommandeEvent
idcommande = 2
send
receive
topic : paiement
2
enregistrer la commande
return idcommande = 5
requête création
commande
reponse commande crée
idcommande = 5
Client
1
3
4
5
6
7
8
III. Event-Driven Microservice Architecture
2. Mise en œuvre : POC App Mini-Ecommerce avec Spring Cloud, Spring Kafka
z
II. Event-Driven Microservice Architecture
2. Mise en œuvre : POC App Mini-Ecommerce avec Spring Cloud, Spring Kafka
39
https://github.com/fouomene/poc-event-driven-microservice-edge-kafka-spring-cloud
z
II. Event-Driven Microservice Architecture
2. Mise en œuvre : POC App Mini-Ecommerce avec Spring Cloud, Spring Kafka
40
https://github.com/fouomene/poc-event-driven-microservice-edge-kafka-spring-cloud
z IV. Références
41
 https://github.com/fouomene/poc-jcdecaux-spring-kafka-websocket
 https://github.com/fouomene/poc-microservice-edge-spring-cloud
 https://github.com/fouomene/poc-event-driven-microservice-edge-kafka-spring-cloud
 https://kafka.apache.org
 https://spring.io/projects/spring-kafka#overview
 https://spring.io/guides/gs/messaging-stomp-websocket
 https://www.redhat.com/en/topics/integration/what-is-event-driven-architecture
 https://blog.ippon.fr/2021/06/29/comment-se-lancer-avec-kafka-partie-1
 https://nexworld.fr/kafka-et-architectures-fast-data
 https://www.confluent.io/2017-apache-kafka-report
 https://www.tibco.com/fr/reference-center/what-is-event-driven-architecture
 https://www.leanix.net/fr/wiki/vsm/architecture-microservices
 https://nexworld.fr/les-microservices-cest-quoi
 https://blog.octo.com/une-vision-sur-le-service-mesh-service-mesh-versus-librairies-
applicatives-lexemple-de-spring-cloud
 https://www.redhat.com/en/topics/microservices/what-is-a-service-mesh
 https://12factor.net/fr/
 https://www.chakray.com/fr/architectures-orientees-evenements-panacee-autre-tendance-
consommateurs

Contenu connexe

PPTX
Spring Framework Petclinic sample application
PDF
Apache Kafka, Un système distribué de messagerie hautement performant
PDF
Architecture microservices avec docker
PPTX
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
PDF
Microservices avec Spring Cloud
PDF
Microservices with Java, Spring Boot and Spring Cloud
PDF
Midi technique - présentation docker
PDF
API : l'architecture REST
Spring Framework Petclinic sample application
Apache Kafka, Un système distribué de messagerie hautement performant
Architecture microservices avec docker
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
Microservices avec Spring Cloud
Microservices with Java, Spring Boot and Spring Cloud
Midi technique - présentation docker
API : l'architecture REST

Tendances (20)

PPSX
Event Sourcing & CQRS, Kafka, Rabbit MQ
PPTX
Introduction à spring boot
PPTX
世界一わかりやすいClean Architecture
PDF
Support cours angular
PPTX
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
PDF
Digdagによる大規模データ処理の自動化とエラー処理
PPTX
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
PDF
Design patterns - Exemples en Java
PDF
Introduction à DevOps
PDF
Support de cours Spring M.youssfi
PPTX
Présentation Git & GitHub
PDF
イミュータブルデータモデル(入門編)
PDF
Chp1 - Introduction au Développement Mobile
PPTX
DEVOPS
PDF
Devops - vision et pratiques
PDF
Traitement distribue en BIg Data - KAFKA Broker and Kafka Streams
PPTX
Introduction to Docker - 2017
PPTX
Presentation DevOps : enjeux , objectifs, consequences
PPTX
Redisの特徴と活用方法について
PDF
Webアプリを並行開発する際のマイグレーション戦略
Event Sourcing & CQRS, Kafka, Rabbit MQ
Introduction à spring boot
世界一わかりやすいClean Architecture
Support cours angular
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
Digdagによる大規模データ処理の自動化とエラー処理
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
Design patterns - Exemples en Java
Introduction à DevOps
Support de cours Spring M.youssfi
Présentation Git & GitHub
イミュータブルデータモデル(入門編)
Chp1 - Introduction au Développement Mobile
DEVOPS
Devops - vision et pratiques
Traitement distribue en BIg Data - KAFKA Broker and Kafka Streams
Introduction to Docker - 2017
Presentation DevOps : enjeux , objectifs, consequences
Redisの特徴と活用方法について
Webアプリを並行開発する際のマイグレーション戦略
Publicité

Similaire à Migration d'une Architecture Microservice vers une Architecture Event-Driven Microservice avec Kafka (20)

PDF
Architectures microservices
PPTX
Chp2 - Vers les Architectures Orientées Services
PPTX
Comment l’architecture événementielle révolutionne la communication dans le S...
PDF
I don't always write reactive application but when I do, it run on raspberry pi
PDF
Architecture Big Data open source S.M.A.C.K
PDF
XebiCon'17 : Rex Akka dans une architecture microservice - Joachim Rousseau
PDF
Retour d’expérience - Architecture MicroService chez BotsUnit
PPTX
Architectures bigdata
PDF
PZ_Microservices101_20150210
PDF
Cours 2 les architectures reparties
PPTX
Xebicon2019 m icroservices
PDF
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
PPTX
[TNT19] Hands on: Objectif Top Architecte!
PDF
Les vrais enjeux de l'IA.pdf
PDF
Saas Libre
PPTX
Petit-déjeuner OCTO - Le Réactif
PDF
Architectures distribuées
PPTX
Big data architectures
PDF
Cellenza microservices - tour d'horizon - v0.1
PPTX
Le platform engineering : qu'est-ce que c'est et comment l'implémenter dans s...
Architectures microservices
Chp2 - Vers les Architectures Orientées Services
Comment l’architecture événementielle révolutionne la communication dans le S...
I don't always write reactive application but when I do, it run on raspberry pi
Architecture Big Data open source S.M.A.C.K
XebiCon'17 : Rex Akka dans une architecture microservice - Joachim Rousseau
Retour d’expérience - Architecture MicroService chez BotsUnit
Architectures bigdata
PZ_Microservices101_20150210
Cours 2 les architectures reparties
Xebicon2019 m icroservices
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
[TNT19] Hands on: Objectif Top Architecte!
Les vrais enjeux de l'IA.pdf
Saas Libre
Petit-déjeuner OCTO - Le Réactif
Architectures distribuées
Big data architectures
Cellenza microservices - tour d'horizon - v0.1
Le platform engineering : qu'est-ce que c'est et comment l'implémenter dans s...
Publicité

Migration d'une Architecture Microservice vers une Architecture Event-Driven Microservice avec Kafka

  • 1. z Migration d’une Architecture Microservice vers une Architecture Event-Driven Microservice avec Kafka 1 Daniel FOUOMENE daniel.fouomene@afrinnov.xyz https://github.com/fouomene/poc-jcdecaux-spring-kafka-websocket https://github.com/fouomene/poc-microservice-edge-spring-cloud https://github.com/fouomene/poc-event-driven-microservice-edge-kafka-spring-cloud
  • 2. z Plan I. Event-Driven Architecture 1. Introduction 2. Event Broker : Apache Kafka 3. Mise en œuvre : POC App JCDecaux Station avec Spring Kafka, Spring Websocket II. Microservice Architecture 1. Introduction 2. Edge Microservice : Spring Cloud 3. Mise en œuvre : POC App Mini-Ecommerce avec Spring Cloud III. Event-Driven Microservice Architecture 1. Introduction 2. Mise en œuvre : POC App Mini-Ecommerce avec Spring Cloud, Spring Kafka IV. Références 2
  • 4. z I. Event-Driven Architecture 1. Introduction  Event-Driven Architecture : Architecture Orientée Evénements  Un modèle d'architecture logicielle utilisé pour la conception d'applications.  La structure centrale de la solution repose  sur la capture, la communication,  le traitement et la persistance des événements (Events).  Souvent appelée communication « Asynchrone »  Cela signifie que le producteur (Producer) et le consommateur (Consumer) de l’événement n'ont pas besoin d'attendre l'autre pour passer à la tâche suivante.  Lorsqu'un événement a été détecté, il est transmis du producteur d'événements au consommateur via des canaux d'événement ou Bus d’événement (Event Broker). 4
  • 5. z I. Event-Driven Architecture 1. Introduction  Faiblement couplée  Les producteurs d'événements ignorent quels consommateurs d'événements écoutent un événement et que chaque événement ignore les conséquences de son apparition.  Très scalable  Facilité à multiplier indépendamment les instances des producteurs et consommateurs, en fonction de leur charge de travail.  L’exposition des événements en temps réel  Facilité d’abonner de nouveaux consommateurs aux événements produits sans impact sur les services en place, en particulier le service producteur de l’événement.  Une Approche et non un langage  Les applications orientées événements peuvent être créées à l'aide de n'importe quel langage de programmation. 5
  • 6. z I. Event-Driven Architecture 1. Introduction  Les challenges principaux à relever dans la mise en place d’une architecture event- driven sont les suivants :  La cohérence entre les services n’est pas immédiate, on parle de cohérence à terme.  Il faudra intégrer cet aspect dans la conception des traitements et veiller à ce que le délai de synchronisation ne soit pas trop important, en s’assurant par exemple que la consommation des événements soit plus rapide que leur production.  S’assurer que tous les événements soient acheminés et traités,  sans quoi deux services pourraient se trouver définitivement désynchronisés pour certaines entités  Être vigilant sur le paramétrage du bus d’événements ainsi que des applicatifs producteurs et consommateurs d’événements. 6
  • 7. z I. Event-Driven Architecture 2. Event Broker : Apache Kafka 7 CONNECTOR STREAMS
  • 8. z I. Event-Driven Architecture 2. Event Broker : Apache Kafka  Kafka comme bus d’événement (Event Broker)  Une plateforme distribuée de diffusion (Streaming) de données en continu, capable de publier, stocker, traiter et souscrire à des flux d'enregistrement en temps réel.  Initialement développée par LinkedIn comme système interne pour la gestion de ses 1 400 milliards de messages quotidiens, c'est aujourd'hui une solution Open Source Apache. 8
  • 9. z I. Event-Driven Architecture 2. Event Broker : Apache Kafka 9  Kafka permet :  Garantit le découplage entre producteurs de données et consommateurs  Supporte des consommateurs multiples  Permet une forte scalabilité horizontale via une Architecture distribuée  Met en œuvre la persistance des données  Les événements qui sont publiés dans Kafka ne sont pas supprimés dès leur consommation, comme dans les solutions orientées messaging (ex : RabbitMQ).
  • 10. z I. Event-Driven Architecture 2. Event Broker : Apache Kafka 10
  • 11. z I. Event-Driven Architecture 2. Event Broker : Apache Kafka 11 Config Kafka “default.replication.factor=2” // nombre de réplications des partitions dans les brokers “min.insync.replicas=1” // le nombre minimal de réplicas à maintenir en synchronisation à 2 tout juste après écriture sur la partition leader config Producer “request.required.acks=all” pour que le broker qui contient la partition leader n’acquitte (ack) l’écriture qu’après avoir procédé à la réplication. Pour que la réplication soit effective à tout moment et éviter la perte de message. Config Consumer “enable.auto.commit=false”// désactiver l’autocommit et réaliser un commit explicite en fin de traitement pour garantir que chaque événement qui a fait l’objet d’un commit a bien été pris en compte par le consommateur.
  • 12. z I. Event-Driven Architecture 2. Event Broker : Apache Kafka 12
  • 13. z  Data Streaming, le terrain de prédilection de Kafka 13 I. Event-Driven Architecture 2. Event Broker : Apache Kafka  Dans cette étude(2017), si 50% des interrogés mentionnent « le messaging » parmi les tâches confiées à Kafka, 66% évoquent le « streaming process ». Parmi les cas d’usages, se détachent les data pipelines (81% de mentions), les Microservices (50%), ou encore la supervision temps réel (43%).
  • 14. z I. Event-Driven Architecture 3. Mise en œuvre : POC App JCDecaux Station avec Spring Kafka, Spring Websocket 14 JCDecaux Producer DASHBOARD Client Websocket UI @MessageMapping (/jcdecaux) StompBroker Send destination /app/jcdecaux Send destination /topic/stations Recieve Message /topic/stations Request Channel Response Channel Broker Channel JCDecaux Consumer DASHBOARD Client Websocket UI @MessageMapping (/jcdecaux) StompBroker Send destination /app/jcdecaux Send destination /topic/stations Recieve Message /topic/stations Request Channel Response Channel Broker Channel Request Channel station station Observation en temps réel des locations des vélos à chaque station JCDecaux dans le monde. https://github.com/fouomene/poc-jcdecaux-spring-kafka-websocket Broker Channel API
  • 15. z I. Event-Driven Architecture 3. Mise en œuvre : POC App JCDecaux Station avec Spring Kafka, Spring Websocket 15 https://github.com/fouomene/poc-jcdecaux-spring-kafka-websocket
  • 16. z I. Event-Driven Architecture 3. Mise en œuvre : POC App JCDecaux Station avec Spring Kafka, Spring Websocket 16 Kafka Manager https://github.com/yahoo/CMAK
  • 17. z II. Microservice Architecture 1. Introduction 17  Architecture Microservice  « Le style architectural des microservices est une approche permettant de développer une application unique sous la forme d’une suite logicielle intégrant plusieurs services. Ces services sont construits autour des capacités de l’entreprise et peuvent être déployés de façon indépendante » Martin Fowler  Microservices sont une méthode développement logiciel utilisée pour concevoir une application comme un ensemble de services modulaires. Chaque module répond à un objectif métier spécifique et communique avec les autres modules.
  • 18. z II. Microservice Architecture 1. Introduction 18 microservice C code App < / > API microservice B code App < / > API microservice A code App < / > API microservice D code App < / > API Client Communication client to service service to service Database Database Database Database
  • 19. z II. Microservice Architecture 1. Introduction 19  Réduction du temps de développement  Grâce à un développement distribué, plusieurs microservices peuvent être travaillés et développés simultanément.  Évolutivité accrue  Avec les microservices et leur indépendance en termes de développement et de déploiement. Cela permet de faire évoluer l’application sereinement pour répondre à de nouveaux besoins et de nouvelles demandes sans entraver le fonctionnement du système.  Réduction des pannes  Les microservices étant indépendants, lorsqu’un élément tombe en panne ou rencontre un problème, l’ensemble de l’application ne cesse pas de fonctionner contrairement aux applications monolithiques. Il est également plus facile d’identifier et de résoudre une panne dans ce type d’eco-système.
  • 20. z II. Microservice Architecture 1. Introduction 20  L’adaptabilité de chaque microservice aux outils de travail  L’indépendance des composants offre la possibilité de paramétrer les microservices avec différents langages de programmation. Ainsi, les outils opérationnels utilisés par l’entreprise peuvent être rendus compatibles avec la solution globale.  La flexibilité par rapport au cloud  Une entreprise qui utilise l’architecture en microservices peut réduire ou augmenter son usage du cloud en fonction de la charge de l’application. L’organisation est ainsi beaucoup plus flexible.  Le plus important dans l’implémentation des microservices, c’est de faire simple.  Il faut déléguer le maximum d’exigences non fonctionnelles à l’infrastructure logicielle (conteneurs, Services Mesh, etc…) pour réduire les risques futurs de dettes techniques, et garantir un fonctionnement homogène des services.  Pour cela, on se doit de respecter les règles des 12 factors (https://12factor.net/fr/ ).
  • 21. z II. Microservice Architecture 2. Edge Microservice : Spring Cloud 21  Spring Cloud fournit des fonctionnalités pour les cas d'utilisation typiques tels que l'enregistrement et la découverte de services, le routage, l'équilibrage de charge et les circuit-breakers.
  • 22. z II. Microservice Architecture 2. Edge Microservice : Spring Cloud 22  Spring Cloud Bootstrap (e.g. Bootstrap context and @RefreshScope)  Spring Cloud Config : Se positionne comme serveur de distribution des fichiers de configuration.  Config Server  Config Client  Spring Cloud Netflix  Discovery : Permet de découvrir les Microservice sur notre serveur. C’est aussi un outil clé pour la gestion des Microservices.  Eureka Server  Eureka Client  Load Balancer  Ribbon (config et dépendance commenté) : Équilibrer les requêtes entre plusieurs instances pour éviter une surcharge d’un serveur  Circuit Breaker : Définit un ensemble de seuils qui, une fois dépassés, arrêteront l'exécution d'un bloc de code.  Hystrix : Une API pour la résilience d’applications.
  • 23. z II. Microservice Architecture 2. Edge Microservice : Spring Cloud 23  Spring Cloud Routing  Gateway : Le point d’entrée unique pour les API et Microservices.  OpenFeign : Faire communiquer (synchrone) les microservices grâce à Feign.  Spring Cloud Load Balancer : Équilibrer les requêtes entre plusieurs instances pour éviter une surcharge d’un serveur  Spring Cloud Observability  Sleuth : Permet de donner des ID uniques à chaque requête, c'est  Zipkin Client : permet exposer les traces vers Zipkin Server.  Spring Boot Actuator : expose une API qui donne des informations sur le microservice concerné, mais ne propose pas d'interface graphique.  Zipkin Server : permet de tracer les requêtes de service en service uniquement si ces services intègrent ses dépendances.
  • 24. z II. Microservice Architecture 3. Mise en œuvre : POC App Mini-Ecommerce avec Spring Cloud 24
  • 25. z II. Microservice Architecture 3. Mise en œuvre : POC App Mini-Ecommerce avec Spring Cloud 25 microservice client UI Instance Port : 8080 API microservice produits Instance Port : 8001 API microservice produits Instance Port : 8011 API microservice commandes Instance Port : 8002 API microservice paiement Instance Port : 8003 API Distributed tracing Zipkin-Server Instance Port : 9411 Service Registry Eureka-Server Instance Port : 8102 Service Routing Gateway-Server Instance Port : 8004 Service Config Config-Server Instance Port : 8101 Service Routing Spring Load Balancing Communication service to service https://github.com/fouomene/poc-microservice-edge-spring-cloud
  • 26. z II. Microservice Architecture 3. Mise en œuvre : POC App Mini-Ecommerce avec Spring Cloud 26 https://github.com/fouomene/poc-microservice-edge-spring-cloud
  • 27. z II. Microservice Architecture 3. Mise en œuvre : POC App Mini-Ecommerce avec Spring Cloud 27 https://github.com/fouomene/poc-microservice-edge-spring-cloud
  • 28. z 28 III. Event-Driven Microservice Architecture 1. Introduction  De nombreux facteurs avantageux et déterminants caractéristiques de l’architecture microservices se retrouvent dans une architecture orientée événements, qui permettent toutes les deux de relever des défis similaires.  Cependant, prenez une architecture microservices adoptant une approche d’intégration demande/réponse synchrone traditionnelle ; ce type d’architecture active un service atomique indépendant doté d’un cycle de vie indépendant et, par conséquent et de manière générale, une équipe indépendante qui en est responsable. Si ce service reposait une un flux d’intégration demande/réponse avec un autre microservice (sans raison spécifique), alors le service ne serait pas couplé de manière lâche et n’en serait pas véritablement indépendant. Vous ne pourriez pas mettre à niveau/faire évoluer le service sans vous préoccuper du service couplé.
  • 29. z 29 III. Event-Driven Microservice Architecture 1. Introduction  Il n’est pas indispensable de disposer d’une architecture orientée événements pour surmonter ce problème, car un modèle asynchrone alternatif, comme une file d’attente de messages, constituerait une solution efficace dans cette situation. Cependant, cela démontre dans quelle mesure les caractéristiques d’une architecture orientée événements et la diffusion d’événements peuvent interagir de manière positive avec les microservices.
  • 30. z 30 III. Event-Driven Microservice Architecture 1. Introduction
  • 31. z 31 III. Event-Driven Microservice Architecture 1. Introduction
  • 32. z 32 III. Event-Driven Microservice Architecture 1. Introduction
  • 33. z 33 III. Event-Driven Microservice Architecture 1. Introduction microservice C code App < / > API microservice B code App < / > API microservice A code App < / > API microservice D code App < / > API Client Communication client to service service to service Database Database Database Database
  • 34. z 34 III. Event-Driven Microservice Architecture 1. Introduction microservice C code App < / > microservice B code App < / > microservice A code App < / > API microservice D code App < / > Client Communication client to service service to broker Database Database Database Database EVENT API EVENT API EVENT API EVENT EVENT BROKER
  • 35. z 35 microservice client UI Instance Port : 8080 API microservice produits Instance Port : 8001 API microservice produits Instance Port : 8011 API microservice commandes Instance Port : 8002 API microservice paiement Instance Port : 8003 API Distributed tracing Zipkin-Server Instance Port : 9411 Service Registry Eureka-Server Instance Port : 8102 Service Routing Gateway-Server Instance Port : 8004 Service Config Config-Server Instance Port : 8101 Service Routing Spring Load Balancing Communication service to service https://github.com/fouomene/poc-microservice-edge-spring-cloud III. Event-Driven Microservice Architecture 2. Mise en œuvre : POC App Mini-Ecommerce avec Spring Cloud, Spring Kafka
  • 36. z III. Event-Driven Microservice Architecture 2. Mise en œuvre : POC App Mini-Ecommerce avec Spring Cloud, Spring Kafka 36 microservice client UI Instance Port : 8080 API microservice produits Instance Port : 8001 API microservice produits Instance Port : 8011 API microservice commandes consumer Instance Port : 8002 microservice paiement producer Instance Port : 8003 Distributed tracing Zipkin-Server Instance Port : 9411 Service Registry Eureka-Server Instance Port : 8102 Service Routing Gateway-Server Instance Port : 8004 Service Config Config-Server Instance Port : 8101 Service Routing Spring Load Balancing Communication service to broker API EVENT API EVENT https://github.com/fouomene/poc-event-driven-microservice-edge-kafka-spring-cloud
  • 37. z 37 microservice paiement Instance Port : 8003 API database Table : paiement id idcommande montant 1 2 500 2 8 10000 3 5 20000 si le paiement est accepté enregistrer paiement avec idcommande = 5 return idpaiement = 3 requête pour paiement de la commande idcommande = 5 microservice commandes Instance Port : 8003 API database Table : commande id commandePaye quantite 2 false 2 5 true 10 8 false 30 9 false 1 mettre à jour le statut idcommande = 5 à commandePaye = true 2 enregistrer la commande return idcommande = 5 requête création commande reponse commande crée idcommande = 5 Client 1 3 4 5 6 7 requête pour mettre à jour le statut de la commande idcommande = 5 III. Event-Driven Microservice Architecture 2. Mise en œuvre : POC App Mini-Ecommerce avec Spring Cloud, Spring Kafka
  • 38. z 38 microservice paiement Producer Instance Port : 8003 API EVENT database Table : paiement id idcommande montant 1 2 500 2 8 10000 3 5 20000 si le paiement est accepté enregistrer paiement avec idcommande = 5 return idpaiement = 3 requête pour paiement de la commande idcommande = 5 microservice commandes Consumer Instance Port : 8003 API EVENT database Table : commande id commandePaye quantite 2 false 2 5 true 10 8 false 30 9 false 1 mettre à jour le statut idcommande = 5 commandePaye = true CommandeEvent idcommande = 5 CommandeEvent idcommande = 8 CommandeEvent idcommande = 2 send receive topic : paiement 2 enregistrer la commande return idcommande = 5 requête création commande reponse commande crée idcommande = 5 Client 1 3 4 5 6 7 8 III. Event-Driven Microservice Architecture 2. Mise en œuvre : POC App Mini-Ecommerce avec Spring Cloud, Spring Kafka
  • 39. z II. Event-Driven Microservice Architecture 2. Mise en œuvre : POC App Mini-Ecommerce avec Spring Cloud, Spring Kafka 39 https://github.com/fouomene/poc-event-driven-microservice-edge-kafka-spring-cloud
  • 40. z II. Event-Driven Microservice Architecture 2. Mise en œuvre : POC App Mini-Ecommerce avec Spring Cloud, Spring Kafka 40 https://github.com/fouomene/poc-event-driven-microservice-edge-kafka-spring-cloud
  • 41. z IV. Références 41  https://github.com/fouomene/poc-jcdecaux-spring-kafka-websocket  https://github.com/fouomene/poc-microservice-edge-spring-cloud  https://github.com/fouomene/poc-event-driven-microservice-edge-kafka-spring-cloud  https://kafka.apache.org  https://spring.io/projects/spring-kafka#overview  https://spring.io/guides/gs/messaging-stomp-websocket  https://www.redhat.com/en/topics/integration/what-is-event-driven-architecture  https://blog.ippon.fr/2021/06/29/comment-se-lancer-avec-kafka-partie-1  https://nexworld.fr/kafka-et-architectures-fast-data  https://www.confluent.io/2017-apache-kafka-report  https://www.tibco.com/fr/reference-center/what-is-event-driven-architecture  https://www.leanix.net/fr/wiki/vsm/architecture-microservices  https://nexworld.fr/les-microservices-cest-quoi  https://blog.octo.com/une-vision-sur-le-service-mesh-service-mesh-versus-librairies- applicatives-lexemple-de-spring-cloud  https://www.redhat.com/en/topics/microservices/what-is-a-service-mesh  https://12factor.net/fr/  https://www.chakray.com/fr/architectures-orientees-evenements-panacee-autre-tendance- consommateurs

Notes de l'éditeur

  • #7: Premier béné