Discourse Multisite の最適化:データベースと Sidekiq のボトルネック

Discourse マルチサイト設定の最適化について専門的なガイダンスを求めています。主要なクラウドプロバイダーで、単一のWeb VMと個別のデータベースVMを使用しています。両方のマシンは十分なスペックを持っていますが、大量のバックグラウンドジョブによってシステムが圧倒され、データベースに負荷がかかっているようです。

現在の app.yml 設定は以下の通りです。

  • UNICORN_WORKERS: 4
  • UNICORN_SIDEKIQS: 4
  • DISCOURSE_SIDEKIQ_WORKERS: 10
  • DISCOURSE_DB_POOL: 8

私の観察によると、ボトルネックはハードな接続制限に達することではなく、同時にデータベースリソースを競合するジョブの量が多いことです。Sidekiqのキューは常にバックアップされており、基本的な管理タスクでさえサイトの動作が遅くなります。

システムを安定性とパフォーマンスのために調整するための一般的なアプローチを探しています。具体的には、以下のベストプラクティスを理解したいと考えています。

  • Sidekiqの同時実行数: データベースに負荷をかけずに大量のジョブを処理するために、マルチサイト環境で DISCOURSE_SIDEKIQ_WORKERS をどのようにサイジングすべきでしょうか?
  • キューの分離: 異なるキュー(例:critical vs low 優先度)を処理するために、個別のSidekiqプロセスを実行することは推奨されますか?これにより、重いジョブがより緊急性の高いジョブをブロックしないようになります。

現時点では、アーキテクチャの大幅な変更や別のWebサーバーへの移行を必要とするソリューションは求めていません。プロセスをできるだけシンプルかつ低リスクに保ちたいと考えています。安全で効果的な進め方についてアドバイスをいただければ幸いです。

よろしくお願いします!

「いいね!」 3

Discourse は、システムリソースに基づいてそれらを自動的に適応させることができるはずです。最近システムリソースを増やした場合でも、./discourse-setup スクリプトを再実行しても安全です。このスクリプトは、リソースの増加に対応し、.yml をそれに応じて調整できます。

「いいね!」 2

より少なくする必要があるということでしょうか?

優先度の高いジョブはすでに優先されるようになっていると確信しています。

「いいね!」 2

@itsbhanusharma @pfaffman ご協力とご意見ありがとうございます!お二人ともお時間を割いて専門知識を共有していただき、感謝いたします。

「いいね!」 4

データベースがボトルネックになっている場合、クラウドデータベースのインスタンスタイプを大きくすることを検討しましたか?

「いいね!」 1

このトピックは、最後の返信から30日後に自動的にクローズされました。新しい返信は許可されていません。