Contenu connexe Similaire à Du business process modeling pour orchestrer des microservices julien cognet (20) Du business process modeling pour orchestrer des microservices julien cognet1. © 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
7. © 2019 CGI Inc.
Qui suis-je ?
Architecte SI Leader technique
Java & Data
Directeur technique
CGI Grenoble
membre de
depuis 2010
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
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
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
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
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
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());
}
}
…
}
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é
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.