Maker Forums は大規模なユーザーベースを持っていますが、「誰がオンラインか」のアバター表示が縮小されるほど、同時にオンラインにいるユーザーはめったにいません。我们发现「Who’s Online」プラグインがパフォーマンスの低下を引き起こしており、オンラインユーザーが数人しかいない場合でも、リクエストがタイムアウトするほどでした。私たちはオフラインページ付きの外部 nginx 設定を使用しており、メンテナンスが実際に行われていないにもかかわらず、これらのタイムアウトされたリクエストの結果として、定期的にメンテナンスページが表示されていました。
デジタルオーシャンのスペースから移行した後、画像はローカルで提供されていますが、これにより Unicorn ワーカー間の競合が生じています。ただし、2 CPU 4GB の VM ですべてを実行しており、データベースも比較的大きい(約 40 万件の投稿、6GB のデータベース)ため、1 ワーカーあたり 500MB の Unicorn を大量に追加する余地はありません。もし画像にオブジェクトストレージを使用していた場合、Unicorn ワーカーの競合が減少するため、全体的な影響は小さくなった可能性があります。しかし、現在でもオンラインユーザーが 2 人しかいない状態でこの影響が見られたことを考えると、多少の改善があっても依然として無視できない規模だったでしょう。
更新:レート制限の flood ゾーンを 12r/s から 36r/s に、burst を 12 から 36 に変更したところ、「Who’s Online」の影響が少なくとも軽減されました。現在、この設定をテスト中です。
さらに更新:flood レートを 3 倍に引き上げた結果、現在まで問題の報告はありません。
私は 外部 nginx を使用しており、レート制限を外部 nginx に適用し、レート制限付きテンプレートを起点として使用しました が、現在は内部 nginx でレート制限を使用しています。外部 nginx はどのルートが静的であるかを認識できないため、静的ルートだけでなく動的ルートにもレート制限を適用してしまい、これにより静的アセットの読み込み時に多くの失敗や再試行が発生したためです。なお、これは外部 nginx を実行する理由の一つでもあります。そうでなければ、すべての IPv6 トラフィックが Docker の IP アドレスに帰属し、1 つの IP アドレスとしてレート制限されてしまうと考えられます。