Ответ
gRPC оптимален для:
- Высокопроизводительных микросервисов — бинарный протокол (Protobuf) обеспечивает низкую латентность и высокую пропускную способность по сравнению с JSON/REST.
- Стриминга данных — поддерживает однонаправленные и двунаправленные потоки (streaming RPC).
- Полиглотных сред — генерация строго типизированного клиентского и серверного кода из
.proto-файлов для многих языков. - Внутреннего межсервисного взаимодействия в Cloud Native-архитектурах (Kubernetes, service mesh).
Пример определения сервиса (service.proto):
syntax = "proto3";
service UserService {
rpc GetUser (GetUserRequest) returns (UserResponse);
rpc CreateUsers (stream CreateUserRequest) returns (stream UserResponse); // Потоковый метод
}
message GetUserRequest {
int32 user_id = 1;
}
message UserResponse {
int32 id = 1;
string name = 2;
string email = 3;
}
Когда gRPC может быть не лучшим выбором:
- Публичные API для веб- или мобильных клиентов — требуется gRPC-Web, поддержка менее универсальна, чем REST/JSON.
- Проекты, где важна простота отладки — бинарный трафик сложнее читать без инструментов.
- Ограниченная инфраструктура — может требовать поддержки HTTP/2 и более сложной балансировки.