Actualmente, mi instalación de Discourse utiliza una base de datos PostgreSQL administrada por DigitalOcean y una instancia de Redis administrada por DigitalOcean. ¿Es necesario el servidor Redis administrado?
¿Discourse almacena algo permanente en Redis o solo se utiliza para caché u otros tipos de datos temporales?
Mi configuración actual (definitivamente excesiva, pero facilitará la escalabilidad si algún día es necesaria):
Servidor PostgreSQL administrado por DigitalOcean
Instancia de Redis administrada por DigitalOcean
Balanceador de carga de DigitalOcean
Dos droplets de DigitalOcean, cada uno ejecutando Discourse
Una configuración más sencilla que tenía en mente es:
Servidor PostgreSQL administrado por DigitalOcean
Un único servidor que ejecute tanto Redis como la aplicación de Discourse, con una IP flotante para conmutar por error a un servidor de respaldo si es necesario.
Mi configuración actual permite intercambiar los servidores web de forma transparente sin que el usuario lo note gracias al servidor Redis externo. Creo que la configuración más sencilla provocará el cierre de sesión de los usuarios si se necesita el servidor de respaldo. ¿Es esta la principal desventaja de tener Redis en el mismo servidor que Discourse?
Discourse utiliza Sidekiq, un programador de trabajos job scheduler de código abierto escrito en Ruby. Sidekiq generalmente (y de forma predeterminada) solo ejecuta trabajos y no se encarga de la programación, o al menos eso indican las referencias (¿quizás las cosas han cambiado?); sin embargo, mi entendimiento es que la versión empresarial de Sidekiq incluye programación OOTB (out of the box).
Sidekiq utiliza Redis como almacén de estructuras de datos en memoria y también está escrito en Ruby. Sidekiq lee trabajos de una cola de Redis utilizando el modelo First In First Out (FIFO) para procesarlos. El procesamiento de trabajos es asíncrono y permite que un hilo web atienda solicitudes en tiempo real en lugar de procesar tareas pesadas que pueden “programarse” para ejecutarse en segundo plano.
Sidekiq se describe como “software de procesamiento de colas bien conocido” y es utilizado por Discourse para trabajos diseñados para ejecutarse como tareas en segundo plano y no directamente en las solicitudes de la aplicación web.
Puedes explorar los muchos tipos de trabajos que ejecuta Discourse, basándote en este breve resumen, en el repositorio de Discourse:
Redis puede ser utilizado por Discourse en otras partes de la arquitectura; pero por lo que recuerdo, el uso principal de Redis es como “compañero” de Sidekiq, el “responsable de los trabajos”. Los miembros del equipo de Discourse que saben más que yo sobre la HLA de Discourse seguramente podrán elaborar con más detalles sobre cómo se utiliza Redis dentro de la HLA de Discourse.
Esta es una publicación un poco anticuada, pero pensé que debería ampliar esta respuesta, ya que me encontré con esto mientras buscaba otra información sobre Discourse y Redis.
Aquí tienes una respuesta de un miembro del equipo sobre qué más usa Discourse de Redis además de Sidekiq:
Oye @Francis, ¿cuál fue tu facturación estimada para todos esos servicios de DigitalOcean? Tengo curiosidad porque estoy planeando instalar el mismo servicio en Google Cloud (200 $ gratis). El precio del servicio Discourse SAS está fuera de mi presupuesto.