Typo3 tuning - Oltre la "classica" cache

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