Обновление тем в реальном времени зависает при высокой активности

Вчера мы внедрили крупное улучшение производительности для сайтов с активной публикацией и большим количеством пользователей — это должно значительно помочь вашему сайту.

Отлично, мы изучим это и, возможно, протестируем.

Что ж, каждая игра — это отдельный случай. Сейчас, в условиях пандемии COVID (пустая арена) и почти случайного расписания игр, поведение аудитории невозможно предсказать или сравнить с историческими данными.

Исходя из этой одной игры, я не могу сказать, что данное изменение принесло нам значительное улучшение.

Первый период прошёл спокойно и нормально, но события во втором вызвали всплеск сообщений и увеличение числа наблюдателей. Около 60% наших пользователей сообщили о зависаниях.

В конфигурации с двумя серверами только web_only показывает высокое использование процессора и среднюю нагрузку.

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

Отчет о прогрессе из приватных обсуждений: опыт был улучшен путем установки DISCOURSE_REJECT_MESSAGE_BUS_QUEUE_SECONDS в значение 4, и мы планируем внести некоторые изменения в ядро для улучшения поведения ограничения частоты запросов в message bus.

Поскольку мы сталкиваемся с некоторыми сходными ситуациями, как и @ljpp, хотя и в значительно меньшей степени (почти исключительно в течение примерно 5 минут вокруг времени окончания матчей), я хотел бы узнать, можно ли внести какие-либо корректировки в порог, при котором срабатывает сообщение о высокой нагрузке и пользователи начинают «выкидываться» из темы… потому что это всегда происходит в рамках одной темы — темы матча.

А также сообщение об ошибке 502 (чисто сообщение nginx), которое мы наблюдаем ещё реже в том же контексте. Я подозреваю, что, вероятно, в конфигурации nginx есть параметры, которые можно было бы оптимизировать, и я понимаю, что это не входит в ваши обязанности, но я с радостью выслушаю любые полезные предложения :laughing:.

Пожалуйста, уточните: у вас возникают зависания (тема не обновляется при появлении новых сообщений) или вы получаете сообщения об ошибке чрезмерной нагрузки?

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

Иногда в таких ситуациях, о которых я сообщал, происходит заморозка тем. Однако в этом случае система также показывает предупреждения об экстремальной нагрузке. Поэтому я не могу точно сказать, что является причиной.

Нас не беспокоит экстремальная нагрузка, если она не выбрасывает пользователей из тем и не прерывает обновление новых сообщений. В таком случае мы предпочли бы, чтобы загрузка происходила медленно (колесо загрузки могло бы вращаться 15 секунд для каждого пользователя при чтении или публикации), чем заморозка или выброс пользователя.

Я должен согласиться. UX при экстремальной нагрузке запутан для конечного пользователя.

  • Сколько у вас одновременных пользователей?
  • Какое оборудование?
  • Ссылка на статистику вашего форума?

@sam

Поскольку мы теперь на платформе CDCK SaaS, я могу оценить это только с точки зрения UX.

В последние пару недель в играх было много активности. «Зависания» практически исчезли после смены платформы, но есть эта флуктуация в том, как обновляются темы, что может всё ещё сбивать с толку некоторых пользователей. Однако аудитория в основном (90%) перестала жаловаться и сосредоточилась на играх, что является хорошим знаком.

Однако есть сценарий, который я могу воспроизвести с довольно высокой (снова 90%) уверенностью. Платформа иногда испытывает проблемы с возобновлением сессии, когда тема игры находится во фоновой вкладке (Android) или при заблокированном экране. Когда я возвращаюсь к активной теме, обычно из-за интересного события в игре, вид темы иногда не обновляется. Я вижу, как аватары пользователей мигают внизу темы, но сообщения не появляются. Чтобы полностью восстановить работу, нужно обновить браузер.

Сценарий воспроизведения не самый простой, так как требуется:

  • Активная тема
  • Активные действия в игре → больше активности в теме
  • Удержание темы во фоновой вкладке браузера или при заблокированном экране.

У нас тоже возникает эта проблема.

Ещё один момент: при переходе к первому непрочитанному сообщению это поведение может повторяться несколько раз (переход к тому же «непрочитанному сообщению» несколько раз, хотя позиция первого непрочитанного сообщения должна была измениться в каждом случае).

Для примера:

  1. Я перехожу к первому непрочитанному сообщению.
  2. Прокручиваю и читаю 100 непрочитанных сообщений.
  3. Затем перехожу к другой теме или на главную страницу…
  4. Через минуту или около того появляется около 30 новых непрочитанных сообщений, но при нажатии на иконку меня снова перебрасывает к позиции из пункта 1 (то есть на 130 сообщений назад, а не просто к новым 30 непрочитанным).

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

Я бы счёл это успехом.

Можете ли вы предоставить воспроизведение этого на meta? Скорее всего нет, так как для этого требуется большое количество активных пользователей, находящихся в режиме ожидания в одной и той же теме одновременно?

Моя текущая мысль заключается в том, что нам следует создать функцию живого чата и инициализировать её по требованию, когда у вас есть…

  • много пользователей

  • в одной и той же теме

  • одновременно

  • тогда, и только тогда, создать оверлей окна живого чата и настоятельно предлагать пользователям использовать его вместо ответов, возможно, даже отключить возможность отвечать на тему с

    :loudspeaker: Привет, похоже, что вы на самом деле хотели чат.. вот он, приятного времяпрепровождения! :speech_balloon:

Да, я понимаю, о чём ты, но это так ограничено этими случаями, что, думаю, не стоит того. Обычно у нас такие матчи бывают раз или два в неделю, и в основном в 5-минутный период сразу после окончания матча. Но я на самом деле несколько раз думал об этом (что было бы здорово иметь функцию временного чата или переключение на эти 90-минутные периоды футбольного матча). :laughing:

Всё же, я попробую воспроизвести это в один из дней, записав экран на некоторое время.

Наш инстанс начал выдавать ошибки 429 с момента начала плей-офф. @staff, вероятно, сможет увидеть их в логах за последние 3,5 часа, а их станет ещё больше, когда будет забит решающий гол (на момент написания этого сообщения игра уже перешла во второе овертайм).

В любом случае, если вы всё ещё ведёте логирование и трассировку, то возможностей осталось немного, так как финал и последующее межсезонье уже близко.

Я просто хотел добавить своё имя в эту тему, чтобы следить за обсуждениями. Мы — новый форум по гимнастике. Вчера во время отборочных соревнований США по олимпийским играм мы столкнулись с описанным выше, а также с «зависанием». Вот ссылка на тему…

https://gymnaverse.com/t/us-wag-olympic-trials-night-2-live-discussion/1092

Вчера у нас было 4 единорога.

Я увеличил конфигурацию сервера до 4 виртуальных ядер Intel и 8 ГБ оперативной памяти в Digital Ocean и установил следующие параметры…

unicorn_workers: 8
db_shared_buffers: “2GB”

Мы ожидаем значительно более высокий трафик во время Олимпийских игр. Что ещё можно сделать для оптимизации сервера под «чат-подобный» трафик во время соревнований?

Если у вас в одной теме одновременно находятся сотни пользователей, и вы используете Discourse как чат, и это мероприятие ограничено по времени, я бы рекомендовал временно увеличить мощность сервера.

Более крупный тариф Premium AMD от Digital Ocean на 16 дней проведения Олимпийских игр обошелся бы в 54,85 доллара США, и этого должно быть более чем достаточно для сообщества вашего размера.

У меня в файле app.yml нет этих строк. Мне просто их добавить?

Да. Добавьте их в секцию env.

Если этот вопрос всё ещё в поле зрения сотрудников, наш запуск состоится сегодня в 18:30 (UTC+3) и снова завтра в то же время.

После двух сезонов, испорченных COVID, ожидания очень высоки, поэтому я ожидаю резких всплесков трафика на tappara.co

@ljpp
Какова ваша текущая ситуация? Помог ли вам Redis 6?

Мы теперь на CDCK SaaS, поэтому предупредили персонал. Мы своего рода испытательный полигон в этом вопросе.