Drupal gyorstárazási stratégiák
Upcoming SlideShare
Loading in...5
×
 

Drupal gyorstárazási stratégiák

on

  • 1,700 views

 

Statistics

Views

Total Views
1,700
Views on SlideShare
1,694
Embed Views
6

Actions

Likes
0
Downloads
5
Comments
0

3 Embeds 6

http://www.slideshare.net 3
http://www.fzolee.hu 2
http://webcache.googleusercontent.com 1

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Drupal gyorstárazási stratégiák Drupal gyorstárazási stratégiák Presentation Transcript

  • Drupal gyorstárazási stratégiák Fehér János (Aries) 2009.10.29.
  • 2009. 10. 29. Pár szóban az előadóról
    • 1998: <?php echo 'Hello World'; ?>
    • 2002: Mindworks-Networking http://mindworks.hu
    • 2005-: Csak Drupal alapú honlapok
    • Gtalk: [email_address] MSN: [email_address] Skype: aries_mindworks
  • 2009. 10. 29. Mitől lassul?
    • Nem átgondolt működés / megvalósítás
    • A szoftverrendszer túl komplex
    • A PHP lassú
    • Rosszul beállított környezet (web, db...)
    • Kevés a vas
  • 2009. 10. 29. Nem átgondolt működés $res_uid = db_query(„SELECT DISTINCT(uid) FROM {files}”); while ($uid = db_result($res_uid)) { $res_name = db_query(„SELECT name FROM {users} WHERE uid = %d”, $uid); while ($name = db_result($res_name)) { ... } } $res_uid = db_query(„SELECT DISTINCT(uid) FROM {files}”); while ($uids[] = db_result($res_uid)) { } $uid_list = implode(„,”, $uids); $res_name = db_query(„SELECT name FROM {users} WHERE uid IN (%s)”, $uid_list); while ($name = db_result($res_name)) { ... } VS
  • onkoltseg.hu Nem átgondolt fejlesztés #2
    • Devel modul ( http://drupal.org/project/devel )
    • debug_backtrace() (PHP)
    • Valgrind / Cachegrind / Xdebug
    • Apache jMeter ( http://jakarta.apache.org/jmeter )
  • 2009. 10. 29. A szoftverrendszer túl komplex
    • Devel modul ( http://drupal.org/project/devel )
    • debug_backtrace() (PHP)
    • Valgrind / Cachegrind / Xdebug
    • Apache jMeter ( http://jakarta.apache.org/jmeter )
    • Hook alrendszer
    • Theme alrendszer
    • Session-kezelés
    • Beállítások (variable_get / variable_set)
    • Útvonalálnevek
  • 2009. 10. 29. A PHP lassú
    • KÉNYELMES , magasszintű programnyelv
    • Szkriptnyelv, folyamatosan újra és újra értelmezni kell
    • A feladathoz képest nagy a memóriaigénye
    • Lyukas a memóriakezelése
    • Hook alrendszer
    • Theme alrendszer
    • Session-kezelés
    • Beállítások (variable_get / variable_set)
    • Útvonalálnevek
  • 2009. 10. 29. Rosszul beállított környezet
    • KÉNYELMES , magasszintű programnyelv
    • Szkriptnyelv, folyamatosan újra és újra értelmezni kell
    • A feladathoz képest nagy a memóriaigénye
    • Lyukas a memóriakezelése
    • Kevés memóriát használhat a MySQL (query_cache, innodb_buffer_pool_size stb.)
    • mysqltuner.pl, mytop
    • http://www.mysqlperformanceblog.com
    • MyISAM => InnoDB
    • Nincs index a megfelelő adatbázismezőkön (explain)
    • Apache => Nginx / Lighttpd
    • APC, Xcache, Zend Optimizer
    • Kevés memóriát használhat a MySQL (query_cache, innodb
    • MyISAM => InnoDB
    • Apache => Nginx / Lighttpd
  • onkoltseg.hu Kevés a vas
    • KÉNYELMES , magasszintű programnyelv
    • Szkriptnyelv, folyamatosan újra és újra értelmezni kell
    • A feladathoz képest nagy a memóriaigénye
    • Lyukas a memóriakezelése
    • CPU – nem bővíthető (APC és társai)
    • Memória – korlátozottan bővíthető, gyors
    • Merevlemez – bővíthető, lassú (=> memória)
  • onkoltseg.hu Gyorsítótárak összehasonlítása
    • KÉNYELMES , magasszintű programnyelv
    • Szkriptnyelv, folyamatosan újra és újra értelmezni kell
    • A feladathoz képest nagy a memóriaigénye
    • Lyukas a memóriakezelése
  • 2009. 10. 29. Gyorsítótárak összehasonlítása
  • 2009. 10. 29. A táblázatok értékelése
    • Az APC közvetlenül a megosztott (shm) memóriába ír
    • A megosztott memória mérete erősen korlátozott (4096, 32MB, 8GB)
    • Az APC nem képes adatot megosztani több géppel
    • Lyukas a memóriakezelése
    • Az első táblázat egy egyszerű PHP-lekérés 9 mezővel 3 táblakapcsolással
    • A második egy összetett jogosultságú Intranet 7000 felhasználóval.
    • Eredmény: torz, mert a merevlemez nagyon szűk keresztmetszet. (A Boost csalóka, ott 1 felhasználóról volt szó, de 670 aloldallal.)
  • 2009. 10. 29. APC vs. Memcached
    • Az APC közvetlenül a megosztott (shm) memóriába ír
    • A megosztott memória mérete erősen korlátozott (4096, 32MB, 8GB)
    • Az APC nem képes adatot megosztani több géppel
    • A Memcached-példányokon több Drupal is osztozhat.
    • CPU – nem bővíthető (APC és társai)
    • Memória – korlátozottan bővíthető, gyors
    • Merevlemez – bővíthető, lassú (=> memória)
  • 2009. 10. 29. Memcached beállítása
    • Az APC közvetlenül a megosztott (shm) memóriába ír
    • A megosztott memória mérete erősen korlátozott (4096, 32MB, 8GB)
    • Az APC nem képes adatot megosztani több géppel
    • Lyukas a memóriakezelése
    <?php $conf = array( 'cache_inc' => './sites/all/modules/memcache/memcache.inc', 'memcache_servers' => array( '192.168.1.1:11211' => 'default', '192.168.1.1:11212' => 'menu', '192.168.1.2:11211' => 'form', '192.168.1.2:11212' => 'page', '192.168.1.2:11213' => 'content'), 'memcache_bins' => array('cache' => 'default', 'cache_filter' => 'default', 'cache_form' => 'form', 'cache_page' => 'page', 'cache_content' => 'content', ); ?>
  • Saját gyorsítótárazás <?php $conf = array( 'cache_inc' => './sites/all/modules/memcache/memcache.inc', 'memcache_servers' => array( '192.168.1.1:11211' => 'default', '192.168.1.1:11212' => 'menu', '192.168.1.2:11211' => 'form', '192.168.1.2:11212' => 'page', '192.168.1.2:11213' => 'content'), 'memcache_bins' => array('cache' => 'default', 'cache_filter' => 'default', 'cache_form' => 'form', 'cache_page' => 'page', 'cache_content' => 'content', ); ?> <?php function custom_sokatszamol_blokk() { $cache = cache_get('sajat:sokatszamol:'. $GLOBALS['user']->uid); if (!$cache) { // A sokat számoló függvényünk eredménye nincs a cache-ben $o = custom_sokatszamol(); // Meddig legyen biztosan gyorsítótárazva (*nix időbélyeg) $lejar = time() + (60 * 60); // óra cache_set('custom:sokatszamol', $o, 'cache', $lejar); } else { $o = $cache->data; } return $o; } ?> 2009. 10. 29.
  • 2009. 10. 29. Mit érdemes gyorsítótárazni
    • NE: teljes oldalt, mert túl sok memórát „eszik”
    • IGEN: DB-intenzív függvények eredményét
    • IGEN: sokat változó, de lényegtelen adatú
    • DB-táblák (sessions, cache*)
    • IGEN: sűrűn olvasott, de ritkán írt táblák tartalmát (url_alias)
    <?php $conf = array( 'cache_inc' => './sites/all/modules/memcache/memcache.inc', 'memcache_servers' => array( '192.168.1.1:11211' => 'default', '192.168.1.1:11212' => 'menu', '192.168.1.2:11211' => 'form', '192.168.1.2:11212' => 'page', '192.168.1.2:11213' => 'content'), 'memcache_bins' => array('cache' => 'default', 'cache_filter' => 'default', 'cache_form' => 'form', 'cache_page' => 'page', 'cache_content' => 'content', ); ?>
  • 2009. 10. 29. Tervezni, tervezni, tervezni! <?php function custom_sokatszamol_blokk() { $cache = cache_get('sajat:sokatszamol:'. $GLOBALS['user']->uid); if (!$cache) { // A sokat számoló függvényünk eredménye nincs a cache-ben $o = custom_sokatszamol(); // Meddig legyen biztosan gyorsítótárazva (*nix időbélyeg) $lejar = time() + (60 * 60); // óra cache_set('custom:sokatszamol', $o, 'cache', $lejar); } else { $o = $cache->data; } return $o; } ?> Fokozottan fontos a saját gyorstáraink elévülésének Végiggondolása. Ha egy node, álnév, beállítás stb. megváltozik, végig kell gondolni, hogy a cache-ben mely elemeket érinti! cache_clear_all('custom:sokatszamol:', 'cache', TRUE);
  • Hovatovább?
    • Galera – szinkron replika InnoDB-hez közvetlen írás sorszintű zárolással, tranzakciós szinten
    • Redis – aka Memcached Killer félig állandó adatbázis (sorszintű írás a fájlrendszerre => kevés IO erőforrás. Pipelinening, összetett érték mezők.
    2009. 10. 29.
  • 2009. 10. 29. Kérdés?
  • 2009. 10. 29. Köszönöm a figyelmet!