View
147
Download
2
Category
Preview:
DESCRIPTION
Analisi comparativa dei sistemi di caching esistenti integrabili con TYPO3 CMS.
Citation preview
TYPO3 TUNINGOltre la “classica” cache
T3Camp Italia 2014, Milano 14-15 marzo
CHI SONO
Gianluca Strafella
Sviluppatore TYPO3 nel team di Webformat
Sviluppatore Magento nel team di Webformat
Contatti
gianluca.strafella@webformat.com
www.webformat.com
DI COSA PARLEREMO
Caching in TYPO3
Altri sistemi di cache
Memcache
Redis
Varnish
Banchmarking dei vari sistemi e comparazione
Quale sistema scegliere ?
CHE COSA VIENE MESSO IN CACHE ?
Cache in TYPO3 cache_core
autoloader, ext_tables.php, ext_localconf.php (typo3temp/Cache/Code/cache_code)
cache_hash risultati di alcune funzioni TYPO3 (p.e. substituteMarkerArrayCached), usata durante il processo
di rendering della pagina
cache_pagesection sezioni della pagina, template TYPOSCRIPT di cui è già stato fatto il parsing
contenuto compresso
cache_pages questa cache deposita le pagine
cache_phpcode non usata dalla versione 6.0
cache_runtime dati specifici della request corrente
cache_rootline cache dedicata al core
CACHING TYPO3
La “classica” cache
Entry identificate univocamente e da tags
Identificatore basato anche su pageUid, utente loggato
o non loggato
Il core definisce e usa diversi framework per la cache
Due interfacce di programmazione:
Frontend cache
Backend cache
CACHING TYPO3
TYPO3 Code (Core, Estensioni)
Frontend(FrontendInterface)
Backend(BackendInterface)
DatabaseBackend
MemcaheBackend
RedisBackend
File Backend
APC Backend
XCacheBackend
Simple File
Backend
NullBackend
PDO
Backend
Transient Memory
Backend
MEMCACHE
Sistema di caching distribuito
Memorizzazione in RAM entry come chiave->valore
(“slab” e “chuncks” )
I valori sono stringhe
Può contenere risultati provenienti dal database, chiamate API, pagine web
Interfaccia API disponibile in molti linguaggi (C, PHP, Java, Python, …)
Free e OpenSource
In TYPO3
Backend Cache integrata nativamente con il core
Nelle chiavi include la costante PATH_site per evitare conflitti su installazioni TYPO3 differenti
REDIS
Caching chiave-valore
Valori semplici o strutturati (strings, hashes, lists, sets and sorted sets)
Persistenza in RAM
Un'istanza REDIS può lavorare su cache multiple senza perdita di performance nel caso di flush della cache.
Sistema di replicazione master-slave
Licenza BSD
In TYPO3 Backend Cache integrato nativamente con il core
VARNISH
HTTP Accellerator (anche conosciuto come Caching Reverse Proxy)
Supporta Load balancer,Failover System
Deposita le risposte su RAM o su DISCO
Ogni connessione di un client viene gestita da un threadseparato o coda
VCL (Varnish Configuration Language) tradotto in codice C per gestire le richieste/risposte
Supporta ESI (Edge Side Includes) per elementi in pagina da non cachare
Open source
In TYPO3 Backend Cache integrato tramite estensioni (moc_varnish,
etc…)
IL BENCHMARKING
Introduction package (TYPO3 6.1.7)
Home page
No USER_INT, pagina messa in cache interamente
Pagine interne
No USER_INT objects, pagina messa in cache interamente
Server
Intel® Core™ i5-2430M CPU @ 2.40GHz
Memoria RAM 4 GB
SO: Ubuntu Release 12.04 (precise) 32-bit
Kernel Linux 3.2.0-59-generic-pae
Banchmarking tools
ab
LE PROVE FATTE
Sulla home page
Richieste 10
Richieste 10, Concorrenza 2
Richieste 1000, Concorrenza 10
Richieste 1000, Concorrenza 100
Richieste 2000, Concorrenza 1000
Sulle pagine interne (media)
examples/text-and-images/
examples/news/
COSA È STATO MISURATO
Numero di richieste per secondo (#/s)
Tempo medio di completamento richiesta (ms)
No concorrenza: tempo medio necessario per eseguire
la richiesta (1 alla volta)
In Concorrenza:
uso della stessa risorsa contemporaneamente
Tempo medio di attesa (ms)
Tempo impiegato per stabilire la connessione al server e
ottenere i primi bit di risposta
NUMERO DI RICHIESTE PER SECONDO
HOME PAGE
3.050
4.310
6.420
1737.620
7.630
7.940
13.230
3070.310
7,040
8.980
8.020
2308.840
5.490
8.360
7.770
2073.430
1484.650
TYPO3
MEMCACHED
REDIS
VARNISH
Richieste 2000, Concorrenza 1000
Richieste 1000, Concorrenza 100
Richieste 1000, Concorrenza 10
Richieste 10 Concorrenza 1
Richieste 10 Concorrenza 2
NUMERO DI RICHIESTE PER SECONDO (HOME
PAGE)
7.630
7.940
13.230
3070.310
TYPO3
MEMCACHED
REDIS
VARNISH
Richieste 2000, Concorrenza 1000
Richieste 1000, Concorrenza 100
Richieste 1000, Concorrenza 10
Richieste 10 Concorrenza 1
Richieste 10 Concorrenza 2
No concorrenza
NUMERO DI RICHIESTE PER SECONDO (HOME
PAGE)
7.040
8.980
8,020
2308.840
TYPO3
MEMCACHED
REDIS
VARNISH
Richieste 2000, Concorrenza 1000
Richieste 1000, Concorrenza 100
Richieste 1000, Concorrenza 10
Richieste 10 Concorrenza 1
Richieste 10 Concorrenza 2
TEMPO MEDIO DI COMPLETAMENTO RICHIESTA
(HOME PAGE)
327.752
231.767
155.666
0.576
131.091
126.022
75.591
0.326
141.988
111.418
124.733
0.433
189.229
119.599
128.710
0.482
0.674
TYPO3
MEMCACHED
REDIS
VARNISH
Richieste 2000, Concorrenza 1000
Richieste 1000, Concorrenza 100
Richieste 1000, Concorrenza 10
Richieste 10 Concorrenza 1
Richieste 10 Concorrenza 2
ms
TEMPO MEDIO DI COMPLETAMENTO RICHIESTA
(HOME PAGE)
327.752
131.091
141.988
189.229TYPO3
MEMCACHED
REDIS
VARNISHRichieste 2000, Concorrenza 1000
Richieste 1000, Concorrenza 100
Richieste 1000, Concorrenza 10
Richieste 10 Concorrenza 1
Richieste 10 Concorrenza 2
ms
TEMPO MEDIO DI ATTESA (HOME PAGE)
2,180.500
1,333.000
719.000
149.500
217.000
47.500
2,292.000
1,675.000
1,766.500
67.000
30,070.000
24,106.500
20,184.000
94.500
1025
TYPO3
MEMCACHED
REDIS
VARNISH
Richieste 2000, Concorrenza 1000
Richieste 1000, Concorrenza 100
Richieste 1000, Concorrenza 10
Richieste 10 Concorrenza 1
Richieste 10 Concorrenza 2
ms
TEMPO MEDIO DI ATTESA (HOME PAGE)
2,180.500
1,333.000
719.000
149.500
217.000
47.500
2,292.000
1,675.000
1,766.500
67.000
30,070.000
24,106.500
20,184.000
94.500
1025
TYPO3
MEMCACHED
REDIS
VARNISH
Richieste 2000, Concorrenza 1000
Richieste 1000, Concorrenza 100
Richieste 1000, Concorrenza 10
Richieste 10 Concorrenza 1
Richieste 10 Concorrenza 2
ms
NUMERO DI RICHIESTE PER SECONDO
PAGINA INTERNA
20.600
13.160
12.600
3348.960
5.840
9.310
7.750
1395.530
9.680
8.490
8.49
1495.130
1252.810
TYPO3
MEMCACHED
REDIS
VARNISH
Richieste 2000, Concorrenza 1000
Richieste 1000, Concorrenza 100
Richieste 1000, Concorrenza 10
Richieste 10 Concorrenza 1
NUMERO DI RICHIESTE PER SECONDO
PAGINA INTERNA
20.600
13.160
12.600
3348.960
9.680
8.490
8.49
1495.130
TYPO3
MEMCACHED
REDIS
VARNISH
Richieste 2000, Concorrenza 1000
Richieste 1000, Concorrenza 100
Richieste 1000, Concorrenza 10
Richieste 10 Concorrenza 1
TEMPO MEDIO DI COMPLETAMENTO RICHIESTA
(PAGINA INTERNA)
79.356
1291.118
117.819
TYPO3
MEMCACHED
REDIS
VARNISH
Richieste 2000, Concorrenza 1000
Richieste 1000, Concorrenza 100
Richieste 1000, Concorrenza 10
Richieste 10 Concorrenza 1
ms
TEMPO MEDIO DI COMPLETAMENTO RICHIESTA
(PAGINA INTERNA)
48.551
75.988
79.356
0.299
171.245
107.449
1291.118
0.171
103.288
117.726
117.819
0.669
0.798
TYPO3
MEMCACHED
REDIS
VARNISH
Richieste 2000, Concorrenza 1000
Richieste 1000, Concorrenza 100
Richieste 1000, Concorrenza 10
Richieste 10 Concorrenza 1
ms
TEMPO MEDIO DI ATTESA (PAGINA INTERNA)
43.500
46.500
49.000
0.001
29,839.000
2,382.500
6,199.500
120.000
16,560.000
15,511.000
17,961.000
110.500
1169.5
TYPO3
MEMCACHED
REDIS
VARNISH
Richieste 2000, Concorrenza 1000
Richieste 1000, Concorrenza 100
Richieste 1000, Concorrenza 10
Richieste 10 Concorrenza 1
ms
SISTEMI DI MONITORAGGIO
HIT VS MISS MEMCACHE-TOOLS, PHPMEMCACHEADMIN
HIT VS MISS … IN REDIS
REDIS-ADMIN
RAM E CPU… IN REDISREDIS-ADMIN
VARNISH
VARNISHSTAT
VARNISH
VARNISHHIST
RAM E CPUMEMCACHEM REDIS,TYPO3
PRO E CONTRO
VARNISH
• Configurazione apache, virtual host, VCL
• Esclusione rami o pagine non in cache Cookies
• Edge Side Includes
• Complessità della pagine (elementi in cache VS elementi che non vanno in
cache)
MEMCACHE
• In caso di Out of memory :“Eviction” -> getta via alcune entry dalla cache
• Se i dati vengono condivisi su più memcache server e qualche server va giù, le
coppie chiave/valore su questo sistema vengono perse
-> CORRUZIONE DELLA CACHE -> costante monitoraggio
REDIS
• Supera i problemi infrastrutturali di Memcache
• Può essere usato come alternativa al database backend per grandi tabelle di
cache.
• Notoriamente richieste più memoria -> costante monitoraggio
E TYPO3 ?
Si difende bene nei confronti di memcache, redis
finchè il sito è semplice e la maggior parte delle pagine
sono cachate
nc_staticfilecache
Dipende dalle prestazioni del server (I/O, configurazioni
MySql Server)
E PERCHÉ NON INTEGRARE ?
cache_hash
risultati di alcune funzioni TYPO3 (p.e. substituteMarkerArrayCached), usata durante ilprocesso di rendering della pagina
Ha senso usare questa cache solo ci sono pagine che non vengono messe in cache (p.e. potrebbe non aver sensoabilitare memcache per questa cache).
cache_pagesection Template TYPOSCRIPT parsed
può essere messa su memcache o database.
cache_pages Questa cache deposita le pagine
ha senso usare il sistema più performante per questa cache, perché la quantità di dati può essere notevole.
ALTRI SISTEMI DI CACHING
CDN (Content Delivery Network)
Rete di nodi (server) distribuiti
Collegati tramite Internet
Contenuti replicati sui nodi della rete
Quando un utente fa una richiesta alla CDN, il DNS
risolve il nodo più vicino
(location, disponibilità, etc…) e serve il client
QUALE SISTEMA SCEGLIERE ?
Il sistema di cache da utilizzare dipende
principalmente da:
Complessità sito
Quantità di pagine da mettere interamente in cache
Traffico
Visite, Picchi di traffico
Ambiente Server
FE/BE Server (S.O.)
Supporto I/O (NFS, etc…)
Tipo di contenuti da mettere in cache
RIFERIMENTI BIBLIOGRAFICI
TYPO3 Cache http://docs.typo3.org/typo3cms/CoreApiReference/CachingFramework/Architecture/Index.ht
ml
Varnish http://www.varnish-cache.org/
http://forge.typo3.org/projects/extension-moc_varnish
http://www.slideshare.net/aoemedia/t3dd12-caching-with-varnish
Redis http://redis.io/
http://try.redis.io/
https://github.com/sasanrose/phpredmin
Memcache http://memcached.org/
http://www.dmitry-dulepov.com/2008/12/how-to-enable-memcached-cache-in-typo3.html
code.google.com/p/phpmemcacheadmin/
GRAZIE PER L'ATTENZIONE
Contatti
gianluca.strafella@webformat.com
http://it.linkedin.com/in/gianlucastrafella
Recommended