gRPC este un cadru puternic pentru lucrul cu apeluri de procedură la distanță. RPC-urile vă permit să scrieți codul ca și când acesta va fi rulat pe un computer local, chiar dacă acesta poate fi executat pe un alt computer.

Zilele trecute m-am scufundat adânc în gRPC. Voi împărtăși câteva dintre marile mele descoperiri aici în acest articol.

Rețineți că mă voi concentra mai mult pe concepte decât detalii de implementare. Veți învăța arhitectura de bază a gRPC în sine. De asemenea, veți învăța:

  • De ce este atât de utilizat gRPC de către dezvoltatori
  • Cum funcționează atât de bine
  • Și cum funcționează totul sub capotă.

Să ne întoarcem puțin

Înainte de a ne grăbi în gRPC, ar trebui să aruncăm o privire la ce Apeluri de procedură la distanță sunt.

Un RPC este o formă de comunicare client-server care folosește un apel funcțional mai degrabă decât un apel HTTP obișnuit.

Folosește IDL (Interface Definition Language) ca formă de contract pentru funcțiile care trebuie apelate și pentru tipul de date.

Ce este gRPC Tampoane de protocol streaming si arhitectura
Arhitectura RPC

Dacă nu v-ați dat seama încă, RPC din gRPC înseamnă Remote Procedure Call. Și da, gRPC reproduce acest stil arhitectural de comunicare server client, prin apeluri funcționale.

Deci, gRPC nu este din punct de vedere tehnic un concept nou. Mai degrabă a fost adoptată din această tehnică veche și îmbunătățită, făcând-o foarte populară în doar 5 ani.

Prezentare generală a gRPC

1612125549 12 Ce este gRPC Tampoane de protocol streaming si arhitectura

În 2015, Google a deschis proiectul, care în cele din urmă ar fi cel numit gRPC. Dar ce înseamnă „g” din gRPC?

O mulțime de oameni ar putea presupune că este pentru Google, deoarece Google a făcut-o, dar nu.

Google schimbă semnificația „g” pentru fiecare versiune până la punctul în care au făcut chiar și un CITEȘTE-MĂ pentru a enumera toate semnificațiile.

De când a fost introdus gRPC, acesta a câștigat destul de multă popularitate și multe companii îl folosesc.

Există o mulțime de motive pentru care gRPC este atât de popular:

  • Abstracția este ușoară (este un apel funcțional)
  • Este acceptat în multe limbi
  • Este foarte performant
  • Apelurile HTTP sunt adesea confuze, deci acest lucru este mai ușor

Și, în afară de toate motivele de mai sus, gRPC este popular, deoarece microserviciile sunt foarte populare.

Microserviciile vor rula adesea mai multe servicii în diferite limbaje de programare. De asemenea, vor avea adesea o mulțime de servicii pentru interacțiunile de serviciu.

Acesta este locul în care gRPC ajută cel mai mult oferind suport și capacitatea de a rezolva problemele tipice care apar din acele situații.

Ce este gRPC Tampoane de protocol streaming si arhitectura
Microservicii

gRPC este foarte popular în apelurile de service, deoarece adesea apelurile HTTP sunt mai greu de înțeles la prima vedere.

Funcțiile gRPC sunt mult mai ușor de argumentat, astfel încât dezvoltatorii nu trebuie să se îngrijoreze de a scrie o mulțime de documentație, deoarece codul în sine ar trebui să explice totul.

Unele dintre servicii ar putea fi, de asemenea, scrise în diferite limbi, iar gRPC vine cu mai multe biblioteci pentru a sprijini acest lucru.

Performanța este cireșul de sus – și este o cireșă mare.

gRPC Architecture

1612125549 608 Ce este gRPC Tampoane de protocol streaming si arhitectura
Arhitectura brută a gRPC. Este mai mult sau mai puțin la fel ca RPC obișnuit.

Am menționat de mai multe ori că performanța gRPC este foarte bună, dar s-ar putea să vă întrebați ce o face atât de bună? Ce face ca gRPC să fie mult mai bun decât RPC atunci când desenele lor sunt destul de similare?

Iată câteva diferențe cheie care fac gRPC atât de performant.

HTTP / 2

HTTP ne-a fost alături de mult timp. Acum, aproape toate serviciile de backend folosesc acest protocol.

1612125549 174 Ce este gRPC Tampoane de protocol streaming si arhitectura
Istoria HTTP

După cum arată imaginea de mai sus, HTTP / 1.1 a rămas relevant pentru o lungă perioadă de timp.

Apoi, în 2015, HTTP / 2 a ieșit și a înlocuit în esență HTTP / 1.1 ca cel mai popular protocol de transport de pe internet.

Dacă vă amintiți că 2015 a fost și anul în care a apărut gRPC, nu a fost deloc o coincidență. HTTP / 2 a fost, de asemenea, creat de Google pentru a fi utilizat de gRPC în arhitectura sa.

HTTP / 2 este unul dintre marile motive pentru care gRPC poate funcționa atât de bine. Și în următoarea secțiune, veți vedea de ce.

Multiplexare cerere / răspuns

Într-un protocol HTTP tradițional, nu este posibil să trimiteți mai multe cereri sau să obțineți mai multe răspunsuri împreună într-o singură conexiune. Va fi necesară crearea unei noi conexiuni pentru fiecare dintre ele.

Acest tip de multiplexare cerere / răspuns este posibilă în HTTP / 2 odată cu introducerea unui nou strat HTTP / 2 numit încadrare binară.

1612125549 727 Ce este gRPC Tampoane de protocol streaming si arhitectura

Acest strat binar încapsulează și codifică datele. În acest strat, cererea / răspunsul HTTP se împarte în cadre.

Cadrul anteturilor conține informații tipice despre anteturile HTTP, iar cadrul de date conține sarcina utilă. Folosind acest mecanism, este posibil să aveți date de la mai multe solicitări într-o singură conexiune.

Acest lucru permite încărcări utile din mai multe cereri cu același antet, identificându-l astfel ca o singură cerere.

Compresia antetului

Este posibil să fi întâlnit multe cazuri în care anteturile HTTP sunt chiar mai mari decât sarcina utilă. Și HTTP / 2 are o strategie foarte interesantă numită HPack pentru a face față asta.

În primul rând, totul din HTTP / 2 este codificat înainte de a fi trimis, inclusiv anteturile. Acest lucru ajută la performanță, dar acesta nu este cel mai important lucru în ceea ce privește compresia antetului.

HTTP / 2 mapează antetul atât pe partea clientului, cât și pe partea serverului. Din aceasta, HTTP / 2 este capabil să știe dacă antetul conține aceeași valoare și trimite valoarea antetului doar dacă este diferită de antetul anterior.

1612125549 391 Ce este gRPC Tampoane de protocol streaming si arhitectura

După cum se vede în imaginea de mai sus, Solicitarea nr. 2 va trimite calea doar deoarece celelalte valori sunt exact aceleași. Și da, acest lucru reduce foarte mult dimensiunea sarcinii utile și, la rândul său, îmbunătățește performanța HTTP / 2 și mai mult.

Protocol Buffer, alias Protobuf

1612125549 262 Ce este gRPC Tampoane de protocol streaming si arhitectura
Protocol Buffer

Protobuf este cel mai frecvent utilizat IDL (Interface Definition Language) pentru gRPC. Acesta este locul unde vă stocați practic contractele de date și funcții sub forma unui fișier proto.

message Person {
    required string name = 1;
    required int32 id = 2;
    optional string email = 3;
}

Deoarece acesta este sub forma unui contract, atât clientul, cât și serverul trebuie să aibă același fișier proto. Fișierul proto acționează ca un contract intermediar pentru ca clientul să apeleze orice funcție disponibilă de pe server.

De asemenea, Protobuf are mecanisme proprii, spre deosebire de un API REST obișnuit care trimite doar șiruri de JSON ca octeți. Aceste mecanisme permit ca sarcina utilă să fie mult mai mică și să permită performanțe mai rapide.

Metoda de codificare utilizată de Protobuf este destul de complicată. Dacă doriți să faceți o scufundare profundă în modul în care funcționează, verificați acest lucru documentație cuprinzătoare.

Ce mai oferă gRPC?

stele pe cer
Fotografie de Kyle Gregory Devaras / Unsplash

Acum ar trebui să aveți o înțelegere de bază a arhitecturii gRPC, cum funcționează și de ce este capabil.

Iată însă câteva alte lucruri interesante pe care ni le oferă gRPC.

Metadate

În loc să utilizeze un antet de solicitare HTTP obișnuit, gRPC are ceva numit metadate. Metadatele sunt un tip de date cheie-valoare care pot fi setate fie din partea clientului, fie din partea serverului.

Header poate fi atribuit din partea clientului, în timp ce serverele pot atribui Header și Trailers atâta timp cât sunt amândoi sub formă de metadate.

Streaming

Streamingul este unul dintre conceptele de bază ale gRPC, unde se pot întâmpla mai multe lucruri într-o singură cerere. Acest lucru este posibil prin capacitatea de multiplexare a HTTP / 2 menționată anterior.

Există mai multe tipuri de streaming:

  • RPC de streaming de server: În cazul în care clientul trimite o singură solicitare și serverul poate trimite înapoi răspunsuri multiple. De exemplu, atunci când un client trimite o cerere pentru o pagină de pornire care are o listă de elemente multiple, serverul poate trimite răspunsuri înapoi separat, permițându-i clientului să utilizeze încărcarea leneșă.
  • RPC pentru fluxul de clienți: În cazul în care clientul trimite mai multe cereri și serverul trimite doar înapoi un singur răspuns. De exemplu, un zip / bucată încărcat de client.
  • RPC de flux bidirecțional: Unde atât clientul, cât și serverul își trimit mesaje în același timp, fără a aștepta un răspuns.

Interceptori

gRPC acceptă utilizarea interceptorilor pentru cererea / răspunsul său. Interceptorii, ei bine, interceptează mesajele și vă permit să le modificați.

Sună familiar? Dacă v-ați jucat cu procesele HTTP pe un API REST, interceptorii sunt foarte asemănători cu middleware-ul.

Bibliotecile gRPC acceptă de obicei interceptorii și permit implementarea ușoară. Interceptorii sunt de obicei folosiți pentru:

  • Modificați cererea / răspunsul înainte de a fi transmis mai departe. Poate fi folosit pentru a furniza informații obligatorii înainte de a fi trimis clientului / serverului.
  • Vă permit să manipulați fiecare apel de funcție, cum ar fi adăugarea de jurnale suplimentare pentru a urmări timpul de răspuns.

Echilibrarea sarcinii

Dacă nu sunteți deja familiarizați cu echilibrarea încărcării, este un mecanism care permite distribuirea cererilor clienților pe mai multe servere.

Dar echilibrarea încărcării se face de obicei la nivel de proxy (de exemplu, NGINX). Deci, de ce vorbesc despre asta aici?

Se pare că gRPC acceptă o metodă de echilibrare a sarcinii de către client. Este deja implementat în biblioteca Golang și poate fi utilizat cu ușurință.

Deși ar putea părea un fel de magie nebună, nu este. Există un fel de rezolvator DNS pentru a obține o listă IP și un algoritm de echilibrare a sarcinii sub capotă.

Anulare apel

Clienții gRPC pot anula un apel gRPC atunci când nu mai are nevoie de un răspuns. Cu toate acestea, nu este posibilă revenirea la partea serverului.

Această caracteristică este utilă în special pentru transmiterea pe server, în cazul în care s-ar putea să vină mai multe cereri de server. Biblioteca gRPC este echipată cu un model de metodă de observare pentru a ști dacă o cerere este anulată și a permite acesteia să anuleze mai multe cereri corespunzătoare simultan.

Încheierea

Pierdut în spațiu și timp
Fotografie de Ricardo Rocha / Unsplash

Tot ceea ce am împărtășit astăzi doar zgârie suprafața a ceea ce este gRPC, de ce este capabil și aproximativ cum funcționează.

Sper cu adevărat că acest articol te-a ajutat să înțelegi mai multe despre gRPC. Dar mai sunt încă multe de învățat, așa că nu te opri aici! Continuați să săpați.

Mulțumesc pentru lectură!