Domanda

Un approccio alla elevata scalabilità è quello di utilizzare il carico di rete bilanciamento di dividere carico di elaborazione tra i diversi server.

Una sfida che questo approccio presenta è in cui i server sono stato a conoscenza - la memorizzazione di stato utente in una "sessione".

Una soluzione a questo problema è "sessione sticky" (alias "affinità di sessione"), in cui ogni utente viene assegnato a un singolo server e le sue / suoi dati dello stato è contenuto sul server esclusivamente per tutta la durata della sessione.

Quali sono i pro ei contro di un approccio "sticky sessione"? Si usa e se è così è soddisfatto con esso?

È stato utile?

Soluzione

Pro:

  • è easy-- cambiamenti app richiesto.
  • meglio utilizza le cache RAM locali (ad esempio cercare profilo utente una volta, la cache, e può ri-utilizzarlo nelle visite successive dello stesso utente)

Contro:

  • se il server va giù, la sessione è persa. (Notare che questa è una truffa di memorizzare informazioni di sessione in locale sul web server-- non di sessioni di appiccicoso per sé). se quello che c'è nella sessione è veramente importante per l'utente (ad esempio un progetto di e-mail) o al sito (ad esempio, un carrello della spesa) e poi perdere uno dei server può essere molto doloroso.
  • a seconda implementazione "sticky" nel bilanciamento del carico, può diretto carico diverso da alcuni server contro gli altri
  • portando una nuova linea di server non immediatamente dare i nuovi lotti di server di load-- se si dispone di un sistema di bilanciamento del carico dinamico per affrontare picchi, viscosità può rallentare la vostra capacità di rispondere rapidamente a un picco. Detto questo, questo è un po 'un caso d'angolo e davvero si applica solo ai siti molto grandi e sofisticati.
  • se avete relativamente pochi utenti, ma il traffico di un singolo utente può sommergere un server (ad esempio pagine complesse con SSL, AJAX, immagini generate dinamicamente, compressione dinamica, ecc), quindi stickines possono danneggiare i tempi di risposta degli utenti finali dal momento che non è la diffusione del carico di un singolo utente in modo uniforme tra i server. Se si dispone di un sacco di utenti simultanei, questo è un non-problema dal momento che tutti i server saranno sommersi!

Ma se si deve utilizzare lo stato di sessione di server locale, sessioni appiccicoso sono sicuramente la strada da go-- e anche se non si utilizza server locale di stato della sessione, la viscosità ha benefici quando si tratta di memorizzare nella cache di utilizzo (vedi sopra ). Il tuo bilanciamento del carico dovrebbe essere in grado di guardare i cookie HTTP (non solo di indirizzi IP) per determinare la viscosità, dal momento che gli indirizzi IP possono cambiare nel corso di una singola sessione (ad esempio un computer portatile attracco tra una rete cablata e wireless).

Ancora meglio, non utilizzare lo stato della sessione sul server web a tutti! Se lo stato della sessione è molto doloroso perdere (ad esempio carrelli della spesa), conservarlo in un database centrale e cancellare le vecchie sessioni periodicamente. Se lo stato della sessione non è critica (ad esempio username / avatar URL), poi bastone in un cookie-- solo assicurarsi che non stai spingendo troppi dati nel cookie.

Le versioni moderne di Rails, per impostazione predefinita, le variabili di sessione negozio in un cookie per le ragioni di cui sopra. Altri framework web possono avere un "negozio nel cookie" e / o "store DB in" opzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top