Utilizzo del Message bus in un client personalizzato su AWS. Serve un po' di aiuto, per favore :)

Innanzitutto, sono pienamente consapevole della configurazione Discourse consigliata, ma purtroppo al momento è al di fuori del mio controllo.

Veniamo al problema. Il mio cliente aveva sviluppato un frontend React personalizzato che utilizza Discourse come backend. Ho ereditato il progetto in uno stato disastroso, e gli sviluppatori precedenti avevano tentato di forzare ActionCable all’interno di Discourse. Dato che Discourse utilizza già Message Bus per le funzionalità in tempo reale, ho pensato che dovremmo provare a usare quello.

Abbiamo avuto successo in locale. Message Bus “funziona semplicemente” e siamo stati in grado di iscriverci a tutti i canali predefiniti di Message Bus di Discourse, oltre a crearne di nostri.

Il problema che stiamo riscontrando si presenta nei nostri ambienti remoti. Stiamo distribuendo su istanze AWS EC2 poste dietro un ALB, costruendo l’ambiente noi stessi. Avrei voluto seguire la strada di Docker, ma il cliente non aveva semplicemente il budget per dedicare tempo a cambiare le cose in questa fase del progetto :sadpanda:

Il sintomo principale è che Message Bus ha una latenza terribile. Nulla è davvero in tempo reale, ma sappiamo che la configurazione di Message Bus è corretta perché funziona benissimo in locale, quindi deve esserci qualcos’altro.

Sto praticamente utilizzando la configurazione nginx predefinita di Discourse. Inizialmente pensavo che questo fosse il problema, dato che mancava la configurazione nginx per Message Bus, ma dopo averla aggiunta non sembra aver risolto i problemi che stiamo riscontrando.

Dopo aver esaminato la scheda di rete in Chrome, è chiaro che c’è un problema: le nostre richieste /poll rimangono in attesa per 25 secondi e poi scaricano i contenuti in pochi millisecondi. So che dovrebbe essere il contrario, come quando lo eseguo in locale o come avviene su meta.

Sono consapevole che potrebbe trattarsi anche di un problema legato ad AWS ALB, ma sono letteralmente senza idee su da dove iniziare. Mi chiedevo se @sam avesse qualche idea su quale possa essere il problema o se potesse indicarmi la direzione giusta.

Come sempre, ogni aiuto è molto apprezzato!

Abbiamo un message bus funzionante con gli ALB; in realtà, Meta è ospitato su AWS.

Secondo me, da qualche parte nella tua stack è abilitata la memorizzazione intermedia (buffering) delle richieste, il che le trattiene per lunghi periodi.

È molto probabile che proxy_buffering in NGINX sia impostato su on invece che su off.

Ciao @sam

Grazie per questo suggerimento. Sembra aver risolto il problema nel pannello di rete, ovvero ora mostra il contenuto scaricato in 25 secondi e in attesa per 35 ms una volta completata la richiesta.

Tuttavia, avevo l’impressione che un messaggio venisse elaborato non appena viene ricevuto. La nostra app sembra ancora attendere la fine del polling prima di elaborare qualsiasi messaggio ricevuto.

Abbiamo abilitato il long polling e la codifica chunked e, come già menzionato, stiamo utilizzando Discourse come backend, quindi presumiamo che non sia necessario configurare nulla lì.

Qualche idea? Grazie