gRPC — это фреймворк для удалённого вызова процедур (Remote Procedure Call), разработанный Google. Он особенно популярен в микросервисной архитектуре и подходит для высоконагруженных систем.
1. Зачем нужен gRPC?
gRPC ориентирован на производительность и строгую типизацию.
Преимущества:
- Использует Protocol Buffers (protobuf) — бинарный формат
- Транспорт HTTP/2 с поддержкой мультиплексирования
- Генерация кода из .protoфайлов
- Поддержка стриминга и строгой схемы данных
2. gRPC против REST
| Параметр | gRPC | REST (JSON) | 
|---|---|---|
| Формат данных | Protocol Buffers (binary) | JSON (текст) | 
| Транспорт | HTTP/2 | HTTP/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-инфраструктуры.