De temps en temps, nous recevons cette notification en haut de notre forum :
En raison d’une charge extrême, ceci est temporairement affiché à tout le monde tel qu’un utilisateur déconnecté le verrait.
J’ai quelques observations et questions à ce sujet :
Premièrement, le serveur ne semble pas être sous une charge extrême. La dernière fois que j’ai vu cet avertissement, notre surveillance du serveur indiquait que la charge CPU a atteint un pic de 24 %, l’utilisation de la mémoire était légèrement supérieure à 50 %, etc. À ma connaissance, aucune baisse notable de performance n’a été constatée par les utilisateurs. Je me demande donc : quel est le seuil pour cet avertissement et est-il raisonnablement calibré ?
Deuxièmement, et plus important pour moi, le forum que je gère est entièrement privé. Les utilisateurs déconnectés ne peuvent rien voir à part la page de connexion. La notification est donc incorrecte, c’est-à-dire que la page n’est pas affichée comme un utilisateur déconnecté le verrait, car un tel utilisateur ne pourrait pas du tout la voir. Cela a créé de la confusion à plusieurs reprises, car cela a été interprété comme signifiant que les publications de notre forum privé sont soudainement accessibles à des utilisateurs non autorisés. J’ai été moi-même assez inquiet la première fois que je l’ai vu, et de temps en temps, je reçois des questions à ce sujet de la part des utilisateurs.
Peut-être faudrait-il reformuler cet avertissement ? Ou le modifier/désactiver pour les forums privés ?
Est-il possible de le désactiver pour un forum particulier ?
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
Référence :
Voir aussi :
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
Cet avertissement s’affiche lorsque NGINX transmet une requête à Unicorn (le serveur d’application) et que nous constatons un délai important.
Par exemple (exagéré) :
NGINX dit : « Hé, voici une requête que j’ai reçue d’un utilisateur à 13 h »
Une heure passe
Le serveur d’application reçoit la requête : « Ouf, il m’a fallu une heure pour la recevoir… Je dois être surchargé. »
Vous pouvez contrôler le seuil avec ces deux paramètres :
DISCOURSE_FORCE_ANONYMOUS_MIN_QUEUE_SECONDS et DISCOURSE_FORCE_ANONYMOUS_MIN_PER_10_SECONDS
Plus important encore, si votre serveur dispose de beaucoup de capacité supplémentaire, ajoutez plus de processus Unicorn en augmentant UNICORN_WORKERS.
Si un site nécessite une connexion, je pense que nous devrions modifier cet avertissement pour quelque chose de plus sévère (écran bleu, vous êtes limité en débit).
C’est la première fois que j’entends parler d’un site nécessitant une connexion qui atteint cette limite de débit. Je suis d’accord, nous devrions faire un peu mieux ici.
Je vais attendre ici un nouveau signalement indépendant.
Le mieux que nous puissions faire, sous une charge extrême, pour les sites “nécessitant une connexion”, est simplement d’afficher un écran bleu indiquant : “le site est surchargé, veuillez réessayer plus tard”. Je souhaiterais attendre un peu avant d’ajouter cette fonctionnalité et voir un nouveau signalement.
Cela se produit sur une très petite communauté Discourse privée que je visite souvent. Cela m’a renvoyé une erreur 502 Bad Gateway nginx, puis le site ne s’est plus chargé du tout. Finalement, il s’est chargé, mais il m’a affiché le message de bannière mentionné ci-dessus.
Je pense qu’il est sûr de l’ajouter maintenant… si un site nécessitant une connexion est surchargé, ajouter plus d’utilisateurs n’améliorera pas les choses pour eux.