Usando Message bus en cliente personalizado en AWS. Necesito un poco de ayuda por favor :)

En primer lugar, soy plenamente consciente de la configuración recomendada de Discourse, pero desafortunadamente en este momento está fuera de mi control.\n
Pasando al problema: mi cliente tenía un frontend personalizado en React que utilizaba Discourse como aplicación backend. Heredé el proyecto en mal estado, y los desarrolladores anteriores habían intentado forzar la integración de ActionCable en Discourse. Dado que Discourse ya utiliza Message Bus para funciones en tiempo real, pensé que deberíamos intentar usarlo.

Fuimos exitosos localmente. Message Bus «simplemente funciona» y pudimos suscribirnos a todos los canales predeterminados de Message Bus de Discourse, además de crear algunos propios.

El problema que estamos viendo ocurre en nuestros entornos remotos. Estamos desplegando en instancias de AWS EC2 que están detrás de un ALB y construimos el entorno nosotros mismos. Me habría encantado seguir la ruta de Docker, pero el cliente simplemente no tenía el presupuesto para dedicar tiempo a cambiar cosas en esta etapa del proyecto :sadpanda:

El síntoma principal es que Message Bus tiene un retraso terrible. Nada es realmente en tiempo real, pero sabemos que la configuración de Message Bus es correcta porque funciona muy bien localmente, así que debe ser algo más.

Estoy utilizando prácticamente la configuración predeterminada de nginx de Discourse. Inicialmente pensé que este era el problema, ya que faltaba la configuración de nginx para Message Bus, pero después de agregarla, parece que no ha resuelto los problemas que estamos viendo.

Después de revisar la pestaña de red en Chrome, es claro que hay un problema porque nuestras solicitudes /poll están esperando 25 segundos y luego descargando contenido en milisegundos. Sé que debería ser al revés, como ocurre cuando lo ejecuto localmente o como sucede en meta.

Sé que esto también podría ser un problema de AWS ALB, pero literalmente no tengo ni idea de por dónde empezar. Me preguntaba si @sam podría tener alguna idea de cuál podría ser el problema, o si podría indicarme la dirección correcta.

Como siempre, cualquier ayuda es muy apreciada.

Tenemos un bus de mensajes funcionando con ALB; de hecho, Meta está alojado en AWS.

Mi suposición es que en algún lugar de tu pila tienes habilitada la búferización de solicitudes, lo que provoca que se mantengan durante largos periodos de tiempo.

Lo más probable es que sea proxy_buffering en NGINX configurado en on en lugar de off.

1 me gusta

Hola @sam

Gracias por esta sugerencia. Parece que ha solucionado el problema en el panel de red; es decir, ahora muestra el contenido descargado en 25 s y la espera en 35 ms una vez que la solicitud se ha completado.

Sin embargo, tenía la impresión de que un mensaje se procesaría tan pronto como se recibiera. Nuestra aplicación todavía parece esperar a que termine el sondeo antes de procesar cualquier mensaje recibido.

Tenemos habilitados el sondeo largo y la codificación por fragmentos, y como mencioné, estamos utilizando Discourse como backend, por lo que asumimos que no es necesario configurar nada allí.

¿Alguna idea? Gracias