Squid o altre cache HTTP con l'archivio cache SSD?


9

Sto pensando di impostare una cache di calamari (o possibilmente vernice) su un sistema con unità SSD.

L'ovvio vantaggio è che questi sistemi hanno ottime velocità di LETTURA e mi aspetto che i miei rapporti di hit siano abbastanza alti.

Supponiamo che io possa mettere 7 SSD in una configurazione RAID. (ci sono alcuni casi che mi permetteranno di impacchettare molto di più)

Domande sull'implementazione:

  • Dovrei usare RAID0? (Mi aspetto che un disco alla fine fallisca, quindi questo sembra pericoloso.)

  • Dovrei usare RAID10? (Questo dimezza il mio footprint del disco, che è costoso.)

  • Dovrei usare RAID5? (È noto che gli SSD hanno prestazioni di scrittura e limiti di scrittura "cattivi", e tutte le scritture di parità extra possono rallentare notevolmente.)

  • Devo solo trattare ogni disco come il proprio archivio dati squid? (in che modo squid gestisce più archivi di dati? e cosa succede se / quando uno fallisce?)

  • Devo ignorare i datastore e fare in modo che gli SSD si trasformino in grandi partizioni SWAP e lasciare che la VM Linux faccia il possibile? (sembra sciatto)

Qualsiasi consiglio da parte di persone che usano SSD in ambienti di produzione sarebbe molto apprezzato. (specialmente se li stai usando per le cache HTTP)


+1 per una domanda interessante, non ho mai pensato di creare unità solo in una grande partizione di swap
Bob,

Sì, sicuramente interessante ... anche se sono fortemente incline a non cadere nel carrozzone SSD e aggiungere semplicemente più RAM per quei soldi.
Oskar Duveborn,

Purtroppo, l'impronta della cache di cui ho bisogno non si adatta alla RAM. Ho già inserito nella cache cache di calamari supportate da RAM per quegli oggetti.
Joel K,

Risposte:


8

Abbiamo usato la vernice su dischi SSD negli ultimi 9 mesi, ha funzionato molto bene per noi. In precedenza abbiamo usato una memoria di calamari solo cache con un livello di carpa. Funzionava, ma la frammentazione della memoria era un vero problema che richiedeva frequenti riavvii. Squid 2.x utilizzerà anche un solo core che lo rende piuttosto inefficiente sull'hardware corrente.

Per il nostro sito, che è molto compatibile con la cache, vediamo circa il 10% di utilizzo della CPU su una macchina a 8 core che serve 100Mbit / s di traffico. Nei nostri test abbiamo esaurito la larghezza di banda prima di raggiungere i limiti della CPU con 2 porte da 1 GB.

Ho qualche consiglio per eseguire la vernice con una cache SSD.

  • Le prestazioni di scrittura casuale contano davvero. Abbiamo provato diversi fornitori per unità SSD prima di installarci su Intel x-25m. Abbiamo visto alcuni post di appena .1MB / s per scritture casuali 4K, con x-25m riceviamo scritture casuali 4k 24MB / s.

  • Raid0. La cache in 2.0 non è persistente, quindi non è necessario preoccuparsi della ridondanza. Questo fa male il riavvio, ma quelli sono rari. Puoi fare cose come caricare una nuova configurazione ed eliminare gli oggetti senza riavviare.

  • modalità mmap. La cache delle vernici può essere mmapad su un file o usare lo spazio di swap. L'uso dello swap non ha funzionato bene per noi, tende a utilizzare più larghezza di banda di I / O per servire la stessa quantità di traffico. C'è un readahead a 4 settori nel codice di swapin di Linux, abbiamo scritto una patch per rimuoverlo ma non l'abbiamo provato in produzione.

  • Schedulatore scadenze. Con 2.6.28+ questo è a conoscenza di ssd e funziona bene. Abbiamo provato noop, ma abbiamo scoperto che la scadenza era più giusta poiché la larghezza di banda di I / O si riduce.

  • Disabilita la lettura in anticipo. Poiché non vi è alcun ritardo di rotazione, non ha senso leggere ulteriori dati solo perché potresti averne bisogno. la larghezza di banda di I / o è preziosa su queste cose.

  • Esegui 2.6.28+. mmap di molto spazio su Linux offre al gestore della memoria un buon allenamento, ma le patch split lru aiutano molto. L'utilizzo della cpu di kswapd è calato molto quando abbiamo aggiornato.

Abbiamo pubblicato il nostro file vcl e diversi strumenti che utilizziamo con vernice nel testo del link . Il vcl include anche un trucco accurato che implementa un server geoiplookup molto veloce basato sul database maxmind.


1

Non sto usando SSD come cache HTTP, ma posso fare queste osservazioni:

Non tutti gli SSD sono uguali, quindi devi stare molto attento a scegliere quelli decenti. FusionIO produce SSD supportati da PCIe che sono veramente performanti (con capacità relativamente bassa), ma costosi. Gli SSD SLC X25-E di Intel funzionano davvero bene e sono più convenienti, ma comunque a bassa capacità. Fai la tua ricerca! Consiglio vivamente le varianti SLC X25-E, poiché le sto usando nei sistemi di produzione.

Ci sono altri SSDS là fuori che possono darti una grande velocità sequenziale di lettura / scrittura, ma la cosa importante per qualcosa come una cache è l'Io casuale e molti SSD daranno approssimativamente le stesse prestazioni casuali dei dischi rotanti. A causa della scrittura di effetti di amplificazione su SSD, i dischi rotanti spesso offrono prestazioni migliori. Molti SSD hanno controller di scarsa qualità (ad es. Controller JMicron meno recenti), che possono subire prestazioni significativamente degradate in alcune situazioni. Anandtech e altri siti fanno buoni confronti con strumenti come iometer, controlla lì.

E, naturalmente, gli SSD sono piccoli. L'Intel X25-E, che direi essere il miglior SSD SATA che abbia mai visto, arriva solo nelle varianti da 32 e 64 GB.

Per i livelli RAID, si applicano ancora le note sulle prestazioni RAID standard. Una scrittura su un RAID 5 comporta baicamente la lettura del blocco dati che si intende modificare, la lettura del blocco di parità, l'aggiornamento della parità, la scrittura del blocco di dati e la scrittura della parità, quindi continuerà a fornire prestazioni peggiori rispetto ad altri RAID livelli, anche con SSD. Tuttavia, con unità come l'X25-E con prestazioni I / O casuali così elevate, questo probabilmente conta meno - poiché continuerà a sovraperformare l'Io casuale sui dischi rotanti per un array di dimensioni simili.

Da quello che ho visto, la larghezza di banda del controller RAID è satura troppo presto per ottenere il massimo beneficio da un set RAID a 7 dischi, almeno per quanto riguarda le prestazioni sequenziali. Non è possibile ottenere più di circa 800 MB / s dagli attuali modelli di controller SATA (3ware, areca ecc.). Avere array più piccoli, su più controller (ad es. Diversi RAID1 anziché un singolo RAID10) migliorerà questo, sebbene le prestazioni individuali di ciascun array ne risentano.

Per quanto riguarda una cache HTTP, penso che saresti meglio servito con una discreta gamma di dischi rotanti e un sacco di RAM. Gli oggetti a cui si accede frequentemente rimarranno nella cache di memoria - nella cache interna di squid o nella cache fs del sistema operativo. Dare semplicemente a una macchina più ram può ridurre significativamente il caricamento del disco a causa di ciò. Se stai eseguendo una cache di calamari di grandi dimensioni probabilmente avrai bisogno di molto spazio su disco e gli SSD ad alte prestazioni avranno ancora una capacità relativamente bassa.


Perfino l'X25-M è utilizzabile
Pirolistico

Ho fatto i miei compiti e so di evitare i JMicron. Stavo principalmente prendendo in considerazione l'X25-M (Intel MLC) e forse la più recente serie (non JMicron) OCZ Vertex.
Joel K,

caspita, il vertice ocz ha una scrittura casuale massima inferiore rispetto persino a x25-m !!!
Pirolistico

1

Non ho molta familiarità con le unità SSD, ma posso parlare del tipo di architettura che ho usato che può aiutare a risolvere alcuni dei tuoi problemi.

fratelli

Nel mio caso ho creato quattro server con 16 GB di RAM ciascuno. Ho impostato 9 GB come cache di memoria in uso per Squid. Li ho configurati come un insieme di fratelli in modo che una query a un server avrebbe interrogato gli altri prima di cercare i dati. Complessivamente avevo 36 GB di cache di memoria. Non supererei quattro fratelli mentre la comunicazione tra loro inizia a impantanarsi.

VIP

Ho configurato un VIP per i quattro server con cui parlare il client. Ciò ha risolto ciò che accade quando un server si arresta.

Bambini

Ho impostato la mia applicazione Web per eseguire una query su un server Squid locale in esecuzione su 127.0.0.1. Quindi ha configurato il genitore di questa istanza di Squid come VIP. Ciò consente un failover molto rapido in caso di caduta dell'intero VIP. Se i genitori non rispondono, il bambino interroga direttamente i servizi. È anche utile se stai utilizzando un singolo server Squid e non hai un VIP. Naturalmente se l'istanza Squid locale sul tuo server web va giù tutto si ferma.

Calamaro stesso

Non ho davvero guardato 3.0, ma 2.x è ancora single thread. A un certo punto si esauriranno i buffer CPU o TCP. Spargerei la cache su 2-3 caselle in meno, se possibile. Inoltre, potresti voler pianificare di partizionare le tue farm Squid in futuro se vedrai crescere il sistema.

In ogni caso buona fortuna con la tua build SSD. Sono interessato a sapere come andrà a finire perché probabilmente seguirò quella strada in futuro.


0

Perché stai considerando anche il raid 10 o 5. Vuoi esibirti qui. Non ti importa se le unità si guastano, dato che è solo una cache.

Usa il raid 0 o tienili separati. Penso che separare sarebbe meglio, dal momento che un guasto al disco non eliminerebbe l'intera cache.


Quanto bene recupera Squid se cade un singolo archivio dati? (ovviamente ho bisogno di provarlo) RAID5 è un compromesso se Squid non è aggraziato in caso di fallimento di un datastore.
Joel K,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.