Поддержка HTTP/3?

Уже ли Discourse поддерживает HTTP/3?

Я понимаю, что это в первую очередь проблема сети, но если я запускаю Discourse, например, на DigitalOcean, то Docker-контейнер, в котором работает Discourse, должен поддерживать HTTP/3.

Не знаю, но как HTTP/3 может помочь Discourse?

На данный момент нет

2 лайка

Технически HTTP/3 — это просто ещё одна версия протокола HTTP. Поэтому, если кто-то хочет сегодня предоставить свой экземпляр Discourse через HTTP/3, он может сделать это, установив отдельный обратный HTTP-прокси, поддерживающий HTTP/3, перед вашим экземпляром Discourse. Это возможно без изменения образа Docker Discourse.

Я немного предполагаю, поэтому имейте это в виду, но, похоже, что в образе Docker в качестве обратного прокси для Discourse используется Nginx. Я вижу, что Nginx поддерживает HTTP/3 нативно, но на данный момент считает эту реализацию экспериментальной. Возможно, именно поэтому поддержка HTTP/3 в образе Docker пока не реализована?

2 лайка

Да, это экспериментальная функция, но по результатам тестов на других сайтах видно, что она уже достаточно стабильна для проектов, которые сегодня решают перейти на HTTP/3.

Есть ли среди тех, кто поддерживает Docker-образы для Discourse, тот, кто мог бы добавить поддержку HTTP/3 в качестве опциональной функции для заинтересованных проектов?

Очень интересная статья, которая поможет вам понять преимущества Discourse, находится здесь: What Is HTTP/3 and How Does It Differ from HTTP/2? | Gcore

У меня есть общее представление о HTTP/3, и я знаю, как и почему он полезен для WordPress/LAMP, но не понимаю, почему он должен иметь значение для Discourse.

HTTP3 снижает задержку при установлении соединения между сервером и клиентом до 150 мс. Кроме того, он экономит ресурсы сервера, так как установка HTTP-соединения становится более эффективной.

Таким образом, пользователь получит более качественный опыт взаимодействия с сообществом, а оператор сервера — меньшую нагрузку. Это выгодно всем.

К сожалению, пока нет.

Я поддерживаю ветку нашего контейнера, готовую к HTTP/3, с (проверяю заметки) 2019 года; её можно посмотреть здесь: GitHub - discourse/discourse_docker at http3 · GitHub.

Причина, по которой мы не внедрили это широко, заключается в комплексе проблем в экосистеме в целом:

  • Разработка Nginx замедлилась до предела, и они больше не успевают за новыми веб-технологиями, такими как HTTP/3 или Early Hints.

  • Модульная архитектура Nginx позволяла добавить поддержку через модуль, и моя ветка использует модуль Nginx от Cloudflare — quiche. Однако Cloudflare также отказался от Nginx, и этот модуль никогда не считался готовым к промышленному использованию.

  • Я рассматривал возможность перехода на более современный веб-сервер, например Caddy, но такие изменения крайне сложны, когда вы выпускаете ПО для самостоятельного хостинга, которое пользователи будут настраивать под себя.

  • Переход на HAProxy был бы проще продать, но мы используем Nginx для раздачи статических файлов, чего HAProxy не умеет делать.

  • Факт того, что разработчики OpenSSL фактически сорвали разработку QUIC и остановили прогресс всей экосистемы на срок, эквивалентный десятилетию.

Все вышеперечисленное, а также все присущие переходу с TCP на UDP проблемы, которые являются частью этого процесса, означали, что такое изменение было слишком рискованным для нас.

Это очень грустно, учитывая, что за последние 4 года в среднем домохозяйстве большая часть трафика уже использует HTTP/3, поскольку все крупные игроки перешли на него ещё несколько лет назад: YouTube, Amazon, Shopify, Instagram, Twitch.tv и другие. Это ещё больше увеличивает разрыв между крупными технологическими компаниями и небольшими сайтами. Жаль, что нам не удалось стать ранними последователями в этом вопросе, как это было с SPDY, HTTP/2 и Brotli.

Учитывая всё вышесказанное, если вы хотите простое решение «в один клик» для всей этой путаницы, вы можете использовать Cloudflare перед вашим экземпляром Discourse.

12 лайков

Мне жаль это слышать. У меня есть несколько идей для обсуждения. Можем ли мы их обсудить?

  • Я бы рассмотрел возможность установки модуля в Nginx, который поддерживал бы HTTP/3.
  • Я бы написал в сообщество Caddy, упомянув, что ваш Discourse работает на нем, и спросил, могут ли они помочь вам с переходом на Caddy. Это может стать выгодным партнерством :slight_smile: QUIC is not supported - Help - Caddy Community
1 лайк

Самый чистый способ его реализации, который потенциально может стать чем-то, что мы в конечном итоге выпустим, — это добавление нового шаблона, который будет альтернативой web.ssl.template.yml. Назовём его web.ssl2.template.yml.

В этом шаблоне вместо модификации nginx запускается альтернативный веб-сервер, например Caddy, который обрабатывает весь трафик и проксирует его на nginx. Это позволит проводить множество экспериментов, тестировать различные веб-серверы и потенциально может привести к созданию решения, которое станет стандартным для новых установок.

4 лайка

Звучит отлично. Я бы с радостью принял участие в тестировании. Какие следующие шаги?

2 лайка

Выполняем работу :smile:

5 лайков

Другой подход заключался бы в добавлении в образ Docker выделенного HTTP-реверс-прокси для обработки только трафика HTTP/3. Например, можно внедрить, скажем, Envoy Proxy, который поддерживает входной трафик HTTP/3, и настроить его на прослушивание только порта 443/udp для трафика h3, преобразовывая все входящие запросы h3 в h2 или h1.1 и пересылая их экземпляру Nginx.

Это немного хакерское решение, поэтому я не скажу, что это хорошая идея. :slight_smile:

2 лайка

Как бы вы ни решили поступить, я считаю, что HTTP/3 — это хороший шаг, который поможет всей экосистеме. С нетерпением жду следующих шагов.

[Раскрытие: с января я являюсь менеджером сообщества Фонда OpenSSL].

Как оказалось, OpenSSL 3.5 запланирован к выпуску в апреле с поддержкой QUIC-сервера. Также существует демонстрация HTTP/3-сервера, использующего QUIC-API OpenSSL вместе с nghttp3.

(Поскольку в указанной ссылке поднимался вопрос управления, хочу отметить, что в прошлом году OpenSSL принял новую структуру управления. Я осторожно оптимистичен и считаю, что это наконец помогло вывести QUIC в релиз.)

Похоже, nginx внедрит QUIC-API OpenSSL. Однако пока никаких указаний на сроки нет.

4 лайка