Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Cache in web (Secon 2008)

1,241 views

Published on

Published in: Technology
  • Be the first to comment

Cache in web (Secon 2008)

  1. 1. Кэширование в вебе: зачем и как Станислав Корчагин BIT Creative
  2. 2. Часть 0. Введение
  3. 3. Кэш? Кто это? Кэш (англ. cache) - промежуточный буфер с быстрым доступом , содержащий копию информации , которая хранится в памяти с менее быстрым доступом, но с наибольшей вероятностью может быть оттуда запрошена...
  4. 4. Кого экономим? Операции! <ul><li>физика (винчестер)‏ </li></ul><ul><li>сеть </li></ul><ul><li>процессор </li></ul>
  5. 5. Часть 1. Диагноз
  6. 6. Главный вопрос кэширования, вселенной и всего такого: Зачем? Где нам сейчас плохо? <ul><li>профайлинг </li></ul><ul><li>профайлинг </li></ul><ul><li>профайлинг </li></ul>
  7. 7. Профайлинг на лету <ul><li>запросы: </li></ul><ul><ul><li>БД </li></ul></ul><ul><ul><li>внешние ресурсы </li></ul></ul><ul><ul><li>запросы к кэшам </li></ul></ul><ul><li>время работы </li></ul><ul><li>память </li></ul>
  8. 9. Анализ логов sed + grep + awk + pipeline = карманный набор нинзя
  9. 10. Часть 2. Выбор лекарства
  10. 11. Формула правды Правда(t) = Истина(t-n)‏
  11. 12. Нужно ли поддерживать валидность? <ul><li>пользователь догадается, что ему говорят не все? </li></ul><ul><li>пользователя это сильно волнует? </li></ul>
  12. 13. Типы пользователей <ul><li>поисковики </li></ul><ul><li>гости </li></ul><ul><li>пользователи </li></ul><ul><li>модераторы/администраторы </li></ul>
  13. 14. Остались сущие пустяки: Что? Где? Когда? <ul><li>что кэшировать? </li></ul><ul><li>где хранить? </li></ul><ul><li>когда и как совершать операции? </li></ul>
  14. 15. Что? <ul><li>cтраницы </li></ul><ul><li>■ куски страниц </li></ul><ul><li>■ коллекции </li></ul><ul><li>■ объекты </li></ul><ul><li>■ свойства </li></ul><ul><li>■ ссылки </li></ul>
  15. 16. Где?
  16. 17. Когда? <ul><ul><li>создание: </li></ul></ul><ul><ul><ul><ul><li>экономная лень on-demand </li></ul></ul></ul></ul><ul><ul><ul><ul><li>прегенерация </li></ul></ul></ul></ul><ul><ul><li>удаление: </li></ul></ul><ul><ul><li>по времени </li></ul></ul><ul><ul><li>по действию </li></ul></ul><ul><ul><li>- Синхронно? </li></ul></ul><ul><ul><li>- Не обязательно! </li></ul></ul>
  17. 18. Как? <ul><li>прозрачные кэши </li></ul><ul><ul><li>отсутствие дублирования </li></ul></ul><ul><ul><li>неизвестная стоимость операции </li></ul></ul><ul><li>объединение интерфейсов </li></ul><ul><ul><li>Zend_Cache </li></ul></ul><ul><ul><li>lmbCache </li></ul></ul>
  18. 19. Ребятам о зверятах <ul><li>APC </li></ul><ul><li>memcached </li></ul><ul><li>memcacheDB </li></ul>
  19. 20. APC - Alternative PHP Cache <ul><li>opcode кэшер </li></ul><ul><li>умеет ttl </li></ul><ul><li>от 20К до 100K ops </li></ul>
  20. 21. memcached <ul><li>умеет ttl </li></ul><ul><li>O(1)‏ </li></ul><ul><li>session handler для PHP </li></ul><ul><li>incr/decr </li></ul><ul><li>мульти-get </li></ul><ul><li>slab-алокатор </li></ul><ul><li>медленнее APC в 3-20 раз </li></ul>
  21. 22. memcacheDB <ul><li>гарантированный диск - Berkeley DB </li></ul><ul><li>интерфейс, как у memcached </li></ul>
  22. 23. Часть 3. Побочные эффекты лечения
  23. 24. Грабли на любой вкус <ul><li>завышенный уровень доверия </li></ul><ul><li>dog-pile эффект </li></ul><ul><li>определение момента изменения данных в кластере, в коллекциях </li></ul><ul><li>фрагментация </li></ul><ul><li>LRU + извращенцы = мусор в кэше </li></ul>
  24. 25. Излишнее доверие кэшам <ul><li>к данным </li></ul><ul><ul><li>может и не быть </li></ul></ul><ul><ul><li>кэш только для отображения </li></ul></ul><ul><ul><li>структура меняется </li></ul></ul><ul><li>к доступности </li></ul><ul><ul><li>даже демоны не вечны </li></ul></ul>
  25. 26. Dog-pile эффект <ul><li>прегенерация </li></ul><ul><li>лок на генерацию - эволюция решения до mint cache </li></ul><ul><li>окно генерации - mint cache </li></ul>
  26. 27. Определение момента изменения данных в кластере <ul><li>Проблема: для кластера create/update это не точка, а отрезок = race condition при отсутствии кэша. </li></ul><ul><li>Решения: </li></ul><ul><li>генерируем кэш только с master </li></ul><ul><li>не генерируем кэш в течение времени репликации </li></ul><ul><li>управление кэшом из sql-запросов </li></ul><ul><li>триггеры + хранимые процедуры </li></ul>
  27. 28. Определение момента изменения данных в коллекции <ul><li>Проблема: как узнать что изменилось содержимое коллекции? </li></ul><ul><li>Решение: </li></ul><ul><li>обратные ссылки - сразу </li></ul><ul><li>тэгирование объектами - по требованию </li></ul>
  28. 29. Не все пользователи одинаково полезли <ul><li>Проблема: большинство смотрит новый контент, но извращенцы забивают кэш ненужными данным. </li></ul><ul><li>Решение: </li></ul><ul><li>отказывается от LRU в пользу LFU </li></ul><ul><li>отключаем on-demand кэши для извращенцев </li></ul>
  29. 30. Мониторинг <ul><li>доступность </li></ul><ul><li>свободное место </li></ul><ul><li>соотношение операций </li></ul><ul><li>количество вытесненных значений (для LRU) </li></ul>
  30. 31. Что почитать? Где посмотреть? <ul><li>APC - http://pecl.php.net/package/apc </li></ul><ul><li>memcached: </li></ul><ul><ul><li>официальный сайт - http://www.danga.com/memcached/ </li></ul></ul><ul><ul><li>серия статей http://www.smira.ru/ </li></ul></ul><ul><ul><li>доклады с highload++ </li></ul></ul><ul><li>MemcacheDB - http://memcachedb.org/ </li></ul>
  31. 32. Вопросы? <ul><li>Можно задать в зале </li></ul><ul><li>А можно связаться со мной: </li></ul><ul><ul><li>http://korchasa.ru/ </li></ul></ul><ul><ul><li>[email_address] </li></ul></ul>

×