Что такое gRPC?

Ответ

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

Основные принципы:

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

Пример определения сервиса (service.proto):

syntax = "proto3";

service UserService {
  rpc GetUser (GetUserRequest) returns (User);
  rpc CreateUsers (stream User) returns (CreateUsersResponse); // Поток от клиента
}

message GetUserRequest {
  string user_id = 1;
}

message User {
  string id = 1;
  string name = 2;
  string email = 3;
}

Преимущества: Низкие задержки, высокая пропускная способность, автоматическая генерация клиентского и серверного кода. Область применения: Микросервисные архитектуры, межсервисное взаимодействие, где важна производительность.

Ответ 18+ 🔞

Да ты посмотри, что эти гугловские умники выдумали! gRPC, блядь. Это ж не просто какая-то там хуйня, а целый фреймворк, чтобы одни сервисы могли с другими на высокой скорости, как угорелые, болтать. Удалённый вызов процедур, ёпта, только не на соплях, а на стероидах.

В чём, сука, соль-перец:

  • На чём ездит: Всё это безобразие мчится на HTTP/2. Это тебе не старый одноколейный HTTP/1, где запросы в очередь выстраиваются. Тут всё мультиплексируется, фреймы бинарные, заголовки сжатые — красота, а не транспорт, в рот меня чих-пых!
  • Контракты и упаковка: А самое главное — никакой этой ерунды с JSON, где половина данных — это кавычки и запятые. Тут всё строго по-взрослому. Пишешь ты на специальном языке, в файлике .proto, что и как должно выглядеть. А потом волшебный компилятор Protocol Buffers берёт и на всех языках программирования тебе код генерит! И данные сериализуются в бинарник, компактный и быстрый. Никакого лишнего говна.
  • Потоки, мать их: И не просто "спросил-ответил". Можно и так, конечно. А можно целый поток данных от клиента на сервер отправить, или от сервера клиенту, или вообще в обе стороны сразу, как в чате! Это называется серверный, клиентский и двунаправленный стриминг. Мощь, блядь.

Вот, смотри, как контракт описывается (service.proto):

syntax = "proto3";

service UserService {
  rpc GetUser (GetUserRequest) returns (User);
  rpc CreateUsers (stream User) returns (CreateUsersResponse); // Поток от клиента
}

message GetUserRequest {
  string user_id = 1;
}

message User {
  string id = 1;
  string name = 2;
  string email = 3;
}

Видишь? Красота. Написал раз — и у тебя уже есть готовые структуры на Java, Go, Python, C#... Чего душа пожелает. Серверную и клиентскую заглушки тоже сгенерирует. Сиди и бизнес-логику пиши, а не эту ебучую сериализацию с парсингом.

Итог, блядь: Задержки — низкие, пропускная способность — овердохуищная, код пишется в разы быстрее. Поэтому эту технологию и любят в микросервисных архитектурах, где десятки сервисов друг другу мозги выносят. Там, где производительность на первом месте, а не "ой, давайте на JSON'е сделаем, оно human-readable". Human-readable, блядь... Иди читай, когда у тебя лаг в 100 миллисекунд на каждом чихе.