「サイトが過負荷で検索が無効化されています。後ほどお試しください」というエラーはどの程度深刻ですか

メンバーからこの警告メッセージの報告がいくつか寄せられています。頻繁には現れませんが、気づかれています。ここでは何もする必要がなく、見た目ほど深刻ではないと想定してもよいでしょうか?「Extreme load(極度の負荷)」という表現は大きな問題のように聞こえます。しかし、ほぼ即座に消え、検索機能も再び動作します。

トラブルシューティングの手順についてのご助言をいただければ幸いです。ありがとうございます!:seedling:

サイトに極度の負荷がかかっています。検索は無効化されています。後で再度お試しください

トラブルシューティングが必要かどうかは少し疑問ですが、別の方法で対応できるかもしれませんね?

https://review.discourse.org/t/feature-when-under-extreme-load-disable-search/4538/3

心配すべきです。管理ダッシュボードの Web クローラーレポートを確認してください。

これは、サーバーの処理能力を上回る速度でウェブリクエストが到来した際にトリガーされます。

例えば、4 台のユニコーン(ワーカープロセス)があり、1 リクエストを完全に処理するのに平均 200ms が必要だとすると、その容量は 1 秒あたり 20 リクエストとなります。

もし、一時的に 1 秒あたり 40 リクエストが到来した場合、余分なリクエストはキューに待機することになり、そのメッセージが表示されます。また、ユニコーンを増設する際にも、盲目的に行うことはできません。ウェブリクエストへの完全な応答には多くの構成要素が関与しており、それらを慎重に評価する必要があります。

Discourse は、インターネット上で最大の Discourse インスタンスが直面する驚異的なレベルのトラフィックに対応し、スケーリングを進める中で、最近このような優雅な劣化(グレースフルデグラデーション)機能を多く追加しました。

最近、ウェブクローラーによるページビューが増加したようです。しかし、それに対して何かできることやすべきことがあるかどうかはわかりません。個人的には、サーバーが通常よりも高い負荷にさらされている際に、検索を一時的に停止する旨をメンバーに定期的に通知することに問題ありません。ただし、「極度の負荷」というメッセージを少し和らげて「サーバーが混雑しています」といった表現に変更するのはどうでしょうか。

サイトの設定で、問題のあるクローラーのユーザーエージェントをブラックリストに登録してください。現在、インターネット上には非常に質の低いクローラーが多数存在しています。

ええと、クローラーによる24時間あたりのページビューが1800件程度なら、サーバーにそれほどの負荷がかかるはずはありません。アクセスログを開いて、その時にリクエストがどのように来ているかを確認してみる価値はあるかもしれません。それが本当の問題のヒントになる可能性があります。誰かがあなたをハッキングしようとしているか、APIにリクエストを集中させているのかもしれません。

似たような通知の報告をもう一つ受け取りました。私たちはAMAを実施しており、通常よりも多くの人がフォーラムを読み書きしていますが、これが極端な負荷によるものだと確信は持てません。もしかすると、Discourse Who's Online のようなプラグインが追加の負荷を引き起こしているのでしょうか?

ありがとうございます!今すぐ確認します。

管理設定でこれらを無効にして、遅くなっている場合は人々に待ってもらうようにすることはできますか?私たちのサイトはまだ特に混雑していないと思います。

パフォーマンスがタイムアウトするほど低下すると、遅く感じるのではなく、単に壊れたように感じられます。

これらの警告を無視するのは絶対に良くありません!

最近、極度の負荷に関する通知を頻繁に受けています。

スポーツフォーラムを運営しており、特定の試合に関するトピックに複数のユーザーが同時にコメントする際に発生します。ログやサーバーを確認して、問題がないかチェックするためのガイドやサポートはありますか?ここ数週間までは問題なかったのですが。

ログイン済みユーザーの投稿パフォーマンスが劣化した可能性について、どうお考えですか?@sam

メタで確実に N+1 問題が発生しており、至急対応が必要です。

これを解決するための項目をいくつかログに記録します。とはいえ、サイトが過負荷状態になった場合、管理者は以下の 2 つを調整できます。

  1. インスタンスにリソースを追加する(PG のメモリを増やす、またはユニコーンワーカーを増やす)

  2. 以下の設定に応じて匿名化の閾値を調整する:

DISCOURSE_FORCE_ANONYMOUS_MIN_QUEUE_SECONDS および DISCOURSE_FORCE_ANONYMOUS_MIN_PER_10_SECONDS

discourse-voting プラグインで N+1 クエリ問題を 1 つ修正しました:

他にも問題がないか確認します。

ここで別の N+2 問題を発見しました:

さらに何か見つかるか確認しています。

Q: 「N+1」とは何ですか?私は開発者(Java)ですが、この用語に出会ったことはなかったと思います。

以下は、この問題について説明する(ほぼ Java 関連の)記事です: