A cosa serve Redis in Discourse?

Attualmente la mia installazione di Discourse utilizza un database PostgreSQL gestito da DigitalOcean e un’istanza Redis gestita da DigitalOcean. È necessario il server Redis gestito?

Discourse memorizza qualcosa di permanente in Redis o viene utilizzato solo per la cache e altri tipi di dati temporanei?

La mia configurazione attuale (di sicuro eccessiva, ma renderà facile il ridimensionamento se necessario in futuro):

  • Server PostgreSQL gestito da DigitalOcean
  • Istanza Redis gestita da DigitalOcean
  • Load Balancer di DigitalOcean
  • Due droplet DigitalOcean, ognuno dei quali esegue Discourse

Una configurazione più semplice che stavo considerando è:

  • Server PostgreSQL gestito da DigitalOcean
  • Un singolo server che esegue sia Redis che l’applicazione Discourse, con un IP flottante per passare a un server di backup se necessario.

La mia configurazione attuale può scambiare i server web senza interruzioni e senza che l’utente se ne accorga grazie al server Redis esterno; penso che nella configurazione più semplice gli utenti verranno disconnessi se sarà necessario passare al server di backup. È questo lo svantaggio principale di avere Redis sullo stesso server di Discourse?

Grazie,
Francis

+1 Anche io ho la stessa domanda, mi piacerebbe davvero molto vedere se qualcuno potrebbe essere così gentile da spiegare un po’ di più su Redis e Discourse :kissing_smiling_eyes:

Discourse utilizza Sidekiq, un pianificatore di job open source scritto in Ruby. Sidekiq in generale (e di default) esegue solo i job e non si occupa della pianificazione, o almeno è quanto indicano i riferimenti (magari le cose sono cambiate?); tuttavia, la mia comprensione è che la versione enterprise di Sidekiq includa la pianificazione OOTB (out of the box).

Sidekiq utilizza Redis come archivio di strutture dati in memoria ed è anch’esso scritto in Ruby. Sidekiq legge i job da una coda Redis, utilizzando il modello First In First Out (FIFO), per elaborare i job. L’elaborazione dei job è asincrona e permette a un thread web di servire richieste in tempo reale, invece di elaborare compiti pesanti che possono essere “pianificati” per essere eseguiti in background.

Sidekiq è descritto come un “software ben noto per l’elaborazione di code” ed è utilizzato da Discourse per job progettati per essere eseguiti come attività in background e non direttamente nelle richieste dell’applicazione web.

Puoi esplorare i molti tipi di job eseguiti da Discourse, basandoti sulla breve panoramica sopra, nel repository di Discourse:

Redis può essere utilizzato da Discourse in altre parti dell’architettura; ma, per quanto mi viene in mente, l’uso principale di Redis è come “compagno” di Sidekiq, il “tizio dei job”. I membri del team di Discourse più esperti di me sull’HLA di Discourse possono certamente fornire maggiori dettagli su come Redis viene utilizzato all’interno dell’HLA di Discourse.

Spero che questo sia d’aiuto.

Questo è un post un po’ datato, ma ho pensato di ampliare questa risposta dato che mi sono imbattuto in questa questione mentre cercavo altre informazioni su Discourse e Redis.

Ecco una risposta di un membro del team su cosa altro oltre a Sidekiq usa Discourse per Redis:

Ciao @Francis, qual è stata la tua stima di fatturazione per tutti quei servizi DigitalOcean? Sono solo curioso perché ho intenzione di installare lo stesso servizio su Google Cloud (200$ gratis). Il prezzo del servizio Discourse SaaS è fuori dal mio budget.

Un’ipotesi azzardata è che un load balancer, redis e postgres costino $50/mese oltre a quanto paghi per il/i droplet.

Se sei preoccupato per i costi, allora consiglio un droplet da 2 GB e di raddoppiarlo se non è sufficiente.