Estoy buscando orientación experta sobre cómo optimizar una configuración multisitio de Discourse. Tengo una única VM web y una VM de base de datos separada en un importante proveedor de nube. Si bien ambas máquinas tienen especificaciones decentes, estoy descubriendo que mi sistema se ve abrumado por un gran volumen de trabajos en segundo plano, lo que parece estar estresando la base de datos.
Mi configuración actual de app.yml es:
UNICORN_WORKERS: 4UNICORN_SIDEKIQS: 4DISCOURSE_SIDEKIQ_WORKERS: 10DISCOURSE_DB_POOL: 8
Según mis observaciones, el cuello de botella no es alcanzar un límite de conexión estricto, sino el gran volumen de trabajos que compiten por los recursos de la base de datos al mismo tiempo. Las colas en Sidekiq se acumulan constantemente, lo que hace que el sitio se sienta lento, incluso para tareas administrativas básicas.
Estoy buscando un enfoque genérico para ajustar el sistema en cuanto a estabilidad y rendimiento. Específicamente, me gustaría entender las mejores prácticas para:
- Concurrencia de Sidekiq: ¿Cómo se debe dimensionar
DISCOURSE_SIDEKIQ_WORKERSen un entorno multisitio para manejar un alto volumen de trabajos sin estresar la base de datos? - Separación de colas: ¿Se recomienda ejecutar procesos Sidekiq separados para manejar diferentes colas (por ejemplo, prioridad
críticavs.baja)? Esto aseguraría que los trabajos pesados no bloqueen los más urgentes.
No busco una solución que requiera un cambio arquitectónico importante o migrar a un servidor web diferente en este momento, ya que quiero mantener el proceso lo más simple y de bajo riesgo posible. Espero recibir consejos sobre un camino seguro y efectivo.
¡Gracias!