Использование Message bus в кастомном клиенте на AWS. Нужна небольшая помощь :)

Прежде всего, я полностью осведомлён о рекомендуемой конфигурации Discourse, но, к сожалению, в данный момент это вне моего контроля.

Теперь о проблеме. У моего клиента есть кастомный фронтенд на React, который использует Discourse в качестве бэкенда. Я унаследовал проект в плачевном состоянии: предыдущие разработчики пытались втиснуть ActionCable в Discourse. Учитывая, что в Discourse для функций реального времени уже используется Message Bus, я подумал, что нам стоит попробовать использовать его.

Локально у нас всё получилось. Message Bus «просто работает»: мы смогли подписаться на все каналы Message Bus по умолчанию в Discourse, а также создать свои собственные.

Проблема возникает в наших удалённых окружениях. Мы разворачиваем приложение на экземплярах AWS EC2, которые находятся за балансировщиком нагрузки ALB, и настраиваем окружение самостоятельно. Мне бы очень хотелось пойти по пути использования Docker, но у клиента просто не было бюджета на то, чтобы потратить время на изменения на этом этапе проекта :sadpanda:

Основной симптом — Message Bus работает ужасно медленно. Ничего не происходит в реальном времени, но мы знаем, что конфигурация Message Bus в порядке, поскольку она отлично работает локально. Значит, проблема в чём-то другом.

Я использую практически стандартную конфигурацию nginx для Discourse. Сначала я думал, что проблема именно в этом, так как в конфигурации nginx для Message Bus чего-то не хватало, но после её добавления это, похоже, не решило наши проблемы.

После просмотра вкладки «Network» в Chrome стало ясно, что проблема есть: наши запросы /poll ждут 25 секунд, а затем скачивают контент за миллисекунды. Я знаю, что должно быть наоборот, как это происходит при локальном запуске или на meta.

Я понимаю, что это может быть также проблемой AWS ALB, но я совершенно не знаю, с чего начать. Не мог бы @sam подсказать, в чём может быть проблема, или направить меня в нужном направлении?

Как всегда, любая помощь будет крайне оценена!

У нас работает шина сообщений с ALB, причём Meta размещена на AWS.

Мне кажется, что где-то в вашем стеке включена буферизация запросов, из-за чего они удерживаются длительное время.

Скорее всего, параметр proxy_buffering в NGINX установлен в on, а должен быть off.

Привет, @sam

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

Однако у меня сложилось впечатление, что сообщение должно обрабатываться сразу после его получения. Наше приложение всё ещё, похоже, ждёт завершения опроса, прежде чем обрабатывать полученные сообщения.

У нас включены длинный опрос (long polling) и чанковое кодирование. Как уже упоминалось, в качестве бэкенда мы используем Discourse, поэтому предполагаем, что настраивать там ничего не нужно.

Есть какие-то идеи? Спасибо.