RPC, appel de procédure distante, appel de procédure distante, qui définit le comportement d'un programme sur une machine appelant un sous-programme sur une autre machine Caractéristiques:
Déplacement de l'implémentation distante vers le local. En effet, il n'y a aucune différence entre les appels distants et les appels locaux.
En mode cs, le client lance une requête et le serveur l'exécute après avoir reçu les paramètres de la requête.
Protéger la complexité sous-jacente des appels inter-processus et inter-réseaux nous permet de nous concentrer davantage sur la logique métier
1.2 Cadre spécifique de mise en œuvre
dubbo (apache alibaba java)
Motan (Weibo)
tars (interne à Tencent)
grpc
épargne
nuage de printemps openfeign
1.3 Scénarios d'application
Peut être utilisé pour la communication inter-réseau
2. Points techniques clés du RPC et un appel au processus RPC
2.1 Processus RPC
processus
Le client appelle l'interface et accède à la classe proxy, assemble la requête et la sérialise, puis code le protocole et l'envoie
Le serveur reçoit la requête, effectue une analyse du protocole et une désérialisation pour obtenir les paramètres de la requête.
Le serveur appelle l'implémentation de l'interface en fonction des paramètres de la requête, puis assemble la réponse
La réponse est renvoyée de la même manière
Comment les deux modules réseau sont-ils connectés ?
Le centre d'enregistrement est un lieu de stockage des données et il est préférable de prévoir des fonctions de suivi.Le centre d'enregistrement est distinct du framework rpc Centres d'enregistrement communs : gardien de zoo, nacos, etc.
Autres caractéristiques
Filtres de routage des fournisseurs disponibles
Équilibrage de charge : choisissez le fournisseur à utiliser parmi les fournisseurs disponibles
Limitation par fusible : contrôle de débit
traitement de réseau
Traitement du protocole
Avantages du RPC
Facilitez la création d'applications distribuées, découplez les services et développez facilement
RPC utilise généralement de longues connexions, ce qui élimine le besoin d'établir une connexion pour chaque communication et réduit la surcharge du réseau.
RPC nécessite un centre d'enregistrement capable de détecter et de visualiser de manière dynamique les modifications apportées au service.
Fonctions riches de gestion d'arrière-plan, gestion unifiée des services d'interface, aucune perception pour l'appelant, fonctionnement unifié
Protocole rationalisé, efficacité accrue, confidentialité et sécurité élevées
Il possède des fonctions telles que l'équilibrage de charge, le disjoncteur et la limitation de courant.
2.2 Technologie de sérialisation
Tout cadre de sérialisation : l'idée centrale est la conceptionun protocole de sérialisation,Écrivez le type d'objet, le type d'attribut et la valeur d'attribut dans le flux d'octets binaires dans un format fixe pour terminer la sérialisation., puis lisez le type d'objet, le type d'attribut et la valeur d'attribut un par un selon le format fixe, et recréez un nouvel objet grâce à ces informations pour terminer la désérialisation.
Méthode de sérialisation
Sérialisation native JDK
Format d'échange de données texte léger-json/XML
Il a une bonne lisibilité et est pratique pour la lecture et le débogage. Le fichier d'octets après sérialisation avec prise en charge multilingue est relativement volumineux et relativement inefficace. Cependant, par rapport à XML, le flux d'octets après sérialisation est largement utilisé dans les entreprises. en particulier pour le front-end et les tiers fournissent des API.
Toile de juteIl s'agit d'un type dynamique, binaire et prend en charge le framework Xu Lihua multilingue
Les performances de Hessian sont beaucoup plus efficaces que la sérialisation JDK et JSON. Et le nombre d'octets générés est également plus petit.Très bonne compatibilité et stabilité,Par conséquent, Hessian est plus approprié comme protocole de sérialisation pour la communication à distance dans le cadre RPC.
protobuf
La bibliothèque de séquences open source lancée par Google est un format de stockage de données structuré léger et efficace avec prise en charge multilingue.
Vitesse rapide, taux de compression élevé, petite taille. Le volume après sérialisation est beaucoup plus petit que JSON et Hessian. Le format du disque couleur du cours a une bonne extension, mise à niveau et compatibilité, et peut être rétrocompatible.
Comment PRC choisit-il un cadre de sérialisation ?
Facteurs de sélection
Sécurité : la première considération est que s'il existe des failles de sécurité dans la sérialisation, les services en ligne sont susceptibles d'être envahis (la sérialisation native du JDK présente des vulnérabilités).
Compatibilité : la compatibilité du protocole de sérialisation est-elle très bonne après la mise à niveau de la version, qu'elle soit multiplateforme, multilingue, etc.
Polyvalence : capable de sérialiser et de désérialiser n'importe quel type. Le serveur ne sera pas soudainement incapable d'appeler la méthode d'interface de service après avoir ajouté un certain type de paramètre.
Performances et efficacité : le processus de sérialisation et de désérialisation est un processus nécessaire pour les appels RPC. Les performances et l'efficacité sont forcément directement liées aux performances et à l'efficacité globales du framework RPC.
Surcharge d'espace : la taille des données binaires après la sérialisation. Plus la taille des données d'octets sérialisées est petite, plus la quantité de données transmises sur le réseau est petite et plus les données sont transmises rapidement. Ceci est directement lié aux appels RPC. Temps de réponse
Considérations
Évitez les objets trop complexes à construire, comportant de nombreux attributs et comportant plusieurs niveaux d'imbrication.
Évitez les objets trop volumineux : grandes chaînes, très grands tableaux, etc.
Évitez de transmettre des types en tant que paramètres qui ne sont pas pris en charge par le framework de sérialisation.
Empêcher les objets d'avoir des relations d'héritage complexes
2.3 Protocole de communication de la couche application-http
2.3.1 Notions de base
La plupart des RPC développent http eux-mêmes et prennent également en charge http1.1.
Qu'est-ce que l'IO
IO est le processus de copie de données entre l'ordinateur interne et les périphériques externes. Une fois les données réseau arrivées, elles sont d'abord stockées dans la zone de cache du noyau du système d'exploitation et attendent que l'application les collecte.
front déclenché
Lors de l'utilisation du mode de déclenchement sur front, lorsqu'un événement lisible se produit sur le descripteur Socket surveillé, le serveur ne se réveillera qu'une seule fois de epoll_wait. Même si le processus n'appelle pas la fonction read pour lire les données du noyau, il ne se réveillera qu'une seule fois. une fois. Par conséquent, notre programme doit garantir que les données dans le tampon du noyau sont lues en une seule fois.
déclencheur horizontal
Lors de l'utilisation du mode de déclenchement horizontal, lorsqu'un événement lisible se produit sur le Socket surveillé, le serveur se réveille continuellement de epoll_wait jusqu'à ce que les données du tampon du noyau soient lues par la fonction de lecture. Le but est de nous indiquer qu'il y a des données qui doivent l'être. lire. .
E/S pilotées par les événements
Après avoir lancé une demande de lecture, attendez la notification d'événement de lecture prête avant de lire les données.
E/S asynchrones
Après avoir lancé une demande de lecture, attendez que le système d'exploitation vous avertisse une fois la lecture terminée et confiez complètement la fonction au système d'exploitation pour implémentation.
2.3.2 Quels sont les modèles IO du système d'exploitation ?
Blocage synchrone des E/S E/S synchrones non bloquantes Multiplexage E/S E/S pilotées par signal E/S asynchrones
Blocage synchrone des E/S
La première étape de la lecture est bloquée, ce que nous appelons souvent le blocage des E/S. Autrement dit, si la première étape de la lecture est bloquée en attendant que la lecture soit prête, nous l'appelons blocage des E/S.