CESI: Architecture N tiers
This commit is contained in:
parent
c8caed6efc
commit
703ca7d4fb
Binary file not shown.
After Width: | Height: | Size: 34 KiB |
Binary file not shown.
After Width: | Height: | Size: 54 KiB |
|
@ -44,9 +44,8 @@ table { font-size: 0.6em !important; }
|
||||||
### Les différentes topologies
|
### Les différentes topologies
|
||||||
### Communication client/serveur
|
### Communication client/serveur
|
||||||
### Répartition des traitements
|
### Répartition des traitements
|
||||||
|
### Le middleware
|
||||||
### Exercice : Implémentation d'une calculatrice par TCP/IP
|
### 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
|
## 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
|
## Exercice
|
||||||
|
|
||||||
### Implémentation d'une calculatrice à état distribuée en NodeJS
|
### 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
|
## L'architecture 3 tiers
|
||||||
|
|
||||||
### Principes
|
### Généralités
|
||||||
### Modèle transactionnel
|
|
||||||
### Sécurité
|
### 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
|
### 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
|
### Principe
|
||||||
### Approche objet et notion de responsabilité
|
|
||||||
### Communication inter-composants
|
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:
|
||||||
### Exercice : Présentation de l'architecture orientée « micro-services » et implémentation d'une application basée sur ce patron de conception.
|
|
||||||
|
- 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
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -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
|
- `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.
|
- `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
|
## 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/)
|
- [Télécharger/installer NodeJS](https://nodejs.org/en/download/)
|
||||||
- [Le module `net` de NodeJS](https://nodejs.org/api/net.html)
|
- [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/)
|
||||||
|
|
|
@ -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 <data...>" ];
|
||||||
|
ClientMiddleware->ClientMiddleware [ label="deserializeResult('RES <data...>')" ];
|
||||||
|
ClientMiddleware->Client [ label="[{title: 'Article 1'}, {title: 'Article 2'}, ...]" ];
|
||||||
|
}
|
Binary file not shown.
Loading…
Reference in New Issue