diff --git a/cesi/architecture_n_tiers/presentation/img/lamp.png b/cesi/architecture_n_tiers/presentation/img/lamp.png new file mode 100644 index 0000000..9a58494 Binary files /dev/null and b/cesi/architecture_n_tiers/presentation/img/lamp.png differ diff --git a/cesi/architecture_n_tiers/presentation/img/rpc.png b/cesi/architecture_n_tiers/presentation/img/rpc.png new file mode 100644 index 0000000..f382d1c Binary files /dev/null and b/cesi/architecture_n_tiers/presentation/img/rpc.png differ diff --git a/cesi/architecture_n_tiers/presentation/slides.md b/cesi/architecture_n_tiers/presentation/slides.md index 2741327..e87013b 100644 --- a/cesi/architecture_n_tiers/presentation/slides.md +++ b/cesi/architecture_n_tiers/presentation/slides.md @@ -44,9 +44,8 @@ table { font-size: 0.6em !important; } ### Les différentes topologies ### Communication client/serveur ### Répartition des traitements +### Le middleware ### Exercice : Implémentation d'une calculatrice par TCP/IP -### La couche intergiciel -### Exercice : Utilisation d'un couche JSON-RPC2 pour la calculatrice TCP/IP --- ## Définitions @@ -130,6 +129,57 @@ La conception d'une application distribuée nécessite d'établir une répartiti --- +## Le middleware (1) + +Aussi appelé "intergiciel" ou "intersticiel" en français. + +### Rôle + +- Ensemble de services logiciels construits au dessus d’un +protocole de transport afin de permettre l’échange de +requêtes et des réponses associées entre client et serveur de +manière transparente. +- Les services du middleware sont un ensemble de logiciels +répartis qui existe entre l’application, l’OS et les services +réseaux sur un nœud du réseau. + +--- + +## Le middleware (2) + +### Fonctions + +- Procédure d’établissement de connexion +- Exécution des requêtes +- Récupération des résultats +- Procédure de fermeture de connexion +- Gestion des accès concurrents +- Sécurité et intégrité +- Monitoring +- Terminaison des processus +- Mise en cache des résultats +- Mise en cache des requêtes + +--- + +## Le middleware (3) + +### Différentes techniques + +- **Échange de messages**, ou MOM - Message Oriented Middleware. Exemple: AMQP, NATS +- **Appel de procédures distantes**, ou RPC. Exemple: JSON-RPC2, SOAP. +- **Manipulation d'objets** Exemple: DCOMM, CORBA, RMI + +--- + +## Le middleware (4) + +### Exemple: RPC + +![center](./img/rpc.png) + +--- + ## Exercice ### Implémentation d'une calculatrice à état distribuée en NodeJS @@ -138,19 +188,38 @@ La conception d'une application distribuée nécessite d'établir une répartiti ## L'architecture 3 tiers -### Principes -### Modèle transactionnel +### Généralités ### Sécurité ### Exercice : Implémentation de couche de présentation (HTML/CSS et ligne de commande) multiple pour une même couche logique et de données --- -## Les architectures n-tiers +## Généralités (1) -### Principes -### Approche objet et notion de responsabilité -### Communication inter-composants -### Exercice : Présentation de l'architecture orientée « micro-services » et implémentation d'une application basée sur ce patron de conception. +### Principe + +L'architecture 3 tiers est le modèle d'architecture applicative le plus utilisé aujourd'hui dans la conception d'application. Il propose de découper l'application en 3 couches aux rôles distincts: + +- Couche de **présentation** +- Couche de **traitement/logique/métier** +- Couche de **persistence/données** + +--- + +## Généralités (2) + +### Exemple: Application LAMP (Linux, Apache, PHP, MySQL) + + +![center](./img/lamp.png?1) + +--- + +## Modèle N tiers + +--- + +## Modèle Pair à pair --- diff --git a/cesi/architecture_n_tiers/ressources/exercices/ex_2_tiers/README.md b/cesi/architecture_n_tiers/ressources/exercices/ex_2_tiers/README.md index 9230289..a386bfb 100644 --- a/cesi/architecture_n_tiers/ressources/exercices/ex_2_tiers/README.md +++ b/cesi/architecture_n_tiers/ressources/exercices/ex_2_tiers/README.md @@ -18,7 +18,7 @@ Le client/serveur devront gérer les instructions suivantes: - `status` Requête de récupération de la valeur de l'accumulateur sur le serveur - `reset` Requête de réinitialisation de la valeur de l'accumulateur sur le serveur. -Vous pouvez vous baser sur les fichiers `client.js` et `server.js` présent dans ce répertoire pour amorcer votre projet. +Vous pouvez vous baser sur les fichiers `client.js` et `server.js` présents dans ce répertoire pour amorcer votre projet. ## Exemple de séquence d'échange @@ -28,3 +28,4 @@ Vous pouvez vous baser sur les fichiers `client.js` et `server.js` présent dans - [Télécharger/installer NodeJS](https://nodejs.org/en/download/) - [Le module `net` de NodeJS](https://nodejs.org/api/net.html) +- [NodeJS - Livre du débutant](https://nodejs.developpez.com/tutoriels/javascript/node-js-livre-debutant/) diff --git a/cesi/architecture_n_tiers/ressources/rpc.msc b/cesi/architecture_n_tiers/ressources/rpc.msc new file mode 100644 index 0000000..d533ca7 --- /dev/null +++ b/cesi/architecture_n_tiers/ressources/rpc.msc @@ -0,0 +1,17 @@ +msc { + + wordwraparcs=true, hscale=2; + + Client,ClientMiddleware,ServerMiddleware,Server; + + Client->ClientMiddleware [ label="server.getBlogPosts()" ]; + ClientMiddleware->ClientMiddleware [ label="serializeCall('server.getBlogPosts')" ]; + ClientMiddleware->ServerMiddleware [ label="CALL getBlogPosts" ]; + ServerMiddleware->ServerMiddleware [ label="deserialize('CALL getBlogPosts')" ]; + ServerMiddleware->Server [ label="getBlogPosts()" ]; + Server->ServerMiddleware [ label="[{title: 'Article 1'}, {title: 'Article 2'}, ...]" ]; + ServerMiddleware->ServerMiddleware [ label="serializeResult([{title: 'Article 1'}, {title: 'Article 2'}, ...])" ]; + ServerMiddleware->ClientMiddleware [ label="RES " ]; + ClientMiddleware->ClientMiddleware [ label="deserializeResult('RES ')" ]; + ClientMiddleware->Client [ label="[{title: 'Article 1'}, {title: 'Article 2'}, ...]" ]; +} diff --git a/cesi/architecture_n_tiers/ressources/schemas_slides.epgz b/cesi/architecture_n_tiers/ressources/schemas_slides.epgz index 9071295..b224ce3 100644 Binary files a/cesi/architecture_n_tiers/ressources/schemas_slides.epgz and b/cesi/architecture_n_tiers/ressources/schemas_slides.epgz differ