Io cache, tu database

download Io cache, tu database

If you can't read please download the document

Transcript of Io cache, tu database

Io cache, tu database

Daniel Londero

\

Daniel Londero

Sviluppatore PHP dal 2005Utilizzo prevalentemente Symfony dal 2007Dedico tempo alla community in vari modi:

- faccio parte del consiglio direttivo del grusp che l'associazione che organizza phpDay/jsDay e supporta altre associazioni a realizzare eventi in tutta Italia

- uno dei fondatori del PUG Friuli

- symfony: traduzione documentazione / bugs

Nel tempo libero mi dedico al running

Autore

Non avendo gi abbastanza impegni ora anche autorePHP Best Practices in anteprima al phpDay

Il primo libro italiano di questo genere. Dalla community per la community.

Gli autori fanno parte del GrUSP ed i temi trattati sono davvero interessanti.

Mio capitolo dedicato al performance profiling delle applicazini PHP

http://leanpub.com/lavorare-da-casa

Autore

Ci ho preso gusto...Da oltre due anni lavoro da casaHo deciso di raccontare la mia esperienzaSto scrivendo questo libro

Partiamo da...

Punto di partenza: siti o applicazione le cui performance sono sono il massimo.

Posso scommettere un caff che almeno 1-2 persone per ogni fila di sedie si trovato in una situazione del genere.

In situazioni del genere molto spesso il database il primo elemento verso cui si punta il dito, a volte questo vero anche se effettivamente lui fa quello che gli si dice di fare...

Si pu quindi affermare che si utilizza il db in modo illecito, non lui ad essere cattivo a prescindere ma lo sviluppatore che ha sbagliato qualcosa....

Per arrivare a...

Avere un sistema pi performante grazie ad alcuni accorgimenti che permettono di sfruttare meglio le grisorse a disposizione, in particolare la memoria, oltre che utilizzare gli strumenti in modo corretto e non snaturandoli

L'obiettivo quello di integrare lo stack a disposizione senza imporre migrazioni complete PICCOLE MODIFICHE GRANDI RISULTATI

Nuova applicazione

Il caso pi tipico quello di una nuova applicazione in cui...

Tutto fatto sfruttando il db tanto il traffico basso e la mole di dati da gestire piccola.

Ogni operazione che richiede di scrivere/leggere dati viene fatta con il database

Numeri piccoli, tutto funziona

503, 504...

Succede poi che

si ottiene il successo ipotizzato o

succede l'inaspettato ed il sito viene sommerso dalle visite che inevitabilmente rendono il servizio inaccessibile.

Ci che funzionava per 1000 utenti non funziona pi per 10000...ed inevitabilmente fanno la loro comparsa errori di questo tipo a seconda delle configurazione dello stack...

503 service unavailable504 gateway timeout

Database lento

Semplificando parecchio il discorso, il collo di bottiglia principale, parlando di limiti fisici, rappresentato dai tempi di seek dei dischi su cui il db risiede per posizionare la testina sul punto esatto del disco per leggere le informazioni..

Questo problema diventa pi marcato man mano che la quantit di dati aumenta e che il caching effettivo diventa impossibile.

Scalare?

Ovviamente il primo pensiero quello di mettere mano al portafoglio per scalare l'architettura verticalmente (male) od orizzontalmente (bene) andando inevitabilmente ad aumentare la complessit del sistema.

La figura non tecnica dice se serve facciamo spendere il cliente.

Migrare completamente verso altri prodotti che reputiamo pi performanti.

Il giusto strumento

Prima per forse il caso di provare a sfruttare gli strumenti gi a disposizione in modo migliore, puntando sui loro punti di forza e non pesando sui loro punti deboli...

Introdurre strumenti a basso impatto per quanto riguarda lo stack

Che integrano e non richiedono una migrazione completa di parti dell'applicazione

La memoria

Area ad accesso rapido sia in lettura che scrittura, operazioni eseguite a basso costo. Inoltre SEMPRE gi a disposizione.

Ovviamente ha dei limiti, primo fra tutti non persistente quindi OCCHIO a cosa ci fate l dentro!

Ok per c' bisogno di qualcosa che ci permetta di utilizzarla facilmente perch da buoni sviluppatori siamo pigri...

Quali strumenti?

MemcachedSistema distribuito di caching in memoria degli oggetti. Key-value store per stringhe e oggetti dalla natura generica utilizzato principalmente per ottimizzare le performance di applicazioni dinamiche alleviando il carico sui database.

Redisadvanced key-value store.often referred to as a data structure server since keys can contain strings, hashes, lists, sets and sorted sets.Aggiunge la persistenza dei dati.

Vediamo dei casi d'uso...

Banner

Gestione ed erogazione banner.

Poche scritture, contenuti cambiano con bassa frequenza.

Molte letture perch necessario far ruotare le creativit e non possibile mettere in cache.

Spostare tutto in memoria.

L'anno scorso verso luglio -40M query/giorno con questo scherzetto. Grafico in picchiata della cpu dei db slave...purtroppo non l'ho trovato.

MEMCACHED

Contatori

Impression, views, click, sondaggi...

Tutti write-intensive task per il db.

Il segreto quello di incrementare il valore di una chiave per un certo periodo per poi fare scritture ad intervalli regolari.

VEDERE COMANDI PER SCRITTURA SICURA

MEMCACHED / REDIS

Utenti online

Caso classico per avere un punto centralizzato in cui verificare se l'utente online o meno. Il lifetime di una chiave calza a pennello e leggendo dalla memoria non devo fare operazioni dispendiose sul db ad ogni visualizzazione.

Posso inoltre rinnovare il lifetime dopo l'esecuzione di particolari azioni che mi assicurano la presenza dell'utente.

MEMCACHED

Code / Liste

Tutti i casi del tipo

- ultimi commenti inseriti dagli utenti- ultimi visitatori del tuo profilo- ultimi qualcosa...

Non ha senso dover ordinare dati se ci servono semplicemente nell'ordine in cui sono stati inseriti.

LISTE: inserisco commenti con LPUSH al momento della loro creazione, posso impostare dimensione massima LTRIM 0 100, leggo dalla lista ed eventualmente fall back sul db se non ci sono abbastanza elementi

REDIS

Classifiche

Esempio comune difficile da modellare con buone prestazioni su DB non in memoria: prendere un elenco di elementi, ordinarli in base ad un punteggio, aggiornato in real time, con molti aggiornamenti ogni secondo...

Pensate ad un gioco online per esempio dove- mostrare la classifica dei primi 100- mostrare la posizione del singolo utenteQueste operazioni sono banali utilizzando gli INSIEMI ORDINATI (SORTED SETS) anche se si ha a che fare con milioni di utenti e milioni di nuovi punteggi ogni minuto.

ZADD leaderboard ZREVRANGE leaderboard 0 99ZRANK leaderboard

Domande?

Potrebbe essere finito il tempo, qui ci sono dei miei biglietti da visita. Prendeteli pure. Mi trovate pi tardi all'aperitivo, alla serata social e anche domani sar disponibile per qualsiasi informazioni. Fermatemi senza problemi che ci facciamo una chiacchierata.

@dlondero

Seguitemi su twitter, contattatemi pure per qualsiasi curiosit o informazione...

https://joind.in/talk/view/6380

Grazie!

@dlondero

Votate per favore il talk su joind.in, siate critici senza problemi, date suggerimenti e spunti per migliorare, fatelo per tutti i talk che seguite. Aiuta gli speaker a migliorarsi ed aiuta gli organizzatori a migliorare i contenuti della conferenza per le prossime edizioni.

GRAZIE!

Credits

http://www.flickr.com/photos/spacial/6245116230/http://www.flickr.com/photos/drmilhones/2460351604/http://www.flickr.com/photos/nateone/4794181806http://www.flickr.com/photos/69839820@N00/486723779/http://www.flickr.com/photos/mattnicklas/6261197281/http://www.flickr.com/photos/68751915@N05/6757871357/http://www.flickr.com/photos/kopitehtarik/4384171851/http://www.flickr.com/photos/video4net/4103720648http://www.flickr.com/photos/williamhook/3118248600/http://www.flickr.com/photos/clarkzip/5586120117/http://www.flickr.com/photos/molinarius/4570545024/http://www.flickr.com/photos/che_fox/213033846/http://www.flickr.com/photos/pcmr/5418500303/http://www.flickr.com/photos/spreenkler/3808466276

Click to edit the outline text formatSecond Outline LevelThird Outline LevelFourth Outline LevelFifth Outline LevelSixth Outline LevelSeventh Outline LevelEighth Outline LevelNinth Outline Level