Discourse マルチサイト設定の最適化について専門的なガイダンスを求めています。主要なクラウドプロバイダーで、単一のWeb VMと個別のデータベースVMを使用しています。両方のマシンは十分なスペックを持っていますが、大量のバックグラウンドジョブによってシステムが圧倒され、データベースに負荷がかかっているようです。
現在の app.yml 設定は以下の通りです。
UNICORN_WORKERS: 4UNICORN_SIDEKIQS: 4DISCOURSE_SIDEKIQ_WORKERS: 10DISCOURSE_DB_POOL: 8
私の観察によると、ボトルネックはハードな接続制限に達することではなく、同時にデータベースリソースを競合するジョブの量が多いことです。Sidekiqのキューは常にバックアップされており、基本的な管理タスクでさえサイトの動作が遅くなります。
システムを安定性とパフォーマンスのために調整するための一般的なアプローチを探しています。具体的には、以下のベストプラクティスを理解したいと考えています。
- Sidekiqの同時実行数: データベースに負荷をかけずに大量のジョブを処理するために、マルチサイト環境で
DISCOURSE_SIDEKIQ_WORKERSをどのようにサイジングすべきでしょうか? - キューの分離: 異なるキュー(例:
criticalvslow優先度)を処理するために、個別のSidekiqプロセスを実行することは推奨されますか?これにより、重いジョブがより緊急性の高いジョブをブロックしないようになります。
現時点では、アーキテクチャの大幅な変更や別のWebサーバーへの移行を必要とするソリューションは求めていません。プロセスをできるだけシンプルかつ低リスクに保ちたいと考えています。安全で効果的な進め方についてアドバイスをいただければ幸いです。
よろしくお願いします!