Если сайт требует входа, не показывайте баннер «сайт перегружен», так как анонимный доступ отсутствует

Иногда наверху нашего форума появляется такое уведомление:

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

У меня есть несколько наблюдений и вопросов по этому поводу:

Во-первых, сервер, похоже, не испытывает экстремальной нагрузки. В последний раз, когда я видел это предупреждение, мониторинг сервера показывал, что пиковая загрузка ЦП составляла 24%, использование памяти — чуть выше 50% и так далее. Насколько мне известно, пользователи не заметили никакого снижения производительности. Так что я задаюсь вопросом: какой порог установлен для этого предупреждения и правильно ли он настроен?

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

Возможно, это предупреждение стоит переформулировать? Или изменить/отключить для приватных форумов?

Возможно ли отключить его для конкретного форума?

3 лайка

Привет @meriksson

К сведению. Это уведомление срабатывает через cookie:

if ($.cookie("dosp") === "1") {
        $.removeCookie("dosp", { path: "/" });
        notices.push(
          Notice.create({
            text: I18n.t("forced_anonymous"),
            id: "forced-anonymous"
          })
        );
      }

Ссылка:

Поиск этого cookie на GitHub выдает:

Где force_anon найден здесь:

 def initialize(app, settings = {})
      @app = app
    end

    def call(env)
      helper = Helper.new(env)
      force_anon = false
      if helper.should_force_anonymous?
        force_anon = env["DISCOURSE_FORCE_ANON"] = true
        helper.force_anonymous!
      end

Ссылка:

Также см.:

 MIN_TIME_TO_CHECK = 0.05
 ADP = "action_dispatch.request.parameters"

 def should_force_anonymous?
        if (queue_time = @env['REQUEST_QUEUE_SECONDS']) && get?
          if queue_time > GlobalSetting.force_anonymous_min_queue_seconds
            return check_logged_in_rate_limit!
          elsif queue_time >= MIN_TIME_TO_CHECK
            if !logged_in_anon_limiter.can_perform?
              return check_logged_in_rate_limit!
            end
          end
        end

   false
end
4 лайка

Это верное замечание, @sam. На полностью закрытом сайте такой текст будет запутывающим… и, возможно, неверным.

4 лайка

Это предупреждение появляется, если NGINX отправляет запрос в Unicorn (сервер приложений), и мы замечаем значительную задержку.

Например (с преувеличением):

  • NGINX говорит: «Эй, вот запрос от пользователя, полученный в 13:00».
  • Проходит 1 час.
  • Сервер приложений получает запрос: «Ой, мне потребовался целый час, чтобы его получить… Должно быть, я перегружен».

Вы можете контролировать порог с помощью этих двух настроек:

DISCOURSE_FORCE_ANONYMOUS_MIN_QUEUE_SECONDS и DISCOURSE_FORCE_ANONYMOUS_MIN_PER_10_SECONDS.

Самое главное: если на вашем сервере есть значительный запас мощности, добавьте больше процессов Unicorn, увеличив параметр UNICORN_WORKERS.

Если сайт требует авторизации, то, думаю, нам следует изменить предупреждение на что-то более серьёзное (синий экран, ограничение скорости).

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

4 лайка

Я подожду здесь ещё одну независимую жалобу.

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

3 лайка

Это происходит в очень маленьком частном сообществе Discourse, которое я часто посещаю. Сначала выдал ошибку 502 Bad Gateway от Nginx, затем страница вообще не загружалась. В конце концов она загрузилась, но показало упомянутое выше баннерное сообщение.

1 лайк

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

3 лайка

Конечно… включаем в наш следующий релиз

3 лайка