Насколько серьёзно сообщение «сайт перегружен, поиск отключён, попробуйте позже»

Пользователи сообщают об этом предупреждении. Появляется нечасто, но его замечают. Можно ли предположить, что здесь ничего делать не нужно и ситуация не так серьёзна, как кажется? «Экстремальная нагрузка» звучит как огромная проблема. Но она исчезает почти мгновенно, и поиск снова работает.

Буду благодарен за рекомендации по шагам диагностики. Спасибо! :seedling:

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

Я не совсем уверен, что это требует устранения неполадок. Но, возможно, это можно было бы обработать по-другому?

https://review.discourse.org/t/feature-when-under-extreme-load-disable-search/4538/3

Вам стоит беспокоиться. Я бы посмотрел отчет веб-краулера в административной панели.

Это сработает, когда ваши веб-запросы будут поступать быстрее, чем ваш сервер может их обработать.

Например, если у вас есть 4 юнита (unicorns) и в среднем требуется 200 мс для полной обработки запроса, ваша пропускная способность составляет 20 запросов в секунду.

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

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

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

Добавьте пользовательский агент (user-agent) вредоносного краулера в чёрный список в настройках сайта. В наши дни в интернете очень много действительно плохих краулеров.

Хм, всего 1800 просмотров страниц за 24 часа от краулера не должны создавать столько дополнительной нагрузки на ваш сервер. Возможно, стоит открыть лог доступа и просто понаблюдать за входящими запросами в момент возникновения проблемы — это может указать на реальную причину. Возможно, кто-то пытается взломать вас или обрушить ваш API запросами.

Только что получил отчёт о ещё одном похожем уведомлении. Мы проводим сессию вопросов и ответов (AMA), и в форуме сейчас читает и пишет больше людей, чем обычно, но я не уверен, что это экстремальная нагрузка. Возможно, какой-то плагин, например Discourse Who's Online, создаёт дополнительную нагрузку?

Спасибо! Сейчас займусь этим.

Есть ли способ отключить их в настройках администратора и просто дать пользователям подождать, если сайт начинает работать медленно? Мне кажется, наш сайт всё ещё не особенно загружен.

Если производительность упадёт до уровня тайм-аутов, это будет казаться не просто медленной работой, а полной неработоспособностью.

Игнорировать эти предупреждения — определённо плохая идея!

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

У меня спортивный форум, и это обычно происходит, когда люди одновременно комментируют одну тему о конкретном матче. Есть ли какое-то руководство или помощь, чтобы проверить логи или сервер, чтобы убедиться, что всё работает нормально? До последних нескольких недель такой проблемы не было.

Как ты думаешь, мы могли регрессировать в производительности публикации для авторизованных пользователей, @sam?

Я точно вижу N+1 запрос на мета-странице, который нужно срочно исправить.

Я создам задачи, чтобы это устранить. Тем не менее, когда сайт перегружен, администраторы могут изменить два параметра.

  1. Вы можете выделить инстансу больше ресурсов (больше памяти для PostgreSQL или больше воркеров Unicorn).

  2. Вы можете настроить порог анонимности согласно:

DISCOURSE_FORCE_ANONYMOUS_MIN_QUEUE_SECONDS и DISCOURSE_FORCE_ANONYMOUS_MIN_PER_10_SECONDS

Я исправил одну проблему N+1 в плагине discourse-voting здесь:

Посмотрю, не бросится ли в глаза что-то ещё.

Здесь обнаружен ещё один N+2:

Посмотрим, не проявится ли что-то ещё.

Вопрос: Что такое «N+1»? Хотя я разработчик (Java), мне кажется, я никогда раньше не встречал этот термин.

Вот статья (более или менее связанная с Java), которая объясняет эту проблему: