сегментирование домена http2 без снижения производительности

#cdn #sharding #http2

#cdn #сегментирование #http2

Вопрос:

В большинстве статей рассматривается использование сегментирования домена для снижения производительности, но на самом деле это не совсем так. При определенных условиях одно соединение может быть повторно использовано для разных доменов:

  • они разрешаются на один и тот же IP
  • в случае безопасного соединения один и тот же сертификат должен охватывать оба домена

https://www.rfc-editor.org/rfc/rfc7540#section-9.1.1

Это правильно? Кто-нибудь использует это?

А как насчет CDN? Могу ли я получить какие-либо гарантии, что они направляют пользователя на тот же сервер (IP)?

Ответ №1:

Да, это одно из преимуществ HTTP / 2, которое теоретически позволяет сохранить сегментирование для пользователей HTTP / 1.1 и автоматически отменить сегментирование для пользователей HTTP / 2.

Реальность, как всегда, немного сложнее — в основном из-за проблем с реализацией и серверов, разрешающихся на разные IP-адреса, как вы заявляете. Этому сообщению в блоге уже несколько лет, но оно описывает некоторые проблемы: https://daniel.haxx.se/blog/2016/08/18/http2-connection-coalescing /. Возможно, с тех пор это улучшилось, но, возможно, проблемы все еще существуют. Также должны помочь новые функции, такие как ИСХОДНЫЙ фрейм, но они пока широко не поддерживаются.

Однако я думаю, что стоит пересмотреть предположение о том, что сегментирование действительно полезно для HTTP / 1.1. Затраты на настройку новых подключений (поиск DNS, настройка TCP, подтверждение связи TLS, а затем фактическая отправка HTTP-сообщений) не являются несущественными, и исследования показали, что ограничение браузера на 6 подключений действительно используется, не говоря уже о добавлении дополнительных за счет сегментирования. Конкатенация, спрайтинг и встраивание обычно являются гораздо лучшими вариантами, и их все еще можно использовать для HTTP / 2. Попробуйте это на своем сайте и измерьте — лучший способ убедиться в этом!

Кстати, именно по этим причинам (и безопасности) я менее заинтересован в использовании общих библиотек (например, jquery, bootstrap … и т.д.) с их CDN вместо локального размещения. На мой взгляд, преимущество в производительности пользователя, у которого уже есть кэшированная версия, используемая вашим сайтом, завышено.

При всех этих условиях HTTP /1.1 по-прежнему будет работать без разделенных доменов. Это может (возможно) быть медленнее, но не приведет к сбою. Но большинство пользователей, скорее всего, используют HTTP / 2, так действительно ли стоит добавлять сложности для меньшинства пользователей? Разве это не способ постепенного улучшения вашего сайта для пользователей современных браузеров (и поощрения тех, кто этого не делает, к обновлению)? Для более крупных сайтов (например, Google, Facebook … и т.д.) меньшинство все еще может представлять большое количество пользователей, и сложность того стоит (и у них есть ресурсы и опыт, чтобы справиться с этим). остальным из нас я рекомендую не сегментировать, переходить на новые протоколы, такие как HTTP / 2, когда они станут распространенными (как сейчас!), Но в остальном снижать сложность.