Drupal gyorstárazási stratégiák

1,373 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,373
On SlideShare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
7
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Drupal gyorstárazási stratégiák

  1. 1. Drupal gyorstárazási stratégiák Fehér János (Aries) 2009.10.29.
  2. 2. 2009. 10. 29. Pár szóban az előadóról <ul><li>1998: <?php echo 'Hello World'; ?>
  3. 3. 2002: Mindworks-Networking http://mindworks.hu
  4. 4. 2005-: Csak Drupal alapú honlapok
  5. 5. Gtalk: [email_address] MSN: [email_address] Skype: aries_mindworks </li></ul>
  6. 6. 2009. 10. 29. Mitől lassul? <ul><li>Nem átgondolt működés / megvalósítás
  7. 7. A szoftverrendszer túl komplex
  8. 8. A PHP lassú
  9. 9. Rosszul beállított környezet (web, db...)
  10. 10. Kevés a vas </li></ul>
  11. 11. 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
  12. 12. onkoltseg.hu Nem átgondolt fejlesztés #2 <ul><li>Devel modul ( http://drupal.org/project/devel )
  13. 13. debug_backtrace() (PHP)
  14. 14. Valgrind / Cachegrind / Xdebug
  15. 15. Apache jMeter ( http://jakarta.apache.org/jmeter ) </li></ul>
  16. 16. 2009. 10. 29. A szoftverrendszer túl komplex <ul><li>Devel modul ( http://drupal.org/project/devel )
  17. 17. debug_backtrace() (PHP)
  18. 18. Valgrind / Cachegrind / Xdebug
  19. 19. Apache jMeter ( http://jakarta.apache.org/jmeter ) </li></ul><ul><li>Hook alrendszer
  20. 20. Theme alrendszer
  21. 21. Session-kezelés
  22. 22. Beállítások (variable_get / variable_set)
  23. 23. Útvonalálnevek </li></ul>
  24. 24. 2009. 10. 29. A PHP lassú <ul><li>KÉNYELMES , magasszintű programnyelv
  25. 25. Szkriptnyelv, folyamatosan újra és újra értelmezni kell
  26. 26. A feladathoz képest nagy a memóriaigénye
  27. 27. Lyukas a memóriakezelése </li></ul><ul><li>Hook alrendszer
  28. 28. Theme alrendszer
  29. 29. Session-kezelés
  30. 30. Beállítások (variable_get / variable_set)
  31. 31. Útvonalálnevek </li></ul>
  32. 32. 2009. 10. 29. Rosszul beállított környezet <ul><li>KÉNYELMES , magasszintű programnyelv
  33. 33. Szkriptnyelv, folyamatosan újra és újra értelmezni kell
  34. 34. A feladathoz képest nagy a memóriaigénye
  35. 35. Lyukas a memóriakezelése </li></ul><ul><li>Kevés memóriát használhat a MySQL (query_cache, innodb_buffer_pool_size stb.)
  36. 36. mysqltuner.pl, mytop
  37. 37. http://www.mysqlperformanceblog.com
  38. 38. MyISAM => InnoDB
  39. 39. Nincs index a megfelelő adatbázismezőkön (explain)
  40. 40. Apache => Nginx / Lighttpd
  41. 41. APC, Xcache, Zend Optimizer </li></ul><ul><li>Kevés memóriát használhat a MySQL (query_cache, innodb
  42. 42. MyISAM => InnoDB
  43. 43. Apache => Nginx / Lighttpd </li></ul>
  44. 44. onkoltseg.hu Kevés a vas <ul><li>KÉNYELMES , magasszintű programnyelv
  45. 45. Szkriptnyelv, folyamatosan újra és újra értelmezni kell
  46. 46. A feladathoz képest nagy a memóriaigénye
  47. 47. Lyukas a memóriakezelése </li></ul><ul><li>CPU – nem bővíthető (APC és társai)
  48. 48. Memória – korlátozottan bővíthető, gyors
  49. 49. Merevlemez – bővíthető, lassú (=> memória) </li></ul>
  50. 50. onkoltseg.hu Gyorsítótárak összehasonlítása <ul><li>KÉNYELMES , magasszintű programnyelv
  51. 51. Szkriptnyelv, folyamatosan újra és újra értelmezni kell
  52. 52. A feladathoz képest nagy a memóriaigénye
  53. 53. Lyukas a memóriakezelése </li></ul>
  54. 54. 2009. 10. 29. Gyorsítótárak összehasonlítása
  55. 55. 2009. 10. 29. A táblázatok értékelése <ul><li>Az APC közvetlenül a megosztott (shm) memóriába ír
  56. 56. A megosztott memória mérete erősen korlátozott (4096, 32MB, 8GB)
  57. 57. Az APC nem képes adatot megosztani több géppel
  58. 58. Lyukas a memóriakezelése </li></ul><ul><li>Az első táblázat egy egyszerű PHP-lekérés 9 mezővel 3 táblakapcsolással
  59. 59. A második egy összetett jogosultságú Intranet 7000 felhasználóval.
  60. 60. 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.) </li></ul>
  61. 61. 2009. 10. 29. APC vs. Memcached <ul><li>Az APC közvetlenül a megosztott (shm) memóriába ír
  62. 62. A megosztott memória mérete erősen korlátozott (4096, 32MB, 8GB)
  63. 63. Az APC nem képes adatot megosztani több géppel
  64. 64. A Memcached-példányokon több Drupal is osztozhat. </li></ul><ul><li>CPU – nem bővíthető (APC és társai)
  65. 65. Memória – korlátozottan bővíthető, gyors
  66. 66. Merevlemez – bővíthető, lassú (=> memória) </li></ul>
  67. 67. 2009. 10. 29. Memcached beállítása <ul><li>Az APC közvetlenül a megosztott (shm) memóriába ír
  68. 68. A megosztott memória mérete erősen korlátozott (4096, 32MB, 8GB)
  69. 69. Az APC nem képes adatot megosztani több géppel
  70. 70. Lyukas a memóriakezelése </li></ul><?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', ); ?>
  71. 71. 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.
  72. 72. 2009. 10. 29. Mit érdemes gyorsítótárazni <ul><li>NE: teljes oldalt, mert túl sok memórát „eszik”
  73. 73. IGEN: DB-intenzív függvények eredményét
  74. 74. IGEN: sokat változó, de lényegtelen adatú
  75. 75. DB-táblák (sessions, cache*)
  76. 76. IGEN: sűrűn olvasott, de ritkán írt táblák tartalmát (url_alias) </li></ul><?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', ); ?>
  77. 77. 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);
  78. 78. Hovatovább? <ul><li>Galera – szinkron replika InnoDB-hez közvetlen írás sorszintű zárolással, tranzakciós szinten
  79. 79. 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. </li></ul>2009. 10. 29.
  80. 80. 2009. 10. 29. Kérdés?
  81. 81. 2009. 10. 29. Köszönöm a figyelmet!

×