Цель состоит в том, чтобы представить протокол транспортного и прикладного уровня, который имеет лучшие задержки и пропускную способность сети . В настоящее время приложение использует REST с HTTP / 1.1, и мы наблюдаем высокую задержку. Мне нужно решить эту проблему с задержкой, и я готов использовать gRPC (HTTP / 2) или REST / HTTP2 .
HTTP / 2:
- Мультиплексированный
- Одно TCP-соединение
- Двоичный вместо текстового
- Сжатие заголовка
- Сервер Push
Я осознаю все перечисленные преимущества. Вопрос № 1. Если я использую REST с HTTP / 2 , я уверен, что получу значительное улучшение производительности по сравнению с REST с HTTP / 1.1 , но как это соотносится с gRPC (HTTP / 2) ?
Я также знаю, что gRPC использует прото-буфер, который является лучшим методом двоичной сериализации для передачи структурированных данных по сети. Протобуфер также помогает в разработке языкового независимого подхода. Я согласен с этим, и я могу реализовать ту же функцию в REST, используя graphQL. Но меня беспокоит сериализация: Вопрос № 2: Когда HTTP / 2 реализует эту двоичную функцию , дает ли использование прото-буфера дополнительное преимущество над HTTP / 2?
Вопрос № 3: С точки зрения потоковой передачи, двунаправленных вариантов использования , как gRPC (HTTP / 2) сравнивается с (REST и HTTP / 2)?
В Интернете так много блогов / видео , которые сравнивают gRPC (HTTP / 2) с (REST и HTTP / 1.1), как это . Как было сказано ранее, я хотел бы знать различия, преимущества при сравнении GRPC (HTTP / 2) и (REST с HTTP / 2).
Ответы:
По умолчанию gRPC не быстрее, чем REST через HTTP / 2, но дает вам инструменты, позволяющие сделать это быстрее. Есть некоторые вещи, которые было бы сложно или невозможно сделать с помощью REST.
Как сказал nfirvine, вы увидите большую часть своей производительности только при использовании Protobuf. Хотя вы можете использовать proto с REST, он очень хорошо интегрирован с gRPC. Технически вы можете использовать JSON с gRPC, но большинство людей не хотят платить за производительность после того, как привыкли к protos.
источник
library
ссылку для балансировки нагрузкиЯ ни в коем случае не являюсь экспертом в этом вопросе, и у меня нет данных, подтверждающих это.
«Двоичная функция», о которой вы говорите, - это двоичное представление фреймов HTTP / 2. Само содержимое (полезная нагрузка JSON) по-прежнему будет иметь формат UTF-8. Вы можете сжать этот JSON и установить
Content-Encoding: gzip
, как HTTP / 1.Но gRPC также выполняет сжатие gzip. Итак, на самом деле, мы говорим о разнице между сжатыми gzip JSON и сжатыми gzip протобуфами.
Как вы понимаете, сжатые протобуфы должны превосходить сжатый JSON во всех отношениях, иначе протобуфы не достигли своей цели.
Помимо повсеместности JSON и protobufs, единственный недостаток, который я вижу в использовании protobufs, - это то, что вам нужен .proto для их декодирования, скажем, в ситуации tcpdump.
источник