Sobes.tech
Middle

Ի՞նչ է gRPC-ը։

sobes.tech AI

Պատասխան AI-ից

gRPC - դա բարձր արդյունավետության, բաց կոդով RPC (Remote Procedure Call) ֆրեյմվորկ է, որը մշակվել է Google-ի կողմից՝ տարածված ծրագրեր և միկրոսերվիսներ ստեղծելու համար: Այն հիմնված է HTTP/2 պրոտոկոլի վրա և օգտագործում է Protocol Buffers (Protobuf) որպես ինտերֆեյսի նկարագրության լեզու և սերիալիզացիայի մեխանիզմ:

Կառավարական առանձնահատկություններ gRPC-ի:

  • HTTP/2: Օգտագործում է HTTP/2-ի առավելությունները, ինչպիսիք են հարցումների մուլտիպլեքսավորումը, գլխագրերի սեղմումը և երկկողմանի հոսքային փոխանցումը, ինչը ապահովում է ավելի բարձր արդյունավետություն, քան սովորական հաճախորդ-սերվեր պրոտոկոլները HTTP/1.1-ի վրա:
  • Protocol Buffers (Protobuf): Տվյալների նկարագրության լեզու, որը թույլ է տալիս կառուցել տվյալները և գեներացնել կոդ սերիալիզացիայի և դեսերիալիզացիայի համար տարբեր լեզուներով: Protobuf-ը արդյունավետ է չափի և արագության առումով:
  • Հոսքային փոխանցում (Streaming): Պատրաստ է չորս տեսակի հոսքային փոխանցման՝
    • Unary: Կլասիկ RPC (մեկ հարցում - մեկ պատասխան):
    • Server-side Streaming: Հաճախորդը ուղարկում է հարցում, սերվերը պատասխան է ստանում հոսքով:
    • Client-side Streaming: Հաճախորդը ուղարկում է հոսք հաղորդագրությունների, սերվերը պատասխան է ստանում մեկ հաղորդագրությամբ:
    • Bidirectional Streaming: Հաճախորդն ու սերվերը փոխանակում են հաղորդագրությունների հոսքեր միաժամանակ:
  • Բազմալեզվություն: Protobuf-ի միջոցով gRPC-ն գեներացնում է հաճախորդի և սերվերի կոդ տարբեր ծրագրավորման լեզուներով:
  • Կոդի գեներացում: Ավտոմատացված կոդի ստեղծում հաճախորդի և սերվերի համար .proto ֆայլից, ինչը նվազեցնում է ձեռքով կոդավորման քանակը:
  • Մետադատված: Աջակցում է մետադատվածների փոխանցմանը ( բանալի-արժեք զույգեր) հարցումների և պատասխանների հետ:
  • Հետախցիկներ (Interceptors): Հնարավորություն է տալիս միջամտել հարցումներին և պատասխաններին՝ լրացուցիչ տրամաբանություն իրականացնել (օրինակ՝ գրանցում, նույնականացում):

Ինչպես է աշխատում gRPC-ը:

  1. Սերվիս API-ն սահմանվում է Protocol Buffers լեզվով .proto ֆայլում:
  2. Գեներացվում է հաճախորդի և սերվերի կոդը անհրաժեշտ լեզվով protoc կոմպիլյատորով:
  3. Սերվերը իրականացնում է գեներացված սերվիսի ինտերֆեյսը:
  4. Հաճախորդը օգտագործում է գեներացված կոդը սերվիսի մեթոդները կանչելու համար սերվերին:

Օրինակ .proto ֆայլ:

syntax = "proto3";

package greeting;

// Սերվիսի սահմանում
service Greeter {
  // Յունար RPC մեթոդ
  rpc SayHello (HelloRequest) returns (HelloReply) {}
  // Սերվերային հոսքային մեթոդ
  rpc SayHelloStream (HelloRequest) returns (stream HelloReply) {}
}

// Հաղորդագրությունների սահմանում
message HelloRequest {
  string name = 1; // Ֆիլդի կարգահամար 1
}

message HelloReply {
  string message = 1;
}

Համեմատություն REST-ի հետ (որը օգտագործում է JSON/XML):

Գծագրություն gRPC (Protobuf) REST (JSON/XML)
Տրանսպորտային պրոտոկոլ HTTP/2 HTTP/1.1 կամ HTTP/2
Տվյալների սերիալիզացիա Protobuf (բ binary) JSON, XML (տեքստային)
Արդյունավետություն Բարձր (բ binary ձևաչափ, HTTP/2) Նվազ (տեքստային ձևաչափ, ավելորդություններ)
API նկարագրության լեզու Protocol Buffers (.proto ֆայլեր) OpenAPI/Swagger
API պայմանագիր Կոշտ, Protobuf-ի վրա հիմնված Ավելի թույլ է
Տվյալների տիպավորում Կոշտ (որոշվում է .proto-ում) Թույլ (գործարկման ժամանակ ստուգում)
Կոդի գեներացում Ներքին (ստանդարտ) Պահանջում է երրորդ կողմի գործիքներ
Հոսքային փոխանցում Ներքին (ստանդարտ) Պահանջում լրացուցիչ մեխանիզմներ (օրինակ՝ WebSockets)
Կարդալելիություն Կարծես թե դժվար է առանց .proto Հեշտ է մարդուն կարդալու համար

gRPC-ը լավ է համապատասխանում միջսերվիս փոխազդեցության համար տարածված համակարգերում, միկրոսերվիսներում, մեծ տվյալների փոխանցման դեպքում, որտեղ կարևոր է արդյունավետությունը և խստիվ պայմանագիրը։