De vez en cuando recibimos esta notificación en la parte superior de nuestro foro:
Debido a una carga extrema, esto se muestra temporalmente a todos como lo vería un usuario sin iniciar sesión.
Tengo algunas observaciones y preguntas al respecto:
En primer lugar, el servidor no parece estar bajo una carga extrema. La última vez que vi la advertencia, el monitoreo de nuestro servidor mostraba que la carga de CPU alcanzó un máximo del 24 %, el uso de memoria estaba ligeramente por encima del 50 %, etc. Hasta donde sé, no ha habido una disminución notable en el rendimiento para los usuarios. Entonces me pregunto: ¿cuál es el umbral para esta advertencia y está razonablemente calibrado?
En segundo lugar, y más importante para mí, el foro que administro es completamente privado. Los usuarios sin iniciar sesión no pueden ver nada excepto la página de inicio de sesión. Por lo tanto, la notificación es incorrecta, es decir, la página no se muestra como la vería un usuario sin iniciar sesión, porque tal usuario no podría verla en absoluto. Esto ha generado confusión en varias ocasiones, ya que se ha interpretado como que las publicaciones de nuestro foro privado están de repente disponibles para usuarios no autorizados. Yo mismo me alarmé bastante la primera vez que la vi y, de vez en cuando, recibo preguntas al respecto de los usuarios.
¿Quizás esta advertencia debería reescribirse? ¿O cambiarse/deshabilitarse para foros privados?
¿Es posible deshabilitarla para un foro en particular?
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
Referencia:
Ver también:
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
Esta advertencia aparece si NGINX envía una solicitud a Unicorn (el servidor de aplicaciones) y notamos un gran retraso.
Por ejemplo: (exagerado)
NGINX dice… ¡oye, aquí hay una solicitud que recibí de un usuario a la 1 p.m.!
Pasa 1 hora
El servidor de aplicaciones recibe la solicitud… ¡uh! Me tomó 1 hora recibirla… Debo estar sobrecargado.
Puedes controlar el umbral con estas dos configuraciones:
DISCOURSE_FORCE_ANONYMOUS_MIN_QUEUE_SECONDS y DISCOURSE_FORCE_ANONYMOUS_MIN_PER_10_SECONDS
Lo más importante: si tu servidor tiene mucha capacidad adicional, agrega más Unicorn aumentando UNICORN_WORKERS.
Si un sitio requiere inicio de sesión, entonces supongo que deberíamos cambiar la advertencia a algo más severo (pantalla azul, estás limitado por tasa).
Esta es la primera vez que escucho de un sitio que requiere inicio de sesión alcanzar este límite de tasa. Estoy de acuerdo en que deberíamos hacerlo un poco mejor aquí.
Voy a esperar aquí a que llegue una queja independiente más.
Lo mejor que podemos hacer bajo una carga extrema, para sitios que “requieren inicio de sesión”, es simplemente mostrar una pantalla azul que diga “el sitio está sobrecargado, inténtalo más tarde”. Me gustaría esperar un poco antes de implementar esto y ver una queja más.
Está ocurriendo en una comunidad privada muy pequeña de Discourse que visito a menudo. Me mostró un error 502 bad gateway de nginx, luego no cargó en absoluto. Finalmente, cargó, pero me mostró el mensaje de banner mencionado anteriormente.
Creo que es seguro agregar esto ahora… si un sitio que requiere inicio de sesión está sobrecargado, agregar más usuarios no va a mejorar las cosas para ellos.