Sincronizza lo stato dell'utente tra le app

3

Diciamo che abbiamo un'applicazione web in cui gli utenti possono accedere e avere uno stato (disponibile, non disponibile). C'è un'applicazione server che deve conoscere lo stato degli utenti. Questo può essere sincronizzato inviando un messaggio dalla webapp quando lo stato dell'utente cambia.

La domanda è come ottenere in modo efficiente lo stato di tutti gli utenti (molti utenti) all'avvio dell'applicazione del server?

Opzioni a cui posso pensare:

  1. L'app del server richiede un elenco di utenti, lo stato dalla webapp (non credo sia efficiente)
  2. L'app del server legge l'utente direttamente dal database (cosa succede se l'app del server rallenta il database a causa di questo enorme elenco di utenti?)

C'è un modo migliore per farlo?

    
posta norbert.mate 23.11.2017 - 14:52
fonte

1 risposta

4

Sei stato un po 'vago sul numero di utenti, utenti attivi e server. Ma ecco un modo.

Definisci un "utente attivo" come se avessi usato l'app negli ultimi K secondi e disponi i client web dell'utente a PING il servizio ogni K / 2 secondi. Questo potrebbe aggiornare direttamente una tabella RDBMS, o potrebbe inviare al tuo cluster di server tramite pub-sub, ad es. 0mq o kafka . I membri del cluster possono utilizzare il tuo database preferito o una rappresentazione in-core come una mappa hash combinata con un LRU per invecchiare utenti inattivi.

Ogni evento PING aggiorna semplicemente un timestamp memorizzato per quell'utente. Quando l'app del server si avvia o esegue un'altra azione che richiede di conoscere le attivazioni, invia semplicemente una query limitata nel tempo al database: select userid from active where ping_time > now() - K . Un indice di data / ora su quella tabella ti consentirà di scalare fino a un numero molto elevato di utenti registrati storici, poiché gli inattivi vengono memorizzati in blocchi del disco che la query ignora. Il ridimensionamento a un numero elevato di utenti che sono attivi Right Now è una sfida separata, per cui questa query degli utenti attivi sarà l'ultima delle tue preoccupazioni.

    
risposta data 23.11.2017 - 17:03
fonte

Leggi altre domande sui tag