gRPC — это фреймворк для удалённого вызова процедур (Remote Procedure Call), разработанный Google. Он особенно популярен в микросервисной архитектуре и подходит для высоконагруженных систем.


1. Зачем нужен gRPC?

gRPC ориентирован на производительность и строгую типизацию.

Преимущества:

  • Использует Protocol Buffers (protobuf) — бинарный формат
  • Транспорт HTTP/2 с поддержкой мультиплексирования
  • Генерация кода из .proto файлов
  • Поддержка стриминга и строгой схемы данных

2. gRPC против REST

ПараметрgRPCREST (JSON)
Формат данныхProtocol Buffers (binary)JSON (текст)
ТранспортHTTP/2HTTP/1.1
ПроизводительностьВысокаяНиже из-за объёма
ИнструментыАвтогенерация кодаВручную
СтримингДвунаправленныйОграниченный

3. Как работает gRPC

Шаг 1: Определим интерфейс в .proto файле

syntax = "proto3";

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply);
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

Шаг 2: Сгенерируем код

protoc --go_out=. --go-grpc_out=. greeter.proto

Шаг 3: Реализуем сервер

// Сервер
func (s *server) SayHello(ctx context.Context, req *pb.HelloRequest) (*pb.HelloReply, error) {
  return &pb.HelloReply{Message: "Hello " + req.Name}, nil
}

4. Когда стоит использовать gRPC

✅ Подходит:

  • Для микросервисов внутри инфраструктуры
  • Когда важна производительность
  • При необходимости двусторонней связи

❌ Не подходит:

  • Для публичных API (браузеры не поддерживают)
  • Для человекочитаемого формата ответа

5. Вывод

gRPC — мощный инструмент, особенно в распределённых системах. Он обеспечивает быструю, строгую и масштабируемую коммуникацию между сервисами. Отличный выбор для production-инфраструктуры.