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): Език за описание на данни, който позволява структуриране на данните и генериране на код за сериализация и десериализация на различни езици.
  • 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.