Ab und zu erhalten wir diese Benachrichtigung am oberen Rand unseres Forums:
Aufgrund extremer Auslastung wird dies vorübergehend so angezeigt, wie es ein abgemeldeter Benutzer sehen würde.
Ich habe dazu einige Beobachtungen und Fragen:
Erstens scheint der Server nicht unter extremer Last zu stehen. Das letzte Mal, als ich die Warnung sah, zeigte das Server-Monitoring, dass die CPU-Auslastung maximal 24 % betrug, die Speichernutzung knapp über 50 % lag usw. Soweit ich weiß, gab es für die Benutzer keine spürbare Leistungsverschlechterung. Ich frage mich also: Was ist der Schwellenwert für diese Warnung, und ist er angemessen kalibriert?
Zweitens und für mich wichtiger: Das von mir betriebene Forum ist vollständig privat. Abgemeldete Benutzer können nichts außer der Anmeldeseite sehen. Die Benachrichtigung ist also unzutreffend, d. h. die Seite wird nicht so angezeigt, wie sie ein abgemeldeter Benutzer sehen würde, denn ein solcher Benutzer könnte sie überhaupt nicht sehen. Dies hat mehrmals zu Verwirrung geführt, da man annahm, die Beiträge unseres privaten Forums seien plötzlich für nicht autorisierte Benutzer zugänglich. Ich selbst war beim ersten Anblick ziemlich beunruhigt, und von Zeit zu Zeit bekomme ich von Benutzern Fragen dazu.
Vielleicht sollte diese Warnung umformuliert werden? Oder für private Foren geändert/deaktiviert werden?
Ist es möglich, sie für ein bestimmtes Forum zu deaktivieren?
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
Referenz:
Siehe auch:
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
Diese Warnung erscheint, wenn NGINX eine Anfrage an Unicorn (den App-Server) weiterleitet und wir eine erhebliche Verzögerung feststellen.
Beispiel (übertrieben):
NGINX sagt: … Hey, hier ist eine Anfrage, die ich um 13:00 Uhr von einem Benutzer erhalten habe.
Eine Stunde vergeht.
Der App-Server erhält die Anfrage … oh je, es hat eine Stunde gedauert, bis ich sie bekommen habe … ich muss überlastet sein.
Den Schwellenwert können Sie mit diesen beiden Einstellungen steuern:
DISCOURSE_FORCE_ANONYMOUS_MIN_QUEUE_SECONDS und DISCOURSE_FORCE_ANONYMOUS_MIN_PER_10_SECONDS
Am wichtigsten ist: Wenn Ihr Server viel zusätzliche Kapazität hat, fügen Sie mehr Unicorn-Prozesse hinzu, indem Sie UNICORN_WORKERS erhöhen.
Wenn eine Seite eine Anmeldung erfordert, sollten wir die Warnung meiner Meinung nach durch etwas Schwerwiegenderes ersetzen (blauer Bildschirm, Sie sind rate-limitiert).
Dies ist das erste Mal, dass ich von einer Seite höre, die eine Anmeldung erfordert und dieses Rate-Limit erreicht. Ich stimme zu, dass wir hier etwas besser werden sollten.
Ich werde hier noch auf eine weitere unabhängige Beschwerde warten.
Das Beste, was wir unter extremer Last für Seiten, die eine Anmeldung erfordern, tun können, ist, einfach einen blauen Bildschirm mit der Meldung „Seite ist überlastet, versuchen Sie es später erneut
Das passiert in einer sehr kleinen privaten Discourse-Community, die ich häufig besuche. Es wurde mir ein 502 Bad Gateway Nginx-Fehler angezeigt, danach konnte die Seite gar nicht mehr geladen werden. Schließlich wurde sie geladen, zeigte mir aber die oben genannte Banner-Meldung.
Ich denke, es ist sicher, dies jetzt hinzuzufügen. Wenn eine Seite, die eine Anmeldung erfordert, überlastet ist, wird das Hinzufügen weiterer Benutzer die Situation für diese nicht verbessern.