protobuf vs gRPC

Я пытаюсь понять protobuf и gRPC, и как я могу использовать оба. Не могли бы вы помочь мне понять следующее:

  • Учитывая модель OSI, что такое, например, Protobuf на уровне 4?
  • Думая через передачу сообщений, как происходит "поток", что gRPC делает то, что протобуф промахивается?
  • Если отправитель использует protobuf, может ли сервер использовать gRPC или добавить gRPC то, что может предоставить только клиент gRPC?
  • Если gRPC может сделать синхронизацию и асинхронную связь возможной, Protobuf предназначен только для сортировки и, следовательно, не имеет ничего общего с состоянием - true или false?
  • Могу ли я использовать gRPC во внешнем приложении, взаимодействующем вместо REST или GraphQL?

Я уже знаю - или предполагаю, что я это делаю:

Protobuf

  • Двоичный протокол обмена данными
  • Разработанный Google
  • Использует сгенерированное "Struct", как описание на клиенте и сервере, на сообщение un- / -marshall

КПГР

  • Использует protobuf (v3)
  • Опять от Google
  • Рамка для вызовов RPC
  • Также использует HTTP/2
  • Возможна синхронизация и асинхронная связь

Я снова предполагаю, что это простой вопрос для тех, кто уже использует эту технологию. Я все равно буду благодарить вас за терпение и помощь. Я также был бы очень благодарен за любое сетевое погружение технологий.

Ответ 1

Буферы протокола - это (есть?) Язык определения интерфейса и библиотека сериализации:

  • Вы определяете свои структуры данных в его IDL, т.е. описываете объекты данных, которые хотите использовать.
  • Он предоставляет процедуры для перевода ваших объектов данных в двоичный файл и из него, например, для записи/чтения данных с диска.

gRPC использует тот же IDL, но добавляет синтаксис "rpc", который позволяет вам определять сигнатуры методов удаленного вызова процедур, используя структуры данных Protobuf в качестве типов данных:

  • Вы определяете свои структуры данных
  • Вы добавляете свои определения метода rpc
  • Он предоставляет код для обслуживания и вызова сигнатур методов по сети.
  • Вы все еще можете сериализовать объекты данных вручную с помощью Protobuf, если вам нужно

В ответ на вопросы:

  1. gRPC работает на уровнях 5, 6 и 7. Protobuf работает на уровне 6.
  2. Когда вы говорите "передача сообщений", Protobuf не занимается самой передачей. Это работает только на любом конце любой передачи данных, превращая байты в объекты
  3. Использование gRPC по умолчанию означает, что вы используете Protobuf. Вы можете написать свой собственный клиент, который использует Protobuf, но не gRPC для взаимодействия с gRPC, или подключить другие сериализаторы к gRPC - но использование gRPC будет проще
  4. Правда
  5. Да, ты можешь

Ответ 2

На самом деле, gRPC и Protobuf - это две совершенно разные вещи. Позвольте мне упростить:

  • gRPC управляет взаимодействием клиента и сервера (так же, как веб-клиент/сервер с REST API)
  • Protobuf - это просто инструмент сериализации/десериализации (как и JSON)

У gRPC есть две стороны: сторона сервера и сторона клиента, которая может набирать сервер. Сервер предоставляет RPC (то есть функции, которые вы можете вызывать удаленно). И у вас есть множество вариантов: вы можете защитить связь (используя TLS), добавить уровень аутентификации (используя перехватчики),...

Вы можете использовать protobuf внутри любой программы, которая не нуждается в клиент-сервере. Если вам нужно обмениваться данными и вы хотите, чтобы они были строго типизированы, то protobuf - хороший вариант (быстрый и надежный).

Тем не менее, вы можете комбинировать как для создания хорошей системы клиент-сервер: gRPC будет вашим клиент-серверным кодом, так и протобуфировать ваш протокол данных.

PS: я написал эту статью, чтобы показать, как можно шаг за шагом построить клиент/сервер с gRPC и protobuf, используя Go.

Ответ 3

grpc - это сборка фреймворка от google, и она используется в производственных проектах самого google, а #HyperledgerFabric построен с использованием grpc, есть много приложений с открытым исходным кодом, созданных с использованием grpc

Protobuff - это представление данных, подобное json, это также от Google, на самом деле в их производственных проектах генерируется несколько тысяч прототипов

.КПГР

  • gRPC - это фреймворк с открытым исходным кодом, разработанный Google
  • Это позволяет нам создавать запросы и Ответ для RPC и обработка остатка с помощью структуры
  • REST ориентирован на CRUD, но grpc ориентирован на API (без ограничений)
  • Сборка поверх HTTP/2
  • Обеспечивает >>>>> Аутентификацию, балансировку нагрузки, мониторинг, ведение журнала
  • [HTTP/2]
    • HTTP1.1 выпущен в 1997 году очень давно
    • HTTP1 открывает новое TCP-соединение с сервером при каждом запросе
    • Он не сжимает заголовки
    • НЕТ толчок сервера, он просто работает с Req, Res
    • HTTP2 выпущен в 2015 году (SPDY)
    • Поддерживает мультиплексирование
    • клиент & сервер может передавать сообщения параллельно через одно и то же TCP-соединение
    • Значительно уменьшает задержку
    • HTTP2 поддерживает сжатие заголовков
    • HTTP2 является двоичным
      • Прото-бафф является двоичным, поэтому он отлично подходит для HTTP2
  • [типы]
    • Одинарный
    • потоковая передача клиента
    • сервер потоковой передачи
    • Двунаправленная потоковая передача
    • Серверы grpc по умолчанию являются асинхронными
    • клиенты grpc могут быть синхронизированы или асинхронны

protobuff

  • Буферы протокола не зависят от языка
  • Разбор протокольных буферов (двоичный формат) требует меньше ресурсов процессора
  • [Именование]
    • Используйте верблюжий чемодан для имен сообщений
    • underscore_seperated для полей
    • Используйте camelcase для Enums и CAPITAL_WITH_UNDERSCORE для имен значений
  • [Комментарии]
    • Поддержка//
    • Поддержка/* */
  • [Преимущества]
    • Данные полностью набраны
    • Данные полностью сжаты (меньше загрузка ЦП)
    • Схема (сообщение) необходима для генерации кода и считывания кода
    • Документация может быть встроена в схему
    • Данные могут быть прочитаны на любом языке
    • Схема может развиваться в любое время безопасным способом
    • быстрее чем XML
    • код генерируется для вас автоматически
    • Google изобрел протобафф, они используют 48000 протобуф-сообщений и 12000.proto файлы
    • Множество платформ RPC, включая grpc, используют буфер протокола для обмена данными.