Wir haben seit geraumer Zeit ein wiederkehrendes Problem auf unserem Discourse-Forum, das wir endlich eingrenzen und zuverlässig reproduzieren konnten.
Hier sind die Schritte zur Reproduktion:
Ein Thema mit Tausenden von Antworten vorhanden ist.
Einen Beitrag in diesem Thema markieren.
Das Thema öffnen.
Das Thema lädt nun sehr lange. In einigen Fällen führt dies zu einem Timeout, und wir erhalten stattdessen einen Nginx-Fehler (502 Bad Gateway).
Hier sind einige ungefähre Ladezeiten von unserem Forum:
Bei einem Thema mit etwa 1.000 Antworten beträgt die zusätzliche Ladezeit nach dem Erstellen eines Lesezeichens einige Sekunden. Das ist spürbar, aber kein großes Problem.
Bei einem Thema mit etwa 4.000 Antworten beträgt die Ladezeit normalerweise 20–30 Sekunden, und es kommt manchmal zu einem Timeout, statt dass die Seite erfolgreich geladen wird.
Bei einem Thema mit über 9.000 Antworten führt es in den meisten Fällen zu einem Timeout. In einigen Fällen wird es geladen, aber erst nach mehr als 30 Sekunden.
Beachten Sie, dass diese Themen problemlos laden, wenn keine Lesezeichen darin vorhanden sind. Das Problem tritt nur bei Benutzern auf, die Lesezeichen in einem bestimmten Thema haben, und sobald sie das Lesezeichen entfernen, lädt das Thema wieder normal.
Wenn es nicht allzu umständlich ist, könntest du beim Setzen des Lesezeichens im zweiten Schritt der Reproduktionsbeschreibung einen zeitgesteuerten Erinnerungshinweis einrichten und prüfen, ob sich etwas ändert? Genau das hat bei mir schließlich zur Reproduzierbarkeit geführt (in meinem Fall speziell das Setzen einer Erinnerung für „Montag“).
Dadurch begann meine .json-Anfrage im Zusammenhang mit der ID des gebookmarkten Beitrags, nach 30 Sekunden Wartezeit eine 302-Antwort zu liefern, wie im folgenden Bild zu sehen ist. (Dies tritt auf, wenn ich auf den Lesezeichen-Link in meinem Profilmenü klicke.)
Zufällig habe ich auch bemerkt, dass Suchanfragen ein ähnliches Verhalten zeigen, wobei sie sich zwar nur extrem verlangsamen, sobald man nach irgendetwas in irgendeinem Unterforum sucht – einschließlich solcher, die überhaupt keine gebookmarkten Beiträge enthalten:
[Redigiertes Bild langsamer Suchanfragen aus den Chromium-Entwicklertools, da nur 1 Embed erlaubt war]
Aus anderen Erfahrungen heraus riecht das für mich nach einer Art SQL N+1-Problem, aber ich bin weder im Discourse-Code noch in Ruby selbst gut genug bewandert, um zu wissen, ob sich vielleicht ein zyklisches JSON-Modell oder Ähnliches auf dieselbe Weise äußern würde.