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-инфраструктуры.