Ответ
gRPC — это современная высокопроизводительная RPC (Remote Procedure Call) платформа с открытым исходным кодом, разработанная Google.
Ключевые принципы и особенности:
-
Использует HTTP/2: В отличие от REST поверх HTTP/1.1, gRPC работает на HTTP/2, что дает:
- Мультиплексирование множества запросов в одном TCP-соединении.
- Бинарный протокол (более компактный и быстрый, чем текстовый JSON).
- Двунаправленная потоковая передача.
-
Использует Protocol Buffers (protobuf) по умолчанию:
- Язык описания интерфейсов (IDL): Сервисы и структуры сообщений определяются в
.proto-файлах. - Эффективная бинарная сериализация: Protobuf намного быстрее и меньше по размеру, чем JSON/XML.
- Генерация кода: Утилита
protocгенерирует клиентский и серверный код на многих языках из.proto-файла.
- Язык описания интерфейсов (IDL): Сервисы и структуры сообщений определяются в
-
Четыре типа вызовов:
- Унарный (Unary): Один запрос — один ответ.
- Серверный поток (Server streaming): Один запрос — поток ответов.
- Клиентский поток (Client streaming): Поток запросов — один ответ.
- Двунаправленный поток (Bidirectional streaming): Поток запросов — поток ответов.
Пример .proto-файла:
syntax = "proto3";
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
gRPC идеально подходит для внутренней коммуникации между микросервисами, где важны низкая задержка и высокая пропускная способность.
Ответ 18+ 🔞
Давай разберём эту вашу модульную хуйню под названием gRPC, а то смотрю, народ путается в простых вещах, как мартышка в апельсинах.
В общем, представь себе, что у тебя есть два сервиса. Один, допустим, сидит на одном сервере и орёт: «Эй, дай мне данные пользователя!». А другой, на другом конце света, в облаке каком-нибудь, должен ему эти данные выдать. Раньше для этого использовали REST — это как общаться телеграммами через почтальона Печкина: написал JSON, отправил, ждёшь, пока он дойдёт, прочитают, ответ напишут, обратно пришлют. Медленно, блядь, и бумаги (то бишь, данных) дохуя.
А тут пришли ребята из Google, почесали репу и выкатили gRPC. Это как если бы твои сервисы общались не письмами, а по сверхсекретной, ебанной, прямой видеосвязи.
Вот на чём весь сыр-бор горит:
-
Он ездит на HTTP/2. Это не тот старый, раздолбанный HTTP/1.1, который один запрос — один ответ, как в очереди за колбасой. HTTP/2 — это восьмиполосная магистраль. Можно кучу запросов в одну трубу запихнуть (мультиплексирование), общаться бинарными данными (не текстом, а сжатыми байтиками, что быстрее), и главное — можно стримить туда-сюда данные, как водопад. Один сказал — много ответов получил, или много сказал — один итоговый ответ.
-
Любит он Protobuf. Это вообще, блядь, гениальная вещь. Вместо того чтобы городить эти бесконечные JSON'ы с кавычками и запятыми, ты описываешь структуру данных один раз на специальном языке, в файле
.proto. Выглядит это чётко и ясно, как инструкция к стиралке.Вот смотри, пример, как ты описываешь, что хочешь поздороваться:
syntax = "proto3"; service Greeter { rpc SayHello (HelloRequest) returns (HelloReply); } message HelloRequest { string name = 1; } message HelloReply { string message = 1; }Потом берёшь волшебную утилиту
protoc, тычешь в неё этот файл и говоришь: «На, сгенерируй мне код на Go/Python/Java (нужное подчеркнуть)». И она тебе выдает готовые классы и функции для клиента и сервера. Никакого ручного разбора JSON'ов! Всё строго, по контракту. Объебешься — код не скомпилируется. Красота! -
А сценарии общения у него — вообще песня. Их аж четыре вида:
- Простой (Unary): Спросил — получил ответ. Старая добрая схема.
- Стрим от сервера (Server streaming): Ты один раз спросил: «Ну что там?», а сервер тебе в ответ начинает лить поток данных, как из бочки: «Держи! И это держи! И вот это ещё!».
- Стрим от клиента (Client streaming): Это когда ты долго и нудно загружаешь на сервер кучу данных (например, большой файл кусками), а в конце он тебе говорит: «Ок, всё принял, отъебись».
- Двусторонний стрим (Bidirectional streaming): Это полный пиздец и мощь одновременно. Оба могут говорить и слушать одновременно, как в нормальном разговоре. Идеально для чатов, онлайн-игр или всяких реальных-time дашбордов.
Итог: gRPC — это овердохуища быстрый и эффективный способ для твоих микросервисов пообщаться между собой по внутренней сети. Когда тебе важна скорость, компактность данных и строгий контракт — это твой выбор. Для внешнего API, где нужна человекочитаемость и простота, может, и REST с JSON'ом пойдёт. Но для серьёзных внутренних дел — тут даже думать нечего.