Middle
gRPC чист?
sobes.tech AI
Ҷавоб аз AI
gRPC — бу фреймворки RPC (Remote Procedure Call) бо баландсифати, коди кушода, ки аз ҷониби Google таҳия шудааст, барои сохтани барномаҳои тақсимшуда ва микросервисҳо. Он асос ёфтааст ба протоколи HTTP/2 барои интиқол ва истифода мебарад Protocol Buffers (Protobuf) ҳамчун забони тавсифи интерфейс ва механизм барои сериалкунии маълумот.
Хусусиятҳои асосии gRPC:
- HTTP/2: Манфиатҳои HTTP/2-ро истифода мебарад, ба монанди мултиплексинг, фишурдани сарлавҳаҳо ва интиқоли дутарафа, ки иҷрои баландтарро нисбат ба протоколҳои оддӣ client-server дар HTTP/1.1 таъмин мекунад.
- Protocol Buffers (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 (бинарӣ) | JSON, XML (матнӣ) |
| Камбудиҳо | Баланд (формати бинарӣ, HTTP/2) | Паст (формати матнӣ, хароҷот) |
| Забони тавсифи API | Protocol Buffers (.proto) |
OpenAPI/Swagger |
| Муқовимати API | Ситора, асос ёфта дар Protobuf | Камтар сахт |
| Типкунии маълумот | Ситора (муайян дар .proto) |
Зуҳур (санҷиш дар вақти иҷро) |
| Генератсияи код | Дарунсохт | Ниёз ба воситаҳои беруна |
| Потокӣ | Дарунсохт | Ниёз ба механизмҳои иловагӣ (масалан, WebSockets) |
| Хондан | Мушкил дар хондан бе .proto |
Осон барои инсон хондан |
gRPC барои ҳамкорӣ байни хизматрасониҳо дар системҳои тақсимшуда, микросервисҳо, интиқоли ҳаҷми калон маълумот, ки иҷроиш ва муқаррароти қатъии API муҳим аст, хеле мувофиқ аст.