Я хочу использовать gRPC для предоставления интерфейса для двунаправленной передачи больших наборов данных (~ 100 МБ) между двумя службами. Поскольку gRPC по умолчанию устанавливает ограничение размера сообщения 4 МБ, кажется, что предпочтительным способом сделать это является ручное кодирование потоковых чанков и повторная сборка их на принимающей стороне [ 1 ] [ 2 ].
Тем не менее, gRPC также позволяет увеличить ограничение размера сообщения с помощью grpc.max_receive_message_length
и grpc.max_send_message_length
, что позволяет напрямую передавать сообщения размером до ~ 2 ГБ без чанкирования или потоковой передачи вручную. Быстрое тестирование показывает, что этот более простой подход одинаково хорошо работает с точки зрения производительности и пропускной способности, что делает его более желательным для этого варианта использования. Предположим, что весь набор данных необходим в памяти.
Является ли один из этих подходов по своей природе лучше другого? Существуют ли потенциальные побочные эффекты более простого не разделенного на части подхода? Могу ли я рассчитывать на то, что MTU-зависимая фрагментация на нижних уровнях будет достаточной, чтобы избежать задержки в сети и других помех?
Ссылки:
- Пропуск больших сообщений сgRPC
- Отправка файлов через gRPC