sessioni utente in un server web; velocità o persistenza?

0

Sto cercando di implementare sessioni per un server web che sto sviluppando nel mio tempo libero. Al momento disponeva di supporto per i cookie, quindi gli utenti potevano implementare la propria gestione delle sessioni, ma questo è qualcosa che dovrebbe essere gestito dal server web. Sono di fronte a due opzioni sicure:

  • Archivialo in memoria e fa scadere la sessione se l'utente non effettua una richiesta per un certo periodo di tempo. Questo ha il vantaggio della velocità; accedere alla memoria è veloce. È anche più facile da implementare, ma questo non è un problema.

o

  • Archiviarlo in un database di qualche tipo e scadere la sessione se il tempo last_access è superiore a un certo periodo di tempo. Questo ha il vantaggio della persistenza; un arresto del server, il riavvio, ecc. non avranno alcun impatto su questo. Sarebbe anche possibile utilizzare un database su un altro server per questo scopo, consentendo a più server di condividere sessioni (ad esempio per il bilanciamento del carico).

Sto cercando di decidere se mantenere le sessioni con un riavvio o uno spegnimento è abbastanza importante da sacrificare la velocità di archiviazione in memoria, o se dovrei semplicemente memorizzare le sessioni in cache e memorizzarle in un database di qualche tipo come "backup" ", per esempio in caso di arresto anomalo o riavvio, ripristinerei le sessioni (se non sono scadute) dal database. Modifica: questo è in un ambiente a thread singolo. Non è un'opzione per il multithread.

Dal punto di vista dell'utente del server web, che è più importante? Velocità o persistenza?

    
posta LuaWeaver 05.04.2015 - 01:17
fonte

1 risposta

2

Perché non entrambi?

Suppongo che vogliate una rapida inversione di tendenza, senza aspettare che la sessione venga memorizzata nel database. Ma questo non impedisce di inserire i dati nel database eventualmente , perché probabilmente gli utenti non registrano una nuova sessione ad ogni richiesta per periodi prolungati.

Avrei una cache in memoria di dimensioni limitate, una coda e un database. Quando viene registrata una nuova sessione, rimane nella cache e viene messa in coda. Un thread in background continua a leggere la coda e inserisce le nuove sessioni nel database. (Un altro processo in background li espirerebbe periodicamente.)

La creazione e il riutilizzo delle sessioni rimane istantanea: le richieste immediatamente successive trovano la sessione nella cache e non colpiscono affatto il database. Le richieste per la stessa sessione una settimana dopo probabilmente non la troveranno nella cache e colpiranno il database una volta, popolando la cache.

Ovviamente è possibile sopraffare questo schema registrando così tante sessioni così velocemente che la maggior parte delle richieste non sarà in grado di trovare sessioni create di recente nella cache e non troverà i dati nel database, perché il database non tenere il passo con la coda. Ma senza la cache + coda, anche una piccola quantità di richiesta ingannerà il server.

    
risposta data 05.04.2015 - 01:40
fonte