Domanda

Mentre lo facevamo in passato, vorrei raccogliere informazioni utili per tutti coloro che passano al bilanciamento del carico, poiché sono problemi di cui il tuo codice deve essere a conoscenza.

Siamo passati da un server Apache a calamari come proxy inverso / bilanciamento del carico con tre server Apache dietro.

Stiamo usando PHP / MySQL, quindi i problemi potrebbero differire.

Cose che dovevamo risolvere:

Sessions

Siamo passati da " default " sessioni php (file) in sessioni memcached distribuite. Soluzione semplice, deve essere fatta. In questo modo, non hai nemmeno bisogno di "sessioni appiccicose" sul tuo bilanciamento del carico.

Caching

Al nostro apc-cache non distribuito per server web, abbiamo aggiunto un livello memcached anoter per la cache di oggetti distribuiti e sostituito con esso tutti i sistemi di filecaching vecchi / obsoleti.

Upload

I caricamenti vanno in una cartella condivisa (nfs).

Cose che abbiamo ottimizzato per la velocità:

File statici

Il nostro NFS principale esegue un lighttpd, offrendo immagini (anche caricate dall'utente). Squid ne è consapevole e non interroga mai i nostri nodi apache per le immagini, il che ha dato un buon incremento delle prestazioni. Squid è inoltre configurato per memorizzare nella cache quei file in ram.

Che cosa hai fatto per preparare il tuo codice / progetto per il bilanciamento del carico, qualsiasi altra preoccupazione per le persone che pensano a questa mossa e quale piattaforma / lingua stai usando?

È stato utile?

Soluzione

In questo caso:

Per i nodi http, faccio un forte sforzo per una singola immagine di sistema (ocfs2 va bene per questo) e uso libbra o crocevia come un bilanciamento del carico, a seconda dello scenario. I nodi dovrebbero avere un piccolo disco locale per lo scambio e per evitare la maggior parte (ma non tutti) i mal di testa dei CDSL.

Quindi porto Xen nel mix. Se si inserisce una piccola quantità temporale di informazioni su Xenbus (ovvero la quantità di memoria virtuale che Linux ha effettivamente promesso ai processi per VM aka Committed_AS), è possibile rilevare rapidamente un bilanciamento del carico morto cerebrale e regolarlo. Anche Oracle ci è riuscito ... e ora sta lavorando per migliorare il driver dei palloncini in Linux.

Dopodiché guardo il costo della suddivisione dell'utilizzo del database per una data app su sqlite3 e qualunque cosa db voglia l'app in modo nativo, mentre mi rendo conto che devo dividere il db in modo che posix_fadvise () possa fare il suo lavoro e non inquinare il kernel buffer inutilmente. Poiché la maggior parte dei servizi DBMS desidera eseguire il proprio buffering, è necessario anche consentire loro di eseguire il proprio clustering. Questo impone davvero il tipo di cluster DB che utilizzo e cosa faccio al driver dell'aerostato.

I server Memcache si avviano quindi da un initrd scarno, mentre il dominio privilegiato controlla la loro memoria e l'utilizzo della CPU in modo da sapere quando avviare di più.

La scelta dell'heartbeat / acquisizione dipende davvero dalla rete data e dall'utilizzo previsto del cluster. È difficile generalizzare quello.

Il risultato finale è in genere 5 o 6 nodi fisici con un bel po 'di memoria che avvia un monitor di macchina virtuale + guest mentre è collegato a un archivio con mirroring.

Anche l'archiviazione è difficile da descrivere in termini generali .. a volte uso il cluster LVM, a volte no. Il non cambierà quando LVM2 finalmente si allontana dalla sua attuale API basata su stringhe.

Infine, tutto questo coordinamento si traduce in qualcosa come Augeas aggiornando le configurazioni al volo, sulla base di eventi comunicati tramite Xenbus. Ciò include ocfs2 stesso o qualsiasi altro servizio in cui le configurazioni non possono risiedere su una singola immagine di sistema.

Questa è davvero una domanda specifica per l'applicazione. Puoi fare un esempio? Adoro memcache, ma non tutti possono trarne vantaggio dall'utilizzo, ad esempio. Stiamo esaminando la tua configurazione o stiamo parlando delle migliori pratiche in generale?

Modifica

Mi dispiace di essere così incentrato su Linux ... è in genere quello che uso quando si progetta un cluster.

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