Есть ли какие-либо преимущества в производительности для gRP C по сравнению с JSON по сравнению с HTTP / 2, кроме размера? - PullRequest
0 голосов
/ 24 февраля 2020

Я читал, что gRP C более производительный, чем традиционные HTTP API, благодаря более компактной сериализации с использованием буферов протокола. Другое утверждение о производительности заключается в том, что в отличие от API HTTP / 1.1 JSON он поддерживает конвейерную обработку.

Как я сейчас понимаю, конвейеризация нескольких соединений через одно соединение HTTP выполняется HTTP / 2, а не gRP C. Таким образом, кроме более эффективного формата сериализации данных, есть ли на самом деле выигрыш в производительности для gRP C по сравнению с JSON по сравнению с HTTP / 2?

1 Ответ

0 голосов
/ 27 февраля 2020

Здесь есть несколько аспектов.

Протокол: HTTP / 1.1 против HTTP / 2

Есть много улучшений в HTTP / 2 по сравнению с HTTP / 1.1, но есть и недостатки для некоторых случаи использования. Некоторые примеры улучшений:

  • HTTP / 2 - это двоичный протокол, тогда как HTTP / 1.1 - это текстовый протокол
  • HTTP / 2 может повторно использовать TCP-соединение для нескольких запросов, отправленных разным конечные точки, но к тому же серверу.
  • HTTP / 2 имеет улучшенные функции сжатия заголовков с HPACK . Это полезно, например, если вы отправляете один и тот же Authorization: Bearer <JWT-token> в последовательных запросах API.

Формат полезной нагрузки: JSON против буферов протокола

Это может повлиять на полезную нагрузку размер , но сериализация и десериализация производительность, вероятно, важнее. Другим важным аспектом является инструментальные средства и производительность разработчика.

Протоколные буферы, используемые gRP C, являются , а не единственным эффективным двоичным форматом полезной нагрузки. Существует много альтернатив, например, FlatBuffers , формат с нулевым копированием, разработанный после опыта работы с буферами протокола. Другой двоичный формат, в основном для меньшей полезной нагрузки (не для производительности сериализации) - Avro . Формат Avro может иметь преимущество в расширяемости формата полезной нагрузки (см., Например, Разработка приложений с интенсивным использованием данных ).

См., Например, JSON против буферов протокола против FlatBuffers для сравнения.

gRP C

gRP C - более высокая абстракция протокола, чем просто использование HTTP / 2. Меньше деталей оставлено на усмотрение разработчика. В целом, выбор HTTP / 2 + JSON против gRP C имеет много аспектов, все зависит от того, что является наиболее важным аспектом для вашего варианта использования.

...