Partage de technologie

[2-1 : Conception RPC]

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

RPC

1. Les bases

1.1 Définition et fonctionnalités

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

  1. dubbo (apache alibaba java)
  2. Motan (Weibo)
  3. tars (interne à Tencent)
  4. grpc
  5. épargne
  6. 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

Insérer la description de l'image ici
Insérer la description de l'image ici

  1. 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
  2. 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.
  3. Le serveur appelle l'implémentation de l'interface en fonction des paramètres de la requête, puis assemble la réponse
  4. La réponse est renvoyée de la même manière

Comment les deux modules réseau sont-ils connectés ?

Insérer la description de l'image ici

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

Insérer la description de l'image ici

  • 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

  1. Facilitez la création d'applications distribuées, découplez les services et développez facilement
  2. 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.
  3. RPC nécessite un centre d'enregistrement capable de détecter et de visualiser de manière dynamique les modifications apportées au service.
  4. Fonctions riches de gestion d'arrière-plan, gestion unifiée des services d'interface, aucune perception pour l'appelant, fonctionnement unifié
  5. Protocole rationalisé, efficacité accrue, confidentialité et sécurité élevées
  6. 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

  1. Évitez les objets trop complexes à construire, comportant de nombreux attributs et comportant plusieurs niveaux d'imbrication.
  2. Évitez les objets trop volumineux : grandes chaînes, très grands tableaux, etc.
  3. Évitez de transmettre des types en tant que paramètres qui ne sont pas pris en charge par le framework de sérialisation.
  4. 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.

Insérer la description de l'image ici

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
Insérer la description de l'image ici

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.

listenfd = socket();   // 打开一个网络通信套接字
bind(listenfd);        // 绑定
listen(listenfd);      // 监听
while(1) {
   
  connfd = accept(listenfd);  // 阻塞 等待建立连接
  int n = read(connfd, buf);  // 阻塞 读数据
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7