Protocolul RPC (Remote Procedure Call) în sistemul distribuit

⚡ Rezumat inteligent

Apelul de procedură la distanță (RPC) este un protocol de comunicare interproces care permite unui program să execute o procedură într-un alt spațiu de adrese sau mașină, ascunzând detaliile rețelei în spatele unui apel de funcție local obișnuit în sistemele client-server distribuite.

  • 📞 Definiție: RPC permite unui client să invoce o procedură pe un server la distanță ca și cum ar fi un apel local.
  • 🗂️ tipuri: RPC-urile Callback, Broadcast și Batch-mode diferă în modul în care cererile sunt rutate și puse în coadă.
  • 🏗️ Architectura: Cinci părți cooperează la fiecare apel: clientul, stub-ul clientului, runtime-ul RPC, stub-ul serverului și serverul.
  • 🔄 Cum funcționează: Stub-urile combină parametrii într-un mesaj și anulează combinarea rezultatului returnat apelantului.
  • 🇧🇷 Compensații: RPC simplifică codul distribuit, dar adaugă costuri suplimentare de rețea și puncte de eșec față de apelurile locale.
  • 🤖 Unghiul AI: gRPC servește modele de învățare automată între microservicii, iar Copilot accelerează scrierea stub-urilor RPC.

Apel de procedură la distanță (RPC) în sisteme distribuite

Ce este RPC?

Apel de procedură la distanță (RPC) este o comunicarea intraprocesuala Tehnică utilizată pentru aplicațiile client-server. Forma completă a RPC este Remote Procedure Call (Apel de procedură la distanță). Mecanismele RPC sunt utilizate atunci când un program de calculator determină executarea unei proceduri sau a unei subrutine într-un spațiu de adrese diferit, codificată ca un apel de procedură normal, fără ca programatorul să codifice explicit detaliile pentru interacțiunea la distanță.

Acest apel de procedură gestionează și protocoale de transport de nivel scăzut, cum ar fi UDP și TCP/IP, pentru a transporta datele mesajelor între programe.

Tipuri de RPC

Trei tipuri de RPC sunt:

  • RPC de apel invers
  • Difuzați RPC
  • RPC în modul lot

RPC de apel invers

Acest tip de RPC permite o paradigmă peer-to-peer (P2P) între procesele participante. Ajută un proces să acționeze atât ca client, cât și ca server.

Funcțiile RPC de apel invers:

  • Gestionează problemele aplicațiilor interactive, procesate de la distanță.
  • Oferă serverului handle-ul clientului.
  • Funcția de apel invers face ca procesul client să aștepte.
  • Gestionează blocajele de apel invers.
  • Facilitează o paradigmă de tip peer-to-peer între procesele participante.

Difuzați RPC

RPC de difuzare este o cerere a clientului care este difuzată în rețea și procesată de toate serverele care au metoda de procesare a acelei cereri.

Funcțiile Broadcast RPC:

  • Vă permite să specificați dacă mesajul de solicitare al clientului trebuie difuzat.
  • Puteți declara porturi de difuzare.
  • Ajută la reducerea încărcării rețelei fizice.

RPC în modul lot

RPC în mod batch ajută la plasarea în coadă a cererilor RPC separate într-un buffer de transmisie pe partea clientului și apoi la trimiterea lor printr-o rețea într-un singur lot către server.

Funcțiile RPC în mod batch:

  • Reduce la minimum costurile suplimentare implicate în trimiterea unei cereri, deoarece trimite cererile prin rețea într-un singur lot către server.
  • Acest tip de protocol RPC este eficient doar pentru aplicațiile care necesită rate de apel mai mici.
  • Are nevoie de un protocol de transmisie fiabil.

RPC Architectură

Arhitectura RPC are în principal cinci componente ale programului:

  1. Client
  2. Stub client
  3. RPC Runtime
  4. Server Stub
  5. server de

RPC Architectură

RPC Architectură

Cum funcționează RPC?

Următorii pași au loc în timpul procesului RPC:

Pas 1) Clientul, stub-ul clientului și o instanță a runtime-ului RPC se execută pe mașina client.

Pas 2) Clientul pornește un proces de tip stub client prin transmiterea parametrilor în mod obișnuit. Stub-ul client este stocat în propriul spațiu de adrese al clientului. De asemenea, solicită runtime-ului RPC local să trimită cererea către stub-ul serverului.

Pas 3) În această etapă, utilizatorul accesează RPC efectuând un apel de procedură local obișnuit. Runtime-ul RPC gestionează transmiterea mesajelor între client și server prin rețea. De asemenea, îndeplinește funcțiile de retransmisie, confirmare, rutare și criptare.

Pas 4) După finalizarea procedurii serverului, execuția revine la stub-ul serverului, care împachetează (marshalizează) valorile returnate într-un mesaj. Stub-ul serverului trimite apoi mesajul înapoi la nivelul de transport.

Pas 5) În acest pas, stratul de transport trimite mesajul rezultat înapoi către stratul de transport al clientului, care returnează mesajul către stub-ul clientului.

Pas 6) În această etapă, stub-ul clientului demarshalează (despachetează) parametrii returnați în pachetul rezultat, iar execuția revine la apelant.

Caracteristicile RPC

Iată care sunt caracteristicile esențiale ale RPC:

  • Procedura apelată se află într-un alt proces, care probabil se află pe o altă mașină.
  • Procesele nu împart spațiul de adrese.
  • Parametrii sunt transmisi numai prin valori.
  • RPC se execută în mediul procesului serverului.
  • Nu oferă acces la mediul procedurii apelante.

Caracteristicile RPC

Iată care sunt caracteristicile importante ale RPC:

  • Sintaxă simplă de apel.
  • Oferă o semantică cunoscută.
  • Oferă o interfață bine definită.
  • Poate comunica între procese de pe aceeași mașină sau de pe mașini diferite.

Avantajele RPC

Iată avantajele/beneficiile RPC:

  • RPC ajută clienții să comunice cu serverele prin utilizarea convențională a apelurilor de procedură în limbaje de nivel înalt.
  • RPC este modelat pe apelul procedurii locale, dar procedura apelată este cel mai probabil executată într-un proces diferit și de obicei pe un computer diferit.
  • RPC acceptă modele orientate pe procese și orientate pe fire de execuție.
  • RPC face ca mecanismul intern de transmitere a mesajelor să fie ascuns utilizatorului.
  • Angajează multe dintre straturile de protocol pentru a îmbunătăți performanța.
  • RPC oferă abdomentracde exemplu, natura de transmitere a mesajelor a comunicării în rețea rămâne ascunsă utilizatorului.
  • RPC poate fi utilizat atât în ​​medii distribuite, cât și locale.
  • Efortul necesar pentru rescrierea și redezvoltarea codului este minim.

Dezavantajele RPC

Iată care sunt dezavantajele/dezavantajele utilizării RPC:

  • Apelul de procedură la distanță transmite parametrii doar prin valori; valorile pointer (de referință) nu sunt permise.
  • Timpul de apel (și de returnare) a unei proceduri la distanță - suprasarcina - este semnificativ mai mare decât în ​​cazul unei proceduri locale.
  • Acest mecanism este extrem de vulnerabil la defecțiuni, deoarece implică un sistem de comunicații, o altă mașină și un alt proces.
  • Conceptul RPC poate fi implementat în diferite moduri, deci nu există un standard unic.
  • Nu oferă flexibilitate pentru arhitectura hardware, deoarece se bazează în mare parte pe interacțiune.
  • Costul procesului crește din cauza apelului de procedură la distanță.

Întrebări frecvente

RPC expune acțiunile ca proceduri la distanță, în timp ce REST expune datele ca resurse accesate prin verbe HTTP. RPC se simte ca și cum s-ar apela o funcție locală; REST se concentrează pe resurse și stare.

gRPC este GoogleFramework-ul RPC modern și de înaltă performanță al [numărului de protocol]. Acesta folosește HTTP/2 și Protocolul Buffers și acceptă streaming bidirecțional, ceea ce îl face popular pentru comunicarea prin microservicii.

RPC poate fi ambele. Un apel sincron se blochează până când serverul returnează un rezultat, în timp ce un apel asincron returnează imediat răspunsul și gestionează răspunsul ulterior. Framework-uri precum gRPC acceptă ambele stiluri.

RPC este o formă de IPC care funcționează pe mașini separate. În timp ce multe metode IPC partajează memoria pe o singură gazdă, RPC schimbă mesaje printr-o rețea, astfel încât procesele de pe diferite computere să poată coopera.

Implementările RPC comune includ gRPC, Apache Thrift, XML-RPC, JSON-RPC și Java RMI. Acestea diferă în ceea ce privește formatul datelor și transportul, dar toate permit unui client să apeleze o procedură pe un server la distanță.

RPC nu este securizat în mod implicit; securitatea depinde de transport. Implementările adaugă criptare TLS, token-uri de autentificare și controale de acces pentru a proteja apelurile.

Platformele de învățare automată utilizează RPC, în special gRPC, pentru a oferi predicții de model între microservicii. Un client trimite caracteristici și primește un rezultat al inferenței, keeping Sisteme de inteligență artificială rapide și slab cuplate.

Da. GitHub Copilot poate crea schele pentru definițiile serviciilor .proto, stub-urile clienților și handler-ele de server pentru gRPC. Dezvoltatorii ar trebui să verifice în continuare interfețele generate, gestionarea erorilor și versiunea înainte de implementarea în producție.

Rezumați această postare cu: