Должен ли я передавать большие наборы данных через gRPC без разбиения на фрагменты вручную? - PullRequest
0 голосов
/ 17 октября 2019

Я хочу использовать gRPC для предоставления интерфейса для двунаправленной передачи больших наборов данных (~ 100 МБ) между двумя службами. Поскольку gRPC по умолчанию устанавливает ограничение размера сообщения 4 МБ, кажется, что предпочтительным способом сделать это является ручное кодирование потоковых чанков и повторная сборка их на принимающей стороне [ 1 ] [ 2 ].

Тем не менее, gRPC также позволяет увеличить ограничение размера сообщения с помощью grpc.max_receive_message_length и grpc.max_send_message_length, что позволяет напрямую передавать сообщения размером до ~ 2 ГБ без чанкирования или потоковой передачи вручную. Быстрое тестирование показывает, что этот более простой подход одинаково хорошо работает с точки зрения производительности и пропускной способности, что делает его более желательным для этого варианта использования. Предположим, что весь набор данных необходим в памяти.

Является ли один из этих подходов по своей природе лучше другого? Существуют ли потенциальные побочные эффекты более простого не разделенного на части подхода? Могу ли я рассчитывать на то, что MTU-зависимая фрагментация на нижних уровнях будет достаточной, чтобы избежать задержки в сети и других помех?


Ссылки:

  1. Пропуск больших сообщений сgRPC
  2. Отправка файлов через gRPC

1 Ответ

1 голос
/ 17 октября 2019

Ограничение в 4 МБ защищает клиентов / серверы, которые не думали об ограничениях размера сообщений. gRPC сам по себе подходит для того, чтобы подняться намного выше (100 МБ), но большинство приложений могут быть атакованы тривиально или случайно выйти из памяти, позволяя получать сообщения такого размера.

Если вы хотите получить 100Сообщение МБ все сразу, затем увеличение лимита - это нормально.

...