Sobes.tech
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:

  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 (бинарӣ) JSON, XML (матнӣ)
Камбудиҳо Баланд (формати бинарӣ, HTTP/2) Паст (формати матнӣ, хароҷот)
Забони тавсифи API Protocol Buffers (.proto) OpenAPI/Swagger
Муқовимати API Ситора, асос ёфта дар Protobuf Камтар сахт
Типкунии маълумот Ситора (муайян дар .proto) Зуҳур (санҷиш дар вақти иҷро)
Генератсияи код Дарунсохт Ниёз ба воситаҳои беруна
Потокӣ Дарунсохт Ниёз ба механизмҳои иловагӣ (масалан, WebSockets)
Хондан Мушкил дар хондан бе .proto Осон барои инсон хондан

gRPC барои ҳамкорӣ байни хизматрасониҳо дар системҳои тақсимшуда, микросервисҳо, интиқоли ҳаҷми калон маълумот, ки иҷроиш ва муқаррароти қатъии API муҳим аст, хеле мувофиқ аст.