我正在寻求一些关于优化 Discourse 多站点设置的专家指导。我有一个单独的 Web 虚拟机和一个独立的数据库虚拟机,它们都位于一家主流云提供商上。虽然两台机器的配置都不错,但我发现我的系统在处理大量后台作业时会不堪重负,这似乎给数据库带来了压力。
我当前的 app.yml 配置如下:
UNICORN_WORKERS: 4UNICORN_SIDEKIQS: 4DISCOURSE_SIDEKIQ_WORKERS: 10DISCOURSE_DB_POOL: 8
根据我的观察,瓶颈并非触及硬连接限制,而是大量作业同时争夺数据库资源。Sidekiq 中的队列一直在积压,这使得网站运行缓慢,即使是基本的管理任务也是如此。
我正在寻找一种通用的方法来调整系统以获得稳定性和性能。具体来说,我想了解以下方面的最佳实践:
- Sidekiq 并发性: 在多站点环境中,
DISCOURSE_SIDEKIQ_WORKERS应如何调整大小以处理大量作业而不会给数据库带来压力? - 队列分离: 是否建议运行单独的 Sidekiq 进程来处理不同的队列(例如,“critical”与“low”优先级)?这将确保繁重作业不会阻塞更紧急的作业。
我目前不寻求需要重大架构更改或迁移到不同 Web 服务器的解决方案,因为我想让过程尽可能简单且风险尽可能低。我希望获得关于安全有效的前进道路的建议。
谢谢!