Una cosa importante da tenere a mente qui è che le implementazioni di “chat” in genere trasmettono il contenuto effettivo agli abbonati.
In Discourse abbiamo un processo piuttosto complesso che rende l’implementazione ingenua complessa, portando a grandi quantità di traffico.
- Un utente pubblica una risposta
- Tutti gli utenti che stanno visualizzando l’argomento scoprono tramite broadcast che c’è nuovo contenuto
- Tutti gli utenti richiedono al server il contenuto del post (100 visualizzatori = 100 richieste)
- Recuperiamo le immagini e le ottimizziamo
- Tutti gli utenti che stanno visualizzando l’argomento scoprono tramite broadcast che c’è nuovo contenuto
- Tutti gli utenti richiedono al server il contenuto del post (100 visualizzatori = 100 richieste)
(abbiamo varie ottimizzazioni, limiti di frequenza, nuovi tentativi e così via, ma questo è il succo)
Tutte queste richieste devono passare attraverso il nostro processo di sicurezza per garantire che l’utente abbia i diritti per visualizzare il post e così via.
Se il contenuto fosse piuttosto breve e potessimo in qualche modo capire come gestire la sicurezza in modo più leggero per la “corsia veloce”, potremmo distribuire i messaggi della chat tramite broadcast. Questo porterebbe a prestazioni significativamente migliori; probabilmente potremmo gestire 10.000 utenti su un singolo droplet Digital Ocean da 2 GB con quel design.
La sicurezza è molto complessa. Anche la memorizzazione nella cache è complessa a causa dei problemi di invalidazione della cache.
Quindi, sì, stiamo assolutamente pensando a questo problema. Ma allo stato attuale…
Molti utenti connessi che visualizzano un argomento + molto nuovo contenuto su un argomento = bollette del server costose.