Errore di carico estremo

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.

  1. Un utente pubblica una risposta
  2. Tutti gli utenti che stanno visualizzando l’argomento scoprono tramite broadcast che c’è nuovo contenuto
  3. Tutti gli utenti richiedono al server il contenuto del post (100 visualizzatori = 100 richieste)
  4. Recuperiamo le immagini e le ottimizziamo
  5. Tutti gli utenti che stanno visualizzando l’argomento scoprono tramite broadcast che c’è nuovo contenuto
  6. 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.