arhitecturi de cacheing server side - lvle 2009
DESCRIPTION
Ce inseamna "cache" si la ce foloseste? Cand datele pot deveni inconsistente? La ce se poate face cache? String-uri, cod compilat, rezultate SQL? Ce este un accelerator PHP? Voi raspunde la toate aceste intrebari si multe altele. Exemple pentru PHP si MySQL.TRANSCRIPT
Arhitecturi de cacheingserver-side
Mihai Oaida
- Student Politehnica Timişoara- Web / Software developer Datagroup Int- Instructor tehnologii web http://tehnologii-web.ro
- Freelancer
Arhitecturi de cacheing server-side
Mihai Oaida <[email protected]> 01
Arhitecturi de cacheing server-side
- Ce este un cache?- Medii de stocare- Cache de cod PHP- Cache de string-uri- Cache de rezultate sql- Concluzii
Arhitecturi de cacheing server-side
Mihai Oaida <[email protected]> 02
Ce este un cache?
- mediu rapid de stocare- stochează datele care se accesează des- volatil sau nevolatil- echilibru între spaţiu consumat şi viteză
Arhitecturi de cacheing server-side
Mihai Oaida <[email protected]> 03
Scop Load mai mic pe server
Cerere Procesare Ieşire→ →
Cerere Cache Ieşire→ →
Exemple
• Sesiunile • Documente xhtml de pe un wiki• Date statistice• Date sumar ( Număr de produse per categorie)
Arhitecturi de cacheing server-side
Mihai Oaida <[email protected]> 04
Medii de stocare şi interfeţe
HDD – SATA 2 transfer 300MBps (RAID HDD mai rapid)
timp acces x ms (10^-3) variabil
RAM – DDR2 transfer 3200 – 8500 MBps
timp acces x ns (10^-9) constant
L2 Cache transfer , aprox 35 GBps
USB 2.0transfer , aprox 400Mbps, cicluri I/O limitate
Arhitecturi de cacheing server-side
Mihai Oaida <[email protected]> 05
Soluţii
Cache pe HDDsoluţie simplă, usor de implementathdd este încet, este mecanico soluţie rapidă este scumpă
Cache în RAMsoluţie puţin mai complexăviteză mare de citire/scriereeste ieftin
Arhitecturi de cacheing server-side
Mihai Oaida <[email protected]> 06
Cache de cod PHP
Rularea unui scriptCitire de pe HDD – “compilare” =>opcode
=>rulareAccelerator PHP Modul de PHP Are o zonă de memorie rezervată , ex 32 MbRularea unui script a doua oară
Citire din RAM => rulare Performanţe aprox 10x
Arhitecturi de cacheing server-side
Mihai Oaida <[email protected]> 07
Acceleratoare
APC – PECLxCache http://xcache.lighttpd.net/ , pachet UbuntueAccelerator http://eaccelerator.net port FreeBSDZend
Python : Psyco
Arhitecturi de cacheing server-side
Mihai Oaida <[email protected]> 08
Testare
ab – apache benchmarkEx: ab –n 100 –c 10 http://tehnologii-web.ro
Se pot folosi teste proprii pentru a măsura performanţa
Arhitecturi de cacheing server-side
Mihai Oaida <[email protected]> 09
Cache de string-uri
Deamon care rulează în paralel...… sau modul de PHPAre o zonă de RAM rezervatăPractic un hash table mare
Nu are securitateServerul se restartează => se pierd datele
Arhitecturi de cacheing server-side
Mihai Oaida <[email protected]> 10
Exemple
APCapc_add('text_home',$text);apc_fetch('text_home');
xCache xcache_set($key,$value);
xcache_get($key);
Arhitecturi de cacheing server-side
Mihai Oaida <[email protected]> 11
Memcached
Deamon care rulează în paralelSe poate replica pe n maşiniTot un hash table mare (posibil distribuit)Are conectori în PHP,Ruby,Python,Java,C#, Mysql,etc
Arhitecturi de cacheing server-side
Mihai Oaida <[email protected]> 12
Exemplu: Facebook800 servere dedicate memcachedAprox. 28TB RAM
Exemplu
# ./memcached -d -m 1024 -l server1 -p 12345
Arhitecturi de cacheing server-side
Mihai Oaida <[email protected]> 13
$mem = new Memcache;
/* se conexteaza la server 1 */$mem->connect('server1',12345);
/* seteza pe cheia produse_3 valoarea 23 */$mem->set('produse_3',23,MEMCACHE_COMPRESSED,50);
/* selecteaza o anumita cheie din cache */$valoare = $mem->get('produse_3'); /* inchide conexiunea */ $mem->close();
Mysql query cache
• Din my.conf se poate seta o limită de memorie• Se face cache la SELECT• Update , Insert sau Delete şterg cache-ul pe tabelul respectiv
Arhitecturi de cacheing server-side
Mihai Oaida <[email protected]> 14
Rezultatele se pot vedea cu Munimhttp://munin.projects.linpro.no/
Cache doar la tabelele din care se citesc desex produse DA,comenzi NU
Concluzii
• Web2.0 = trafic => aplicatii care scalează• Este nevoie de arhitecturi de cacheing• În acceaşi bani se pot servi mai multi useri
• Traficul se poate dubla/tripla peste noapte
• Toţi fac cache-ing pe server:Wikipedia,Facebook,Google,Yahoo,Digg,Flickr, etc
Arhitecturi de cacheing server-side
Mihai Oaida <[email protected]> 15
Referinţe
PHP http://www.php.net/apc http://eaccelerator.net http://xcache.lighttpd.net/
MySQL http://dev.mysql.com/doc/refman/5.0/en/query-cache.html
Statistici http://munin.projects.linpro.no/
Arhitecturi de cacheing server-side
Mihai Oaida <[email protected]> 16