Académique Documents
Professionnel Documents
Culture Documents
1
• Client/Serveur « traditionnel » : RPC, gRPC
Le modèle Client-Serveur • Client/Serveur « à objets » : RMI, CORBA, DCOM
pour les applications • Client/Serveur « de données » : Requêtes SQL
• Client/Serveur « WEB » : WebSocket, CGI, Servlet, asp, jsp, php,...
distribués • Client/Serveur web service : SOAP, REST, GraphQL,…
3
RPC: Remote Procedure Call
• L'appel de procédure à distance (RPC) est
• une technologie de communication utilisée par un programme pour demander à
un autre programme d'utiliser son service sur un réseau sans même connaître
les détails du réseau.
• Un appel de fonction ou un appel de sous-programme sont d'autres termes
désignant un appel de procédure.
• Il est basé sur le concept client-serveur. Le client est le programme qui fait la
demande et le serveur est le programme qui fournit le service.
• Un RPC, comme un appel de procédure locale, est basé sur l'opération
synchrone qui nécessite l'arrêt de l'application requérante jusqu'à ce que le
processus distant renvoie ses résultats.
• Plusieurs RPC peuvent être exécutés simultanément en utilisant des processus
ou des threads légers partageant le même espace d'adressage.
• Le programme d'appel de procédure à distance utilise aussi souvent le langage de
définition d'interface (IDL), un langage de détermination permettant de décrire
l'interface de programmation d'application (API) d'un composant de programme
informatique. Dans ce cas, IDL agit comme une interface entre les machines
situées aux deux extrémités de la connexion, qui peuvent exécuter des systèmes
d'exploitation et des langages de programmation différents.
4
Fonctionnement de RPC
5
• Threads d'appel simultanés
s'exécutant dans un contexte
d'exécution partagé montre un
serveur exécutant des procédures
distantes dans ses deux threads
d'appel, pendant que le thread
d'application du serveur écoute.
6
• Les processus appelant et appelé dans le RPC communiquent pour
échanger des informations via le schéma de transmission de
messages.
• La première tâche côté serveur consiste à extraire les paramètres
de la procédure lorsqu'un message de requête arrive, puis le
résultat, à envoyer un message de réponse et enfin à attendre le
prochain message d'appel.
• Un seul processus est activé à un moment donné.
• Il n’est pas toujours nécessaire que l’appelant soit bloqué.
• Le mécanisme asynchrone pourrait être utilisé dans le RPC pour
permettre au client de fonctionner même si le serveur n'a pas
encore répondu.
• Afin de gérer les demandes entrantes, le serveur peut créer un
thread qui libère le serveur pour gérer les demandes ultérieures.
7
Types RPC: Callback RPC, Broadcast RPC, Batch-mode RPC
• RPC synchrone : dans le RPC synchrone, le programme client envoie une
requête au serveur et attend une réponse avant de continuer. Cela signifie que le
programme client est bloqué jusqu'à ce qu'il reçoive une réponse du serveur.
• RPC asynchrone ou Callback RPC : dans le RPC asynchrone, le programme
client envoie une requête au serveur et continue de s'exécuter sans attendre
de réponse. Une fois que le serveur a reçu la demande d'appel de procédure à
distance du client, il exécute la procédure demandée et renvoie la réponse au
client via le réseau lorsqu'il est prêt. Le RPC asynchrone est souvent utilisé
lorsque le serveur peut mettre beaucoup de temps à accuser réception ou
lorsque le client doit continuer à s'exécuter sans blocage. un paradigme P2P
(Peer-to-Peer) choisit entre les processus participants.
• Broadcast RPC (RPC pour diffusion) : la demande d'un client qui est diffusée sur
tout le réseau et gérée par tous les serveurs possédant la méthode de traitement
de cette demande est connue sous le nom de RPC de diffusion.
• RPC en mode batch : le RPC en mode batch permet au client d'aligner et de
séparer les requêtes RPC dans un tampon de transmission avant de les
envoyer au serveur en un seul lot sur le réseau.
8
9
Architecture de RPC
11
Couche RPC d'un système
distribué utilisant Netty
12
framework Netty
• Netty est un framework open source
• permettant de créer un composant réseau haute performance
(messagerie ou RPC ou transport) d'un système distribué.
• Il repose sur les principes de conception de la programmation
asynchrone et aide les développeurs en évitant les efforts
importants de conception, de mise en œuvre et de maintenance
requis pour disposer d'une couche réseau hautes performances
dans un système.
• Les E/S non bloquantes, asynchrones et pilotées par
événements sont les éléments de base de Netty.
13
Exemple de code : NettyRpc
14
https://github.com/luxiaoxun/NettyRpc
gRPC
15
gRPC
• gRPC est un framework RPC (Remote procedure call) open source initialement développé par
Google.
• Il utilise le protocole HTTP/2 pour le transport, Protocol Buffers comme langage de description
d'interface (IDL : interface description language),
• offre des fonctionnalités telles que l'authentification, la transmission bidirectionnelle et le
contrôle de flux, par le blocage ou non des communications par annulation ou délais d'attente.
• Il permet la construction de liaisons client/serveur multiplateforme pour de nombreux langages.
16
gRPC
17
Fonctionnement
• gRPC est basé sur l'idée de définir un service, spécifiant les méthodes pouvant être
appelées à distance avec leurs paramètres et types de retour.
• Côté serveur, le serveur implémente cette interface et exécute un serveur gRPC
pour gérer les appels clients.
• Côté client, le client dispose d'un stub (appelé simplement client dans certaines
langues) qui fournit les mêmes méthodes que le serveur.
• Les données échangées se font avec Protobuf (Protocol Buffers). il est un format de
sérialisation de données agnostique au langage développé par Google.
18
Exemple de gRPC : fichier proto
• On Commence par définir un fichier proto.
L'extension .proto est utilisée pour définir le
langage Protobuf. Dans le fichier proto, vous
définissez la structure des messages qui
seront échangés entre le client et le serveur.
• On a créé 3 messages. Le premier message
sert à créer la tâche Todo, le suivant est
l'objet complet de la tâche Todo et le dernier
est le message pour récupérer une tâche en
fonction d'un ID.
• Sans un service, nous ne pouvons pas utiliser
ces messages. Créons donc quelques
services gRPC dans le même fichier proto.
19
Exemple: en python
helloworld.proto
https://github.com/grpc/grpc/blob/master/examples/python/helloworld/greeter_client.py
https://github.com/grpc/grpc/blob/master/examples/python/helloworld/greeter_server.py
https://github.com/grpc/grpc/tree/master/src/python/grpcio 20
https://grpc.io/docs/languages/python/quickstart/
Installation de gRPC pour python
https://grpc.io/docs/languages/python/quickstart/#generate-grpc-code
21
https://github.com/grpc/grpc/tree/master/src/python/grpcio
gRPC platforms https://grpc.io/docs/platforms/
Backend
22
Example : gRPC server and client in Node.js
24
gRPC-web & ASP.NET Core 3.1
https://devblogs.microsoft.com/dotnet/grpc-web-experiment/
25
gRPC comme API pour la communication entre
microservices distribués
Ces derniers temps, l’architecture des microservices est
devenue un choix populaire pour le développement
d’applications logicielles en particulier dans un
environnement distribué.
Dans une architecture de microservices, les microservices
doivent souvent communiquer entre eux. Par rapport à l'API
Web RESTful traditionnelle, un framework RPC basé sur
gRPC peut constituer une meilleure alternative (plus rapide
5X ou plus) pour la communication des microservices.
Event-Driven Architecture
28
Performances sur les temps de latences
https://medium.com/l3montree-techblog/performance-comparison-rest-vs-grpc-vs-asynchronous-communication-3ad27d144a13
31