2012-09-27 9 views
7

Ho un numero di siti con PHP e MySQL, in particolare con MediaWiki in esecuzione e ho bisogno di migliorare le prestazioni. Tuttavia, ho solo una percentuale limitata di CPU che sono autorizzato a utilizzare.Il caching migliora sempre le prestazioni?

La cosa migliore che posso pensare per migliorare le prestazioni è abilitare il caching. Tuttavia, sono confuso: questo migliora davvero le prestazioni in generale o semplicemente migliora la velocità?

Quello che posso pensare è che se la cache usa i file, ci vorrebbe più elaborazione per ottenere il contenuto di questi file. Se utilizzerà le tabelle SQL, ci vorrà più tempo per interrogare queste tabelle, forse il tempo sarà più breve, ma l'utilizzo della CPU sarà maggiore.

È corretto o no? il caching consuma più CPU per dare risultati più veloci o migliora le prestazioni in generale?

+1

Bene, cosa hanno mostrato le vostre misurazioni? – arkascha

+0

"specialmente MediaWiki" implica sì alla tua Q, ma solo il giusto tipo di memorizzazione nella cache. Ad esempio, MW utilizza innodb per impostazione predefinita, quindi la memorizzazione nella cache di MyISAM aiuta a fare clic qui. Leggi le pagine di memorizzazione nella cache di MW. È possibile configurare alcune cache basate su file che fanno una GRANDE differenza in MW per visitatori (cioè la maggior parte) visitatori. – TerryE

+0

Probabilmente dovresti passare attraverso https://www.mediawiki.org/wiki/Manual:Performance_tuning Con MediaWiki, la tua preoccupazione principale è evitare l'analisi wikitext, che è lenta e richiede molta CPU. – Nemo

risposta

4

Al livello di base deve essere utilizzato il caching per archiviare il risultato dei processi ad alta intensità di CPU. Ad esempio, se si dispone di un gestore di immagini lato server che crea un'immagine al volo (ad esempio una miniatura e un'anteprima più grande), allora non si desidera che questa operazione si verifichi ad ogni richiesta: si vorrebbe eseguire questo processo una volta e memorizzare i risultati; Quindi, ogni altra richiesta ottiene il risultato salvato.

Questa è una descrizione estremamente semplificata della memorizzazione nella cache di base e l'uso di un'immagine va bene in questo caso, poiché non è necessario preoccuparsi di dati obsoleti, ovvero quanto spesso cambierà l'immagine effettiva? Nel tuo caso, i database sono estremamente diversi. Se memorizzi i dati nella cache, in che modo puoi garantire che non ci sarà un disallineamento istantaneo tra i tuoi dati reali e i tuoi dati memorizzati nella cache nella cache? Anche interrogare un database non è sempre un compito impegnativo per la CPU (è necessario considerare come il database è progettato in termini di indicizzazione, dimensioni della tabella, ecc.) Ma nella maggior parte dei casi l'interrogazione di un database ben progettato è molto più intensa sull'I/O del disco rispetto è sui cicli della CPU.

In primo luogo, è necessario esaminare la progettazione del database e in secondo luogo le query. Ad esempio sei normalizing your database correctly, le tue query stanno trascinando enormi quantità di dati quando puoi semplicemente archiviare, stai unendo tabelle su campi non indicizzati, le tue clausole where stanno interrogando i campi che potrebbero essere indicizzati (IN è particolarmente negativo in questi casi) .

Si consiglia di ottenere uno query analyzer e di dedicare un po 'di tempo a ottimizzare la struttura della tabella e le query per trovare il collo della bottiglia prima di esaminare cambiamenti più drastici.

0

Devi profilare il tuo aspetto e scoprire dove sta succedendo la bottiglia. Il Cacheing è il miglior tipo di caricamento della pagina, quello che non colpisce affatto il server. È possibile creare un sistema di caching molto semplice che ricarica solo le informazioni ogni 15 minuti. Quindi, se la pagina è stata memorizzata nella cache negli ultimi 15 minuti, fornisce loro una pagina pre-renderizzata. La pagina caricata una volta, crea un file temporaneo. ogni 15 minuti ne crei uno nuovo (se qualcuno carica quella pagina).

La memorizzazione nella cache memorizza solo un file per il quale il server ha già eseguito il lavoro. Il lavoro per creare il file è già stato fatto e lo stai semplicemente archiviando.

1

Riferimento: http://msdn.microsoft.com/en-us/library/ee817646.aspx

Rappresentazione: tecniche cache vengono comunemente utilizzati per migliorare le prestazioni delle applicazioni memorizzando dati pertinenti il ​​più vicino possibile al consumatore dati, evitando così ripetitivo creazione dei dati, l'elaborazione e trasporto. Ad esempio, la memorizzazione di dati che non cambiano, come un elenco di paesi, in una cache può migliorare le prestazioni riducendo al minimo le operazioni di accesso ai dati ed eliminando la necessità di ricreare gli stessi dati per ciascuna richiesta.

Scalabilità: gli stessi dati, funzionalità aziendali e frammenti di interfaccia utente sono spesso richiesti da molti utenti e processi in un'applicazione. Se queste informazioni vengono elaborate per ogni richiesta, vengono sprecate risorse preziose che ricreano lo stesso output. Invece, è possibile memorizzare i risultati in una cache e riutilizzarli per ogni richiesta. Ciò migliora la scalabilità della tua applicazione perché con l'aumentare della base di utenti, la richiesta di risorse del server per queste attività rimane costante. Ad esempio, in un'applicazione Web il server Web è necessario per eseguire il rendering dell'interfaccia utente per ogni richiesta utente. È possibile memorizzare nella cache la pagina di rendering nella cache di output ASP.NET da utilizzare per richieste future, liberando risorse da utilizzare per altri scopi.

I dati di memorizzazione nella cache possono anche contribuire a ridimensionare le risorse del server di database. Memorizzando i dati utilizzati di frequente in una cache, vengono eseguite meno richieste di database, il che significa che possono essere offerti più utenti.

Disponibilità: Occasionalmente i servizi che forniscono informazioni alla vostra applicazione potrebbero non essere disponibili. Archiviando tali dati in un altro luogo, l'applicazione potrebbe essere in grado di sopravvivere a guasti del sistema come latenza di rete, problemi di servizio Web o guasti hardware. Ad esempio, ogni volta che un utente richiede informazioni dall'archivio dati, è possibile restituire le informazioni e memorizzare anche i risultati, aggiornando la cache su ciascuna richiesta. Se l'archivio dati diventa quindi non disponibile, è ancora possibile soddisfare le richieste utilizzando i dati memorizzati nella cache fino a quando l'archivio dati non ritorna online.

+3

Con tutto il dovuto rispetto, non è solo una risposta copia e incolla da qui: http://books.google.co.uk/books?id=MEOmjpKLmqYC&pg=PA414&lpg=PA414&dq=%22Performance+:+Caching+techniques + sono + comunemente + usati% 22 & source = bl & ots = nqFchRBGQH & sig = jdQfh6sIm17he94PhxlattcXeeM & hl = it & sa = X & ei = yR9kUO-jGefW0QWekoH4DQ & ved = 0CB4Q6AEwAA # v = onepage & q =% 22Performance% 20% 3A% 20Caching% 20techniques% 20are% 20commonly% 20used% 22 & f = false - se hai intenzione di farlo, almeno fai riferimento alla tua fonte per dare credito. –

+0

Voglio fornire la migliore soluzione. Così faccio surf on net e fornisco la migliore soluzione qui. Non ha senso? cosa ne pensi ? –

+0

Sì, circa il 35% della pasta è rilevante per rispondere alla domanda originale. – user989056

0

Si utilizzano i termini "prestazioni" e "velocità". Immagino che "performance" si riferisca ai cicli della CPU sul server web e che "velocità" si riferisca al tempo necessario per servire la pagina all'utente. Si desidera massimizzare le "prestazioni" del server Web (riducendo il numero totale di cicli della CPU necessari per servire le pagine) massimizzando al contempo la "velocità" (riducendo il tempo necessario per servire una pagina Web).

La buona notizia per voi è che il Caching può migliorare entrambe queste metriche allo stesso tempo. Memorizzando nella cache il contenuto, crei una pagina di output che è archiviata nella cache e può essere offerta ripetutamente agli utenti direttamente senza dover rieseguire il codice PHP che originariamente ha creato questa pagina di output (riducendo così i cicli della CPU). Il recupero di una pagina cache dalla cache consuma meno cicli della CPU rispetto alla riesecuzione del codice PHP.

Il caching è particolarmente utile per le pagine Web che sono generalmente le stesse per tutti gli utenti che richiedono la pagina - ad esempio in un wiki e per pagine che generalmente non cambiano troppo spesso - di nuovo, un wiki.

0

"Migliorare le prestazioni" suona come alcune delle e-mail ricevo ...

Ci sono due cose, interconnessi che accadono qui. Uno è "quanto tempo ci vuole per servire una determinata richiesta?", E l'altro è "quante richieste posso servire contemporaneamente dato le mie risorse limitate?". Le persone tendono ad usare uno o entrambi questi concetti quando parlano di prestazioni.

Il caching può aiutare con entrambe queste cose.

La strategia di caching più efficace utilizza risorse esterne alle macchine per memorizzare nella cache le tue cose: gli esempi più ovvi sono il browser dell'utente o un CDN. Immagino che non sia possibile utilizzare un CDN, ma dedicando un po 'di impegno all'impostazione delle intestazioni della cache HTTP, è possibile ridurre il numero di richieste al server di risorse statiche o lente piuttosto drammaticamente.

Per contenuto dinamico, in genere la pagina Web generata mediante l'esecuzione di query sul database, la successiva strategia di caching più efficace consiste nel memorizzare nella cache l'HTML generato da (parti di) la pagina. Ad esempio, se nella tua home page hai una casella "oggetti più popolari", di solito vengono eseguite un paio di query di database moderatamente complesse e poi un codice di back-end "trasforma dati in HTML". Se è possibile memorizzare nella cache l'HTML, si salvano sia le query del database sia lo sforzo della CPU di trasformare i dati in HTML.

Se ciò non è possibile, potrebbe essere possibile memorizzare nella cache il risultato di alcune query del database. Ciò aiuta a ridurre il carico del database e in genere riduce anche il carico sul server Web: il codice richiesto per eseguire la query del database e gestire i risultati è solitamente più oneroso rispetto al recupero dell'elemento dalla cache; perché è più veloce, consente di gestire la richiesta più rapidamente, liberando più rapidamente le risorse. Ciò riduce il carico sui server per una singola richiesta e, quindi, consente di servire più richieste simultanee.

Problemi correlati