SlideShare une entreprise Scribd logo
1  sur  60
Télécharger pour lire hors ligne
© 2019 CGI Inc.
Du Business Process Modeling pour
orchestrer des microservices ?
1
Agile Grenoble 2019
Julien COGNET
julien.cognet@cgi.com
linkedin.com/in/juliencognet/
@jcognet1979
© 2019 CGI Inc.
Préambule – Sponsors Agile Grenoble
2
© 2019 CGI Inc.
90’s Code spaghetti 2000 Monolithes en couches 2010 - Microservices
Les microservices et vous …
© 2019 CGI Inc.
Maturité (temps)
Visibilité
Pic des attentes
exagérées (buzz)
Creux de
désillusion
Pente de
l’appropriation
Plateau de
productivité
Déclencheur
technologique
Les microservices et moi … le cycle de la hype
© 2019 CGI Inc.
Les 7 questions des circonstances
5
© 2019 CGI Inc. 6
© 2019 CGI Inc.
Qui suis-je ?
Architecte SI Leader technique
Java & Data
Directeur technique
CGI Grenoble
membre de
depuis 2010
© 2019 CGI Inc. 8
© 2019 CGI Inc.
Quand et Où ai-je eu besoin d’orchestrer des microservices ?
9
• Pilotage, collecte et analyse de données d’équipements intelligents
• Projet démarré en janvier 2018, équipe de 30 personnes
© 2019 CGI Inc.
Architecture du projet
10
Dispositifs
intelligents
Routeur
de flux
Services de
traitement
API
publique
Portail
web
Légende
Flux de traitement asynchrone
via
Connexion aux
équipements
Entrepôt de
données
Référentiel de
données
Requêtes HTTP
synchrones
© 2019 CGI Inc. 11
© 2019 CGI Inc.
Défi #1 – Orchestration de l’initialisation
12
Dispositif
intelligent
Product Owner
A chaque initialisation de
device, je veux savoir
quels sont les services
supportés
Envoi automatique
d’une métrique m1
Demande / Réponse
d’une métrique m1
Envoi automatique
d’une métrique m2
Demande / Réponse
d’une métrique m2
Envoi automatique
d’un signe de vie
Orchestration
d’initialisation
© 2019 CGI Inc.
Défi #2 – Architecture de microservices résilients
13
Directeur
technique
Je veux une
architecture de
microservices
performante,
résiliente …
… et facile a
maintenir
© 2019 CGI Inc.
Les illusions de l’informatique distribuée
14
• Réseau fiable
• Temps de latence nul
• Bande passante infinie
• Réseau sûr
• Topologie de réseau immuable
• Administrateur réseau unique
• Coût de transport nul
• Réseau homogène
© 2019 CGI Inc. 15
Les MICROSERVICES, comme les antibiotiques,
ce n’est PAS AUTOMATIQUE !
© 2019 CGI Inc.
Défi #2 – Architecture de microservices résilients
16
Source: https://microservices.io/patterns
© 2019 CGI Inc.
Défi #2.1 – Monitorer des microservices
17
Source: https://medium.com/nikeengineering
Répondre à la question : Qu’est-il arrivé à ma demande ?
Sans traçabilité distribuée Avec traçabilité distribuée
Traçabilité distribuée
© 2019 CGI Inc.
Défi #2.2 – implémenter des sagas
18
Définition : Processus métier unique composé de plusieurs étapes
annulables effectuées par différents microservices.
Saga (transaction distribuée)
Réserver
les salles
de réunions
Réserver
l’hôtel
Réserver le
taxi
Réserver le
vol
Saga
Organiser un
séminaire
XXX
Annuler
X
AnnulerAnnulerAnnuler
© 2019 CGI Inc.
Défi #3 - Garantie de traitement
19
Dispositifs
intelligents
Routeur
de flux
Services de
traitement
Entrepôt de
données
Référentiel de
données
Garantie transactionnelle (EXACTLY ONCE)
Product Owner
Nous devons garantir que
chaque donnée qui entre
dans le système est
traitée une seule et
unique fois !
© 2019 CGI Inc.
Exactly once processing : définition
20
Exactly once
At LEAST once
At most once
© 2019 CGI Inc.
Exactly once processing : 3 familles de solutions
21
Supervision &
annulation, relance
avec idempotence
Service 1 Service 2 Service 3
Superviseur
© 2019 CGI Inc.
Idempotence
22
© 2019 CGI Inc.
POURQUOI orchestrer des microservices ?
• Besoins fonctionnels avancés nécessitant coordination de microservices
• Modéliser et visualiser le système
• Conception agile
• Problématiques des architectures de microservices
• Monitoring / traçabilité distribuée
• Transaction distribué / sagas
• Garantie de traitement via rejeu idempotent
23
© 2019 CGI Inc. 24
© 2019 CGI Inc.
Ce que ce n’est pas !
Ca veut dire QUOI orchestrer des microservices ?
25
Orchestration
de
microservices
Orchestration de
containers
Supervision
de microservices
Chorégraphie
de microservices
© 2019 CGI Inc.
Chorégraphie Orchestration
26
© 2019 CGI Inc.
Chorégraphie
27
© 2019 CGI Inc.
Orchestration
28
© 2019 CGI Inc.
Chorégraphie Orchestration
29
© 2019 CGI Inc.
Chorégraphie et orchestration – cas nominal
30
Dispositifs
intelligents
Routeur
de flux
Entrepôt de
données
Référentiel de
données
Légende
Flux de traitement asynchrone
via
Connexion aux
équipements
Requêtes HTTP
synchrones
OrchestrateurArchivage
3
Services de
traitement
1
2
© 2019 CGI Inc.
Chorégraphie et orchestration – cas d’erreur
31
Dispositifs
intelligents
Routeur
de flux
Entrepôt de
données
Référentiel de
données
Légende
Flux de traitement asynchrone
via
Connexion aux
équipements
Requêtes HTTP
synchrones
OrchestrateurArchivage
Services de
traitement
1
2
3
4
© 2019 CGI Inc.
BPMN ?
32
• Langage et méthode de modélisation de processus
d’affaires (norme ISO/CEI 19510)
• Notation simple (nombre limité de concepts)
• Documentation exécutable
© 2019 CGI Inc.
BPMN appliqué à l’orchestration de microservices
Gestion d’erreur sur un service
33
© 2019 CGI Inc.
BPMN appliqué à l’orchestration de microservices
Rejeu (retry)
34
© 2019 CGI Inc.
BPMN appliqué à l’orchestration de microservices
Détection d’absence d’exécution (timeout)
35
© 2019 CGI Inc.
BPMN appliqué à l’orchestration de microservices
Saga
36
© 2019 CGI Inc. 37
© 2019 CGI Inc.
Moteurs de workflow et de décision intégrablesPlateformes low-code / no-code
COMMENT orchestrer des microservices ?
38
vs
Source: https://www.thoughtworks.com/radar/languages-and-frameworks/camundaSource: https://www.gartner.com/en/documents/3899484/magic-quadrant-for-intelligent-business-process-manageme
développeurconsultant
Le marché des BPMS
© 2019 CGI Inc.
Histoire des BPMS open source
39
2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019
1.0
Mai 04
2.0
Fév 06
2.0.2, Norme ISO
Déc. 13
5.0.CR1
Déc. 10
1.0
Déc. 03
5.22.0
Oct. 16
7.1.0.M4 (oct. 19)
7.0.0.alpha1
Mars 13
0.1.0
Août 17
6.4.2 (juillet 19)
7.25.0 (août 19)
7.11.0 (juin 19)
0.20.1 (août 19)
Reboot Fork
Légende
5.x
Juin 09
7.9.4 (sept 19)
2001
INRIA
5.0.alpha1
Juin 10
© 2019 CGI Inc.
Comparatif des solutions
Maturité      
Prise en main      
Support      
Intégration      
Focus
principal
Intégration
moteur de
règles et
complétude
des
fonctionnalités
Approche
Cloud,
intégration
avec ECM
Alfesco
Centré sur le
BPMN
Centré sur le
BPMN
Orchestration
de
microservices,
scalabilité
horizontale
Plateforme low
code,
processus
avec
interventions
humaines
Réponse au
besoin
d’orchestration
de µ-services
     
40
© 2019 CGI Inc. 41
Open source
Support BPMN 2.0.2
Support DMN 1.1
© 2019 CGI Inc.
OU s’exécute dans Spring boot
Principes d’architecture de Camunda
42
S’exécute sur un serveur JEE
Exemple de déploiement sur un serveur JEE Déploiement microservices Spring Boot Cluster haute disponibilité
Source: https://docs.camunda.com
© 2019 CGI Inc.
Démonstration
43
Réserver les
salles de
réunions
Réserver
l’hôtel
Réserver le
taxi
Réserver le
vol
Saga à implémenter
Organiser un
séminaire
XXX
Annuler
X
AnnulerAnnulerAnnuler
µService
réservation de
vol
µService
réservation de
salle
µService
réservation
d’hôtel
µService
réservation de
taxi
OrchestrateurIHM µS temps réel
HTTP / REST
HTTP / REST
HTTP / REST
HTTP / REST
HTTP / Web socket
HTTP / Web socket
HTTP / Web socket
HTTP / Web socket
Architecture
Code source disponible sur GitHub: https://github.com/juliencognet/saga-camunda
© 2019 CGI Inc.
Code de l’orchestrateur
44
<!--Camunda dependencies -->
<dependency>
<groupId>org.camunda.bpm.springboot</groupId>
<artifactId>camunda-bpm-spring-boot-starter</artifactId>
<version>${camunda.springboot.version}</version>
</dependency>
<dependency>
<groupId>org.camunda.bpm.springboot</groupId>
<artifactId>camunda-bpm-spring-boot-starter-webapp</artifactId>
<version>${camunda.springboot.version}</version>
</dependency>
<dependency>
<groupId>org.camunda.bpm.springboot</groupId>
<artifactId>camunda-bpm-spring-boot-starter-rest</artifactId>
<version>${camunda.springboot.version}</version>
</dependency>
<!-- H2 database for persistence -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
pom.xml
© 2019 CGI Inc.
Code de l’orchestrateur
45
application.yml
camunda:
bpm:
admin-user:
id: admin
password: admin
filter:
create: All tasks
feign:
okhttp:
enabled: true
logging:
level:
com:
jcognet: INFO
© 2019 CGI Inc.
Code de l’orchestrateur
46
booking-saga.bpmn
© 2019 CGI Inc.
Code de l’orchestrateur
47
BookingClientService.java
package com.jcognet.orchestration.orchestrator.bookingclient;
…
@Component
@Slf4j
@EnableFeignClients
public class BookingClientService {
@FeignClient(name = "bookingClient")
private static interface BookingClient {
@PostMapping(value = "/bookings", consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE)
BookingTransaction book(URI serviceURI, BookingTransaction bookingTransaction);
@DeleteMapping(value = "/bookings/{transactionId}", produces = MediaType.APPLICATION_JSON_VALUE)
BookingTransaction cancelBooking(URI serviceURI, @PathVariable("transactionId") UUID transactionId);
}
@Autowired
private BookingClient bookingClient;
public void book(String transactionId, String serviceURI, int transactionAmount) throws URISyntaxException {
log.info("About to send booking transaction #{} to {} requesting {} units", transactionId, serviceURI,
transactionAmount);
BookingTransaction bookingTransaction =
new BookingTransaction(UUID.fromString(transactionId), transactionAmount);
try {
bookingClient.book(new URI(serviceURI), bookingTransaction);
} catch (FeignException e) {
throw new BpmnError(e.getMessage());
}
}
…
}
© 2019 CGI Inc.
Démonstration
48
© 2019 CGI Inc. 49
© 2019 CGI Inc. 50
© 2019 CGI Inc.
Retour d’expérience
51
Product Owner
A chaque
initialisation
de device, je
veux savoir
quels sont les
services qu’il
supporte
Orchestration
d’initialisation
© 2019 CGI Inc.
REX - retours des Product Owners
52
© 2019 CGI Inc.
Combien ça coûte de mettre en place une telle solution ?
53
© 2019 CGI Inc. 54
Architecture
Création2017
Version
0.20 pour
production
Juillet
2019
Historique
Scalabilité
© 2019 CGI Inc. 55
© 2019 CGI Inc.
La solution idéale ?
56
© 2019 CGI Inc. 57
Julien COGNET
julien.cognet@cgi.com
linkedin.com/in/juliencognet/
@jcognet1979
© 2019 CGI Inc.
Crédits images (1/2)
Photo by Ryan Tauss on Unsplash Photo by Zan on Unsplash Photo by davide ragusa on Unsplash
Photo by Mark Fletcher-Brown
on Unsplash
Photo by David Hofmann
on Unsplash
Photo taken by Daniel Azoulay
https://commons.wikimedia.org/wiki/File:Conductor_Ram%C3%B3n
_Tebar_(22805582348).jpg
58
Toutes les images utilisées dans cette présentation sont libres de droits pour réutilisation de tout ordre. Voici
les crédits aux photographes et illustrateurs.
© 2019 CGI Inc.
Crédits images (2/2)
Photo by Mae Mu on Unsplash Photo by Andrew Seaman on Unsplash Photo by JESHOOTS.COM on Unsplash
Photo by Alex
on Unsplash Photo by Brooke Lark on Unsplash Photo by Declan Lopez on Unsplash
59
Toutes les images utilisées dans cette présentation sont libres de droits pour réutilisation de tout ordre. Voici
les crédits aux photographes et illustrateurs.
© 2019 CGI Inc.
Crédits icones
60
Toutes les icones utilisées dans cette présentation sont libres de droits pour réutilisation de tout ordre.
Elles sont issues du site the Noun Project. Voici les crédits aux illustrateurs.

Contenu connexe

Tendances

Salesforce App Cloud First Call Deck
Salesforce App Cloud First Call DeckSalesforce App Cloud First Call Deck
Salesforce App Cloud First Call Deck
Salesforce Partners
 
API Maturity Model (Webcast with Accenture)
API Maturity Model (Webcast with Accenture)API Maturity Model (Webcast with Accenture)
API Maturity Model (Webcast with Accenture)
Apigee | Google Cloud
 

Tendances (20)

Microservice Architecture
Microservice ArchitectureMicroservice Architecture
Microservice Architecture
 
Event Sourcing & CQRS, Kafka, Rabbit MQ
Event Sourcing & CQRS, Kafka, Rabbit MQEvent Sourcing & CQRS, Kafka, Rabbit MQ
Event Sourcing & CQRS, Kafka, Rabbit MQ
 
Microservices and docker
Microservices and dockerMicroservices and docker
Microservices and docker
 
Salesforce App Cloud First Call Deck
Salesforce App Cloud First Call DeckSalesforce App Cloud First Call Deck
Salesforce App Cloud First Call Deck
 
Transforming Traditional ITSM with Chatbots - kore.ai
Transforming Traditional ITSM with Chatbots - kore.aiTransforming Traditional ITSM with Chatbots - kore.ai
Transforming Traditional ITSM with Chatbots - kore.ai
 
A Pattern Language for Microservices
A Pattern Language for MicroservicesA Pattern Language for Microservices
A Pattern Language for Microservices
 
Microservices, Containers, Kubernetes, Kafka, Kanban
Microservices, Containers, Kubernetes, Kafka, KanbanMicroservices, Containers, Kubernetes, Kafka, Kanban
Microservices, Containers, Kubernetes, Kafka, Kanban
 
Microservice vs. Monolithic Architecture
Microservice vs. Monolithic ArchitectureMicroservice vs. Monolithic Architecture
Microservice vs. Monolithic Architecture
 
Chatbot usecases
Chatbot usecasesChatbot usecases
Chatbot usecases
 
Building an API Security Strategy
Building an API Security StrategyBuilding an API Security Strategy
Building an API Security Strategy
 
Microservices architecture
Microservices architectureMicroservices architecture
Microservices architecture
 
Building Microservices with gRPC and NATS
Building Microservices with gRPC and NATSBuilding Microservices with gRPC and NATS
Building Microservices with gRPC and NATS
 
API Maturity Model (Webcast with Accenture)
API Maturity Model (Webcast with Accenture)API Maturity Model (Webcast with Accenture)
API Maturity Model (Webcast with Accenture)
 
Microservices - BFF architecture and implementation
Microservices - BFF architecture and implementationMicroservices - BFF architecture and implementation
Microservices - BFF architecture and implementation
 
Real-Life Use Cases & Architectures for Event Streaming with Apache Kafka
Real-Life Use Cases & Architectures for Event Streaming with Apache KafkaReal-Life Use Cases & Architectures for Event Streaming with Apache Kafka
Real-Life Use Cases & Architectures for Event Streaming with Apache Kafka
 
The Architecture of an API Platform
The Architecture of an API PlatformThe Architecture of an API Platform
The Architecture of an API Platform
 
Modern Enterprise integration Strategies
Modern Enterprise integration StrategiesModern Enterprise integration Strategies
Modern Enterprise integration Strategies
 
gartner ITSM.docx
gartner ITSM.docxgartner ITSM.docx
gartner ITSM.docx
 
APIsecure 2023 - Exploring Advanced API Security Techniques and Technologies,...
APIsecure 2023 - Exploring Advanced API Security Techniques and Technologies,...APIsecure 2023 - Exploring Advanced API Security Techniques and Technologies,...
APIsecure 2023 - Exploring Advanced API Security Techniques and Technologies,...
 
Azure API Management
Azure API ManagementAzure API Management
Azure API Management
 

Similaire à Du business process modeling pour orchestrer des microservices julien cognet

Microsoft dynamics crm online, intégration avec windows azure
Microsoft dynamics crm online, intégration avec windows azureMicrosoft dynamics crm online, intégration avec windows azure
Microsoft dynamics crm online, intégration avec windows azure
Microsoft Décideurs IT
 

Similaire à Du business process modeling pour orchestrer des microservices julien cognet (20)

La Duck Conf : "Observabilité"
La Duck Conf : "Observabilité"La Duck Conf : "Observabilité"
La Duck Conf : "Observabilité"
 
IBM Bluemix Paris Meetup #14 - Le Village by CA - 20160413 - Introduction Meetup
IBM Bluemix Paris Meetup #14 - Le Village by CA - 20160413 - Introduction MeetupIBM Bluemix Paris Meetup #14 - Le Village by CA - 20160413 - Introduction Meetup
IBM Bluemix Paris Meetup #14 - Le Village by CA - 20160413 - Introduction Meetup
 
Ppt 2 a jeanpierre-yle-cleach-hec-05022015_sent2hec
Ppt 2   a jeanpierre-yle-cleach-hec-05022015_sent2hecPpt 2   a jeanpierre-yle-cleach-hec-05022015_sent2hec
Ppt 2 a jeanpierre-yle-cleach-hec-05022015_sent2hec
 
L'histoire d'une infrastructure itérative
L'histoire d'une infrastructure itérativeL'histoire d'une infrastructure itérative
L'histoire d'une infrastructure itérative
 
La Duck Conf - "Microservices & Servicemesh : le retour des frameworks d'entr...
La Duck Conf - "Microservices & Servicemesh : le retour des frameworks d'entr...La Duck Conf - "Microservices & Servicemesh : le retour des frameworks d'entr...
La Duck Conf - "Microservices & Servicemesh : le retour des frameworks d'entr...
 
La Duck Conf - "Quelle place pour le no code/low code dans les entreprises ?"
La Duck Conf - "Quelle place pour le no code/low code dans les entreprises ?"La Duck Conf - "Quelle place pour le no code/low code dans les entreprises ?"
La Duck Conf - "Quelle place pour le no code/low code dans les entreprises ?"
 
Accelerate : la vitesse conditionne l'excellence
Accelerate : la vitesse conditionne l'excellence Accelerate : la vitesse conditionne l'excellence
Accelerate : la vitesse conditionne l'excellence
 
Qu'est ce qu'une api en 2019 ?
Qu'est ce qu'une api en 2019 ? Qu'est ce qu'une api en 2019 ?
Qu'est ce qu'une api en 2019 ?
 
Microsoft dynamics crm online, intégration avec windows azure
Microsoft dynamics crm online, intégration avec windows azureMicrosoft dynamics crm online, intégration avec windows azure
Microsoft dynamics crm online, intégration avec windows azure
 
La Duck Conf - "Edge computing : le déploiement continu se fait une virée en ...
La Duck Conf - "Edge computing : le déploiement continu se fait une virée en ...La Duck Conf - "Edge computing : le déploiement continu se fait une virée en ...
La Duck Conf - "Edge computing : le déploiement continu se fait une virée en ...
 
2012.11.20 - Cloud Builders - RV des Experts du Club Cloud des Partenaires - ...
2012.11.20 - Cloud Builders - RV des Experts du Club Cloud des Partenaires - ...2012.11.20 - Cloud Builders - RV des Experts du Club Cloud des Partenaires - ...
2012.11.20 - Cloud Builders - RV des Experts du Club Cloud des Partenaires - ...
 
La Duck Conf - "L'API Management : au-délà des promesses"
La Duck Conf - "L'API Management : au-délà des promesses" La Duck Conf - "L'API Management : au-délà des promesses"
La Duck Conf - "L'API Management : au-délà des promesses"
 
CWIN17 Morocco / Microservices as a factory reda zerhouni
CWIN17 Morocco / Microservices as a factory reda zerhouniCWIN17 Morocco / Microservices as a factory reda zerhouni
CWIN17 Morocco / Microservices as a factory reda zerhouni
 
2010.11.26 - DSI - Comment surfer le Tsunami du Cloud - JF Pietri - Forum Saa...
2010.11.26 - DSI - Comment surfer le Tsunami du Cloud - JF Pietri - Forum Saa...2010.11.26 - DSI - Comment surfer le Tsunami du Cloud - JF Pietri - Forum Saa...
2010.11.26 - DSI - Comment surfer le Tsunami du Cloud - JF Pietri - Forum Saa...
 
2011.06.30. Enjeux et opportunités Business du Cloud - les Rencontres Nationa...
2011.06.30. Enjeux et opportunités Business du Cloud - les Rencontres Nationa...2011.06.30. Enjeux et opportunités Business du Cloud - les Rencontres Nationa...
2011.06.30. Enjeux et opportunités Business du Cloud - les Rencontres Nationa...
 
Shadow IT to modern workplace
Shadow IT to modern workplaceShadow IT to modern workplace
Shadow IT to modern workplace
 
Introduction to Cloud Computing & Market Review
Introduction to Cloud Computing & Market ReviewIntroduction to Cloud Computing & Market Review
Introduction to Cloud Computing & Market Review
 
AREP CR BIMWorld2016 #4 /5 : 3D + IoT
AREP CR BIMWorld2016 #4 /5 : 3D + IoTAREP CR BIMWorld2016 #4 /5 : 3D + IoT
AREP CR BIMWorld2016 #4 /5 : 3D + IoT
 
Visual studio 2017 Launch keynote - Afterworks@Noumea
Visual studio 2017 Launch keynote - Afterworks@NoumeaVisual studio 2017 Launch keynote - Afterworks@Noumea
Visual studio 2017 Launch keynote - Afterworks@Noumea
 
Matinale OCTO - "Blockchain : comment s'orienter dans la désorientation"
Matinale OCTO - "Blockchain : comment s'orienter dans la désorientation"Matinale OCTO - "Blockchain : comment s'orienter dans la désorientation"
Matinale OCTO - "Blockchain : comment s'orienter dans la désorientation"
 

Du business process modeling pour orchestrer des microservices julien cognet

  • 1. © 2019 CGI Inc. Du Business Process Modeling pour orchestrer des microservices ? 1 Agile Grenoble 2019 Julien COGNET julien.cognet@cgi.com linkedin.com/in/juliencognet/ @jcognet1979
  • 2. © 2019 CGI Inc. Préambule – Sponsors Agile Grenoble 2
  • 3. © 2019 CGI Inc. 90’s Code spaghetti 2000 Monolithes en couches 2010 - Microservices Les microservices et vous …
  • 4. © 2019 CGI Inc. Maturité (temps) Visibilité Pic des attentes exagérées (buzz) Creux de désillusion Pente de l’appropriation Plateau de productivité Déclencheur technologique Les microservices et moi … le cycle de la hype
  • 5. © 2019 CGI Inc. Les 7 questions des circonstances 5
  • 6. © 2019 CGI Inc. 6
  • 7. © 2019 CGI Inc. Qui suis-je ? Architecte SI Leader technique Java & Data Directeur technique CGI Grenoble membre de depuis 2010
  • 8. © 2019 CGI Inc. 8
  • 9. © 2019 CGI Inc. Quand et Où ai-je eu besoin d’orchestrer des microservices ? 9 • Pilotage, collecte et analyse de données d’équipements intelligents • Projet démarré en janvier 2018, équipe de 30 personnes
  • 10. © 2019 CGI Inc. Architecture du projet 10 Dispositifs intelligents Routeur de flux Services de traitement API publique Portail web Légende Flux de traitement asynchrone via Connexion aux équipements Entrepôt de données Référentiel de données Requêtes HTTP synchrones
  • 11. © 2019 CGI Inc. 11
  • 12. © 2019 CGI Inc. Défi #1 – Orchestration de l’initialisation 12 Dispositif intelligent Product Owner A chaque initialisation de device, je veux savoir quels sont les services supportés Envoi automatique d’une métrique m1 Demande / Réponse d’une métrique m1 Envoi automatique d’une métrique m2 Demande / Réponse d’une métrique m2 Envoi automatique d’un signe de vie Orchestration d’initialisation
  • 13. © 2019 CGI Inc. Défi #2 – Architecture de microservices résilients 13 Directeur technique Je veux une architecture de microservices performante, résiliente … … et facile a maintenir
  • 14. © 2019 CGI Inc. Les illusions de l’informatique distribuée 14 • Réseau fiable • Temps de latence nul • Bande passante infinie • Réseau sûr • Topologie de réseau immuable • Administrateur réseau unique • Coût de transport nul • Réseau homogène
  • 15. © 2019 CGI Inc. 15 Les MICROSERVICES, comme les antibiotiques, ce n’est PAS AUTOMATIQUE !
  • 16. © 2019 CGI Inc. Défi #2 – Architecture de microservices résilients 16 Source: https://microservices.io/patterns
  • 17. © 2019 CGI Inc. Défi #2.1 – Monitorer des microservices 17 Source: https://medium.com/nikeengineering Répondre à la question : Qu’est-il arrivé à ma demande ? Sans traçabilité distribuée Avec traçabilité distribuée Traçabilité distribuée
  • 18. © 2019 CGI Inc. Défi #2.2 – implémenter des sagas 18 Définition : Processus métier unique composé de plusieurs étapes annulables effectuées par différents microservices. Saga (transaction distribuée) Réserver les salles de réunions Réserver l’hôtel Réserver le taxi Réserver le vol Saga Organiser un séminaire XXX Annuler X AnnulerAnnulerAnnuler
  • 19. © 2019 CGI Inc. Défi #3 - Garantie de traitement 19 Dispositifs intelligents Routeur de flux Services de traitement Entrepôt de données Référentiel de données Garantie transactionnelle (EXACTLY ONCE) Product Owner Nous devons garantir que chaque donnée qui entre dans le système est traitée une seule et unique fois !
  • 20. © 2019 CGI Inc. Exactly once processing : définition 20 Exactly once At LEAST once At most once
  • 21. © 2019 CGI Inc. Exactly once processing : 3 familles de solutions 21 Supervision & annulation, relance avec idempotence Service 1 Service 2 Service 3 Superviseur
  • 22. © 2019 CGI Inc. Idempotence 22
  • 23. © 2019 CGI Inc. POURQUOI orchestrer des microservices ? • Besoins fonctionnels avancés nécessitant coordination de microservices • Modéliser et visualiser le système • Conception agile • Problématiques des architectures de microservices • Monitoring / traçabilité distribuée • Transaction distribué / sagas • Garantie de traitement via rejeu idempotent 23
  • 24. © 2019 CGI Inc. 24
  • 25. © 2019 CGI Inc. Ce que ce n’est pas ! Ca veut dire QUOI orchestrer des microservices ? 25 Orchestration de microservices Orchestration de containers Supervision de microservices Chorégraphie de microservices
  • 26. © 2019 CGI Inc. Chorégraphie Orchestration 26
  • 27. © 2019 CGI Inc. Chorégraphie 27
  • 28. © 2019 CGI Inc. Orchestration 28
  • 29. © 2019 CGI Inc. Chorégraphie Orchestration 29
  • 30. © 2019 CGI Inc. Chorégraphie et orchestration – cas nominal 30 Dispositifs intelligents Routeur de flux Entrepôt de données Référentiel de données Légende Flux de traitement asynchrone via Connexion aux équipements Requêtes HTTP synchrones OrchestrateurArchivage 3 Services de traitement 1 2
  • 31. © 2019 CGI Inc. Chorégraphie et orchestration – cas d’erreur 31 Dispositifs intelligents Routeur de flux Entrepôt de données Référentiel de données Légende Flux de traitement asynchrone via Connexion aux équipements Requêtes HTTP synchrones OrchestrateurArchivage Services de traitement 1 2 3 4
  • 32. © 2019 CGI Inc. BPMN ? 32 • Langage et méthode de modélisation de processus d’affaires (norme ISO/CEI 19510) • Notation simple (nombre limité de concepts) • Documentation exécutable
  • 33. © 2019 CGI Inc. BPMN appliqué à l’orchestration de microservices Gestion d’erreur sur un service 33
  • 34. © 2019 CGI Inc. BPMN appliqué à l’orchestration de microservices Rejeu (retry) 34
  • 35. © 2019 CGI Inc. BPMN appliqué à l’orchestration de microservices Détection d’absence d’exécution (timeout) 35
  • 36. © 2019 CGI Inc. BPMN appliqué à l’orchestration de microservices Saga 36
  • 37. © 2019 CGI Inc. 37
  • 38. © 2019 CGI Inc. Moteurs de workflow et de décision intégrablesPlateformes low-code / no-code COMMENT orchestrer des microservices ? 38 vs Source: https://www.thoughtworks.com/radar/languages-and-frameworks/camundaSource: https://www.gartner.com/en/documents/3899484/magic-quadrant-for-intelligent-business-process-manageme développeurconsultant Le marché des BPMS
  • 39. © 2019 CGI Inc. Histoire des BPMS open source 39 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 1.0 Mai 04 2.0 Fév 06 2.0.2, Norme ISO Déc. 13 5.0.CR1 Déc. 10 1.0 Déc. 03 5.22.0 Oct. 16 7.1.0.M4 (oct. 19) 7.0.0.alpha1 Mars 13 0.1.0 Août 17 6.4.2 (juillet 19) 7.25.0 (août 19) 7.11.0 (juin 19) 0.20.1 (août 19) Reboot Fork Légende 5.x Juin 09 7.9.4 (sept 19) 2001 INRIA 5.0.alpha1 Juin 10
  • 40. © 2019 CGI Inc. Comparatif des solutions Maturité       Prise en main       Support       Intégration       Focus principal Intégration moteur de règles et complétude des fonctionnalités Approche Cloud, intégration avec ECM Alfesco Centré sur le BPMN Centré sur le BPMN Orchestration de microservices, scalabilité horizontale Plateforme low code, processus avec interventions humaines Réponse au besoin d’orchestration de µ-services       40
  • 41. © 2019 CGI Inc. 41 Open source Support BPMN 2.0.2 Support DMN 1.1
  • 42. © 2019 CGI Inc. OU s’exécute dans Spring boot Principes d’architecture de Camunda 42 S’exécute sur un serveur JEE Exemple de déploiement sur un serveur JEE Déploiement microservices Spring Boot Cluster haute disponibilité Source: https://docs.camunda.com
  • 43. © 2019 CGI Inc. Démonstration 43 Réserver les salles de réunions Réserver l’hôtel Réserver le taxi Réserver le vol Saga à implémenter Organiser un séminaire XXX Annuler X AnnulerAnnulerAnnuler µService réservation de vol µService réservation de salle µService réservation d’hôtel µService réservation de taxi OrchestrateurIHM µS temps réel HTTP / REST HTTP / REST HTTP / REST HTTP / REST HTTP / Web socket HTTP / Web socket HTTP / Web socket HTTP / Web socket Architecture Code source disponible sur GitHub: https://github.com/juliencognet/saga-camunda
  • 44. © 2019 CGI Inc. Code de l’orchestrateur 44 <!--Camunda dependencies --> <dependency> <groupId>org.camunda.bpm.springboot</groupId> <artifactId>camunda-bpm-spring-boot-starter</artifactId> <version>${camunda.springboot.version}</version> </dependency> <dependency> <groupId>org.camunda.bpm.springboot</groupId> <artifactId>camunda-bpm-spring-boot-starter-webapp</artifactId> <version>${camunda.springboot.version}</version> </dependency> <dependency> <groupId>org.camunda.bpm.springboot</groupId> <artifactId>camunda-bpm-spring-boot-starter-rest</artifactId> <version>${camunda.springboot.version}</version> </dependency> <!-- H2 database for persistence --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> </dependency> pom.xml
  • 45. © 2019 CGI Inc. Code de l’orchestrateur 45 application.yml camunda: bpm: admin-user: id: admin password: admin filter: create: All tasks feign: okhttp: enabled: true logging: level: com: jcognet: INFO
  • 46. © 2019 CGI Inc. Code de l’orchestrateur 46 booking-saga.bpmn
  • 47. © 2019 CGI Inc. Code de l’orchestrateur 47 BookingClientService.java package com.jcognet.orchestration.orchestrator.bookingclient; … @Component @Slf4j @EnableFeignClients public class BookingClientService { @FeignClient(name = "bookingClient") private static interface BookingClient { @PostMapping(value = "/bookings", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) BookingTransaction book(URI serviceURI, BookingTransaction bookingTransaction); @DeleteMapping(value = "/bookings/{transactionId}", produces = MediaType.APPLICATION_JSON_VALUE) BookingTransaction cancelBooking(URI serviceURI, @PathVariable("transactionId") UUID transactionId); } @Autowired private BookingClient bookingClient; public void book(String transactionId, String serviceURI, int transactionAmount) throws URISyntaxException { log.info("About to send booking transaction #{} to {} requesting {} units", transactionId, serviceURI, transactionAmount); BookingTransaction bookingTransaction = new BookingTransaction(UUID.fromString(transactionId), transactionAmount); try { bookingClient.book(new URI(serviceURI), bookingTransaction); } catch (FeignException e) { throw new BpmnError(e.getMessage()); } } … }
  • 48. © 2019 CGI Inc. Démonstration 48
  • 49. © 2019 CGI Inc. 49
  • 50. © 2019 CGI Inc. 50
  • 51. © 2019 CGI Inc. Retour d’expérience 51 Product Owner A chaque initialisation de device, je veux savoir quels sont les services qu’il supporte Orchestration d’initialisation
  • 52. © 2019 CGI Inc. REX - retours des Product Owners 52
  • 53. © 2019 CGI Inc. Combien ça coûte de mettre en place une telle solution ? 53
  • 54. © 2019 CGI Inc. 54 Architecture Création2017 Version 0.20 pour production Juillet 2019 Historique Scalabilité
  • 55. © 2019 CGI Inc. 55
  • 56. © 2019 CGI Inc. La solution idéale ? 56
  • 57. © 2019 CGI Inc. 57 Julien COGNET julien.cognet@cgi.com linkedin.com/in/juliencognet/ @jcognet1979
  • 58. © 2019 CGI Inc. Crédits images (1/2) Photo by Ryan Tauss on Unsplash Photo by Zan on Unsplash Photo by davide ragusa on Unsplash Photo by Mark Fletcher-Brown on Unsplash Photo by David Hofmann on Unsplash Photo taken by Daniel Azoulay https://commons.wikimedia.org/wiki/File:Conductor_Ram%C3%B3n _Tebar_(22805582348).jpg 58 Toutes les images utilisées dans cette présentation sont libres de droits pour réutilisation de tout ordre. Voici les crédits aux photographes et illustrateurs.
  • 59. © 2019 CGI Inc. Crédits images (2/2) Photo by Mae Mu on Unsplash Photo by Andrew Seaman on Unsplash Photo by JESHOOTS.COM on Unsplash Photo by Alex on Unsplash Photo by Brooke Lark on Unsplash Photo by Declan Lopez on Unsplash 59 Toutes les images utilisées dans cette présentation sont libres de droits pour réutilisation de tout ordre. Voici les crédits aux photographes et illustrateurs.
  • 60. © 2019 CGI Inc. Crédits icones 60 Toutes les icones utilisées dans cette présentation sont libres de droits pour réutilisation de tout ordre. Elles sont issues du site the Noun Project. Voici les crédits aux illustrateurs.