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-ը:
- Սերվիս API-ն սահմանվում է Protocol Buffers լեզվով
.protoֆայլում: - Գեներացվում է հաճախորդի և սերվերի կոդը անհրաժեշտ լեզվով
protocկոմպիլյատորով: - Սերվերը իրականացնում է գեներացված սերվիսի ինտերֆեյսը:
- Հաճախորդը օգտագործում է գեներացված կոդը սերվիսի մեթոդները կանչելու համար սերվերին:
Օրինակ .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-ը լավ է համապատասխանում միջսերվիս փոխազդեցության համար տարածված համակարգերում, միկրոսերվիսներում, մեծ տվյալների փոխանցման դեպքում, որտեղ կարևոր է արդյունավետությունը և խստիվ պայմանագիրը։