Каковы недостатки использования HTTP-конвейеризации?

Сессия WWDC 2012. 706 - Рекомендации по работе с сетями объясняют конвейеризацию HTTP.

  • По умолчанию это отключено на iOS
  • В своем выступлении он описал это как огромный выигрыш в производительности.

Почему вы не хотите его использовать?

конвейерная

1 ответ

Решение

Ошибки реализации

Чтобы конвейер работал, ответы должны возвращаться в том порядке, в котором они были запрошены. Реализация простого сервера может просто отправить ответ, как только он будет рассчитан. Если несколько запросов отправляются параллельно, и первый запрос обрабатывается дольше (например, обработка большего изображения), то ответы будут не в порядке.

Это проблема для клиента, так как HTTP является протоколом без сохранения состояния, у клиента нет способа сопоставить запросы с ответами. Это зависит от порядка возврата ответов.

Сервер ДОЛЖЕН отправить свои ответы на эти запросы в том же порядке, в котором они были получены.

Проблемы с производительностью

Даже если сервер правильно поддерживает конвейерную обработку, могут возникнуть проблемы с производительностью, поскольку все последующие запросы должны ждать завершения первого (блокировка заголовка строки).

  • В этой статье рассказывается о потере производительности при некоторых обстоятельствах и возможности атаки типа "отказ в обслуживании".

  • Эта статья также предполагает, что конвейерная обработка не является огромной победой.

  • WWDC 2015 - Сеть с NSURLSession действительно хорошо объясняет главу блокировки линии. (Решение состоит в том, чтобы перейти на HTTP 2, который поддерживает приоритеты)

Глава блокировки линии

Итак, в итоге проблемы с конвейерной передачей HTTP:

  • Некоторые серверы и большинство прокси не поддерживают это. (Возможно, из-за проблем безопасности / надежности / или производительности)
  • Некоторые серверы поддерживают его неправильно, и это может привести к ошибкам клиента.
  • Это не обязательно выигрыш в производительности.
  • Восприимчив к блокировке линии
Другие вопросы по тегам