优化大型 Discourse 多站点:数据库和 Sidekiq 瓶颈

我正在寻求一些关于优化 Discourse 多站点设置的专家指导。我有一个单独的 Web 虚拟机和一个独立的数据库虚拟机,它们都位于一家主流云提供商上。虽然两台机器的配置都不错,但我发现我的系统在处理大量后台作业时会不堪重负,这似乎给数据库带来了压力。

我当前的 app.yml 配置如下:

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

根据我的观察,瓶颈并非触及硬连接限制,而是大量作业同时争夺数据库资源。Sidekiq 中的队列一直在积压,这使得网站运行缓慢,即使是基本的管理任务也是如此。

我正在寻找一种通用的方法来调整系统以获得稳定性和性能。具体来说,我想了解以下方面的最佳实践:

  • Sidekiq 并发性: 在多站点环境中,DISCOURSE_SIDEKIQ_WORKERS 应如何调整大小以处理大量作业而不会给数据库带来压力?
  • 队列分离: 是否建议运行单独的 Sidekiq 进程来处理不同的队列(例如,“critical”与“low”优先级)?这将确保繁重作业不会阻塞更紧急的作业。

我目前不寻求需要重大架构更改或迁移到不同 Web 服务器的解决方案,因为我想让过程尽可能简单且风险尽可能低。我希望获得关于安全有效的前进道路的建议。

谢谢!

3 个赞

Discourse 应该能够根据您的系统资源自动调整这些设置。请注意,如果您最近增加了系统资源,重新运行 ./discourse-setup 脚本是安全的。该脚本可以适应增加的资源并相应地调整您的 .yml 文件。

2 个赞

听起来你需要更少?

我很确定它已经知道要优先处理高优先级作业。

2 个赞

@itsbhanusharma @pfaffman 感谢您的帮助和建议!非常感谢您们抽出宝贵时间分享专业知识。

4 个赞

如果数据库是瓶颈,您是否考虑过将数据库迁移到更大实例类型的云数据库?

1 个赞

此主题在上次回复后 30 天自动关闭。不再允许回复。