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.
2. Arhitecturi de cacheing server-side
Mihai Oaida
- Student Politehnica Timişoara
- Web / Software developer Datagroup Int
- Instructor tehnologii web http://tehnologii-web.ro
- Freelancer
Mihai Oaida <mihai.oaida@gmail.com> 01
3. Arhitecturi de cacheing server-side
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
Mihai Oaida <mihai.oaida@gmail.com> 02
4. Arhitecturi de cacheing server-side
Ce este un cache?
- mediu rapid de stocare
- stochează datele care se accesează des
- volatil sau nevolatil
- echilibru între spaţiu consumat şi viteză
Cerere → Procesare → Ieşire
Cerere → Cache → Ieşire
Scop
Load mai mic pe server
Mihai Oaida <mihai.oaida@gmail.com> 03
5. Arhitecturi de cacheing server-side
Exemple
• Sesiunile
• Documente xhtml de pe un wiki
• Date statistice
• Date sumar ( Număr de produse per categorie)
Mihai Oaida <mihai.oaida@gmail.com> 04
6. Arhitecturi de cacheing server-side
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.0
transfer , aprox 400Mbps, cicluri I/O limitate
Mihai Oaida <mihai.oaida@gmail.com> 05
7. Arhitecturi de cacheing server-side
Soluţii
Cache pe HDD
soluţie simplă, usor de implementat
hdd este încet, este mecanic
o soluţie rapidă este scumpă
Cache în RAM
soluţie puţin mai complexă
viteză mare de citire/scriere
este ieftin
Mihai Oaida <mihai.oaida@gmail.com> 06
8. Arhitecturi de cacheing server-side
Cache de cod PHP
Rularea unui script
Citire de pe HDD – “compilare” =>opcode
=>rulare
Accelerator PHP
Modul de PHP
Are o zonă de memorie rezervată , ex 32 Mb
Rularea unui script a doua oară
Citire din RAM => rulare
Performanţe aprox 10x
Mihai Oaida <mihai.oaida@gmail.com> 07
9. Arhitecturi de cacheing server-side
Acceleratoare
APC – PECL
xCache http://xcache.lighttpd.net/ , pachet Ubuntu
eAccelerator http://eaccelerator.net port FreeBSD
Zend
Python : Psyco
Mihai Oaida <mihai.oaida@gmail.com> 08
10. Arhitecturi de cacheing server-side
Testare
ab – apache benchmark
Ex: ab –n 100 –c 10 http://tehnologii-web.ro
Se pot folosi teste proprii pentru a măsura
performanţa
Mihai Oaida <mihai.oaida@gmail.com> 09
11. Arhitecturi de cacheing server-side
Cache de string-uri
Deamon care rulează în paralel...
… sau modul de PHP
Are o zonă de RAM rezervată
Practic un hash table mare
Nu are securitate
Serverul se restartează => se pierd datele
Mihai Oaida <mihai.oaida@gmail.com> 10
12. Arhitecturi de cacheing server-side
Exemple
APC
apc_add('text_home',$text);
apc_fetch('text_home');
xCache
xcache_set($key,$value);
xcache_get($key);
Mihai Oaida <mihai.oaida@gmail.com> 11
13. Arhitecturi de cacheing server-side
Memcached
Deamon care rulează în paralel
Se poate replica pe n maşini
Tot un hash table mare (posibil distribuit)
Are conectori în PHP,Ruby,Python,Java,C#,
Mysql,etc
Exemplu: Facebook
800 servere dedicate memcached
Aprox. 28TB RAM
Mihai Oaida <mihai.oaida@gmail.com> 12
14. Arhitecturi de cacheing server-side
Exemplu
# ./memcached -d -m 1024 -l server1 -p 12345
$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();
Mihai Oaida <mihai.oaida@gmail.com> 13
15. Arhitecturi de cacheing server-side
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
Rezultatele se pot vedea cu Munim
http://munin.projects.linpro.no/
Cache doar la tabelele din care se citesc des
ex produse DA,comenzi NU
Mihai Oaida <mihai.oaida@gmail.com> 14
16. Arhitecturi de cacheing server-side
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
Mihai Oaida <mihai.oaida@gmail.com> 15
17. Arhitecturi de cacheing server-side
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/
Mihai Oaida <mihai.oaida@gmail.com> 16