Quando um site requer login, não mostre o banner "site sobrecarregado", pois não há acesso anônimo

De vez em quando, recebemos essa notificação no topo do nosso fórum:

Devido à carga extrema, isso está sendo temporariamente exibido para todos da mesma forma que um usuário desconectado veria.

Tenho algumas observações e perguntas sobre isso:

Primeiro, o servidor não parece estar sob carga extrema. A última vez que vi o aviso, o monitoramento do servidor mostrou que a carga da CPU atingiu um pico de 24%, o uso de memória estava logo acima de 50%, etc. Até onde sei, não houve nenhuma diminuição perceptível no desempenho para os usuários. Então, pergunto: qual é o limite para esse aviso e ele está razoavelmente calibrado?

Segundo, e mais importante para mim, o fórum que administro é totalmente privado. Usuários desconectados não podem ver nada, exceto a página de login. Portanto, a notificação está incorreta, ou seja, a página não é exibida da mesma forma que um usuário desconectado veria, porque tal usuário não conseguiria vê-la de forma alguma. Isso já causou confusão algumas vezes, pois foi interpretado como se as postagens do nosso fórum privado estivessem de repente disponíveis para usuários não autorizados. Eu mesmo fiquei bastante alarmado na primeira vez que vi isso e, de vez em quando, recebo perguntas dos usuários sobre o assunto.

Talvez esse aviso devesse ser reescrito? Ou alterado/desativado para fóruns privados?

É possível desativá-lo para um fórum específico?

3 curtidas

Olá @meriksson

FYI. Este aviso é acionado por meio de um cookie:

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

Referência:

A pesquisa por este cookie no GitHub resulta em:

Onde force_anon é encontrado aqui:

 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

Referência:

Veja também:

 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 curtidas

Esse é um bom ponto, @sam. Em um site totalmente privado, o texto será confuso… e talvez até incorreto.

4 curtidas

Este aviso aparece quando o NGINX encaminha uma solicitação para o unicorn (o servidor de aplicativos) e notamos um grande atraso.

Exemplo: (exagerado)

  • NGINX diz … ei, aqui está uma solicitação que recebi de um usuário às 13h
  • Passa 1 hora
  • O servidor de aplicativos recebe a solicitação … uau, levou 1 hora para eu recebê-la… devo estar sobrecarregado.

Você pode controlar o limite com essas duas configurações:

DISCOURSE_FORCE_ANONYMOUS_MIN_QUEUE_SECONDS e DISCOURSE_FORCE_ANONYMOUS_MIN_PER_10_SECONDS

Mais importante: se seu servidor tiver muita capacidade extra, adicione mais unicórnios aumentando UNICORN_WORKERS.

Se um site exigir login, então acho que devemos mudar o aviso para algo mais severo (tela azul, você está limitado em taxa).

Esta é a primeira vez que ouço falar de um site que exige login atingindo esse limite de taxa. Concordo que deveríamos fazer um pouco melhor aqui.

4 curtidas

Vou aguardar aqui mais uma reclamação independente.

O melhor que podemos fazer sob carga extrema, para sites que “exigem login”, é simplesmente exibir uma tela azul dizendo “site sobrecarregado, tente novamente mais tarde”. Gostaria de esperar um pouco antes de implementar isso e ver mais uma reclamação.

3 curtidas

Isso está acontecendo em uma comunidade privada muito pequena do Discourse que eu visito frequentemente. Ela me deu um erro 502 bad gateway do nginx, e depois não carregou de forma alguma. Eventualmente, carregou, mas mostrou a mensagem de banner mencionada acima.

1 curtida

Acho que é seguro adicionar isso agora.. se um site que exige login estiver sobrecarregado, adicionar mais usuários não vai melhorar as coisas para eles.

3 curtidas

Claro… agendando para nosso próximo lançamento

3 curtidas