cache in web (secon 2008)
DESCRIPTION
TRANSCRIPT
![Page 1: Cache in web (Secon 2008)](https://reader033.vdocuments.mx/reader033/viewer/2022061222/548c9d3bb47959776d8b491a/html5/thumbnails/1.jpg)
Кэширование в вебе: зачем и как
Станислав Корчагин
BIT Creative
![Page 2: Cache in web (Secon 2008)](https://reader033.vdocuments.mx/reader033/viewer/2022061222/548c9d3bb47959776d8b491a/html5/thumbnails/2.jpg)
Часть 0. Введение
![Page 3: Cache in web (Secon 2008)](https://reader033.vdocuments.mx/reader033/viewer/2022061222/548c9d3bb47959776d8b491a/html5/thumbnails/3.jpg)
Кэш? Кто это?
Кэш (англ. cache) - промежуточный буфер с быстрым доступом, содержащий копию информации, которая хранится в памяти с менее быстрым доступом, но с наибольшей вероятностью может быть оттуда запрошена...
![Page 4: Cache in web (Secon 2008)](https://reader033.vdocuments.mx/reader033/viewer/2022061222/548c9d3bb47959776d8b491a/html5/thumbnails/4.jpg)
Кого экономим? Операции!
• физика (винчестер)
• сеть
• процессор
![Page 5: Cache in web (Secon 2008)](https://reader033.vdocuments.mx/reader033/viewer/2022061222/548c9d3bb47959776d8b491a/html5/thumbnails/5.jpg)
Часть 1. Диагноз
![Page 6: Cache in web (Secon 2008)](https://reader033.vdocuments.mx/reader033/viewer/2022061222/548c9d3bb47959776d8b491a/html5/thumbnails/6.jpg)
Главный вопрос кэширования, вселенной и всего такого: Зачем? Где нам сейчас
плохо?
• профайлинг
• профайлинг
• профайлинг
![Page 7: Cache in web (Secon 2008)](https://reader033.vdocuments.mx/reader033/viewer/2022061222/548c9d3bb47959776d8b491a/html5/thumbnails/7.jpg)
Профайлинг на лету
• запросы:– БД– внешние ресурсы– запросы к кэшам
• время работы
• память
![Page 8: Cache in web (Secon 2008)](https://reader033.vdocuments.mx/reader033/viewer/2022061222/548c9d3bb47959776d8b491a/html5/thumbnails/8.jpg)
![Page 9: Cache in web (Secon 2008)](https://reader033.vdocuments.mx/reader033/viewer/2022061222/548c9d3bb47959776d8b491a/html5/thumbnails/9.jpg)
Анализ логовsed + grep + awk + pipeline = карманный набор нинзяaccess.log:
calc_weight_by_urls.sh:awk '{ gsub(/[0-9]+/, "X", $3); urls[$2" "$3] += $8;}END { for(i in urls) { print urls[i]":"i; }}' | sort -nr
консольная магия:>cat ./access.log | grep '66.249.72.83' | ./calc_weight_by_urls.sh | head -n 519086.4:GET /photos/X/2916.77:GET /photos/category/X/?pager=X2002.57:GET /users/X/329.514:GET /photos/X/?from_member49.098:GET /photos/?date=X.X.X
66.249.72.83 GET /photos/2745702/ HTTP/1.1 200 34557 - 0.116 0.116 06/Nov/2008:07:02:42 +0300 www.*.ru [Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)]
![Page 10: Cache in web (Secon 2008)](https://reader033.vdocuments.mx/reader033/viewer/2022061222/548c9d3bb47959776d8b491a/html5/thumbnails/10.jpg)
Часть 2. Выбор лекарства
![Page 11: Cache in web (Secon 2008)](https://reader033.vdocuments.mx/reader033/viewer/2022061222/548c9d3bb47959776d8b491a/html5/thumbnails/11.jpg)
Формула правды
Правда(t) = Истина(t-n)
![Page 12: Cache in web (Secon 2008)](https://reader033.vdocuments.mx/reader033/viewer/2022061222/548c9d3bb47959776d8b491a/html5/thumbnails/12.jpg)
Нужно ли поддерживать валидность?
• пользователь догадается, что ему говорят не все?
• пользователя это сильно волнует?
![Page 13: Cache in web (Secon 2008)](https://reader033.vdocuments.mx/reader033/viewer/2022061222/548c9d3bb47959776d8b491a/html5/thumbnails/13.jpg)
Типы пользователей
• поисковики
• гости
• пользователи
• модераторы/администраторы
![Page 14: Cache in web (Secon 2008)](https://reader033.vdocuments.mx/reader033/viewer/2022061222/548c9d3bb47959776d8b491a/html5/thumbnails/14.jpg)
Остались сущие пустяки: Что? Где? Когда?
• что кэшировать?
• где хранить?
• когда и как совершать операции?
![Page 15: Cache in web (Secon 2008)](https://reader033.vdocuments.mx/reader033/viewer/2022061222/548c9d3bb47959776d8b491a/html5/thumbnails/15.jpg)
Что?
cтраницы
■ куски страниц
■ коллекции
■ объекты
■ свойства
■ ссылки
![Page 16: Cache in web (Secon 2008)](https://reader033.vdocuments.mx/reader033/viewer/2022061222/548c9d3bb47959776d8b491a/html5/thumbnails/16.jpg)
Где?
инстанс скрипта сервер сеть
диск файлы, BDB, SQLite
память memcached
Носитель / видимость
большинство СУБД,
memcacheDB
глобальные переменные, registry, toolkit
shared memory (IPC, обертки), VMFS
![Page 17: Cache in web (Secon 2008)](https://reader033.vdocuments.mx/reader033/viewer/2022061222/548c9d3bb47959776d8b491a/html5/thumbnails/17.jpg)
Когда?создание:
экономная лень on-demand прегенерация
удаление:
– по времени
– по действию
- Синхронно?
- Не обязательно!
![Page 18: Cache in web (Secon 2008)](https://reader033.vdocuments.mx/reader033/viewer/2022061222/548c9d3bb47959776d8b491a/html5/thumbnails/18.jpg)
Как?
• прозрачные кэши– отсутствие дублирования– неизвестная стоимость операции
• объединение интерфейсов– Zend_Cache– lmbCache
![Page 19: Cache in web (Secon 2008)](https://reader033.vdocuments.mx/reader033/viewer/2022061222/548c9d3bb47959776d8b491a/html5/thumbnails/19.jpg)
Ребятам о зверятах• APC
• memcached
• memcacheDB
![Page 20: Cache in web (Secon 2008)](https://reader033.vdocuments.mx/reader033/viewer/2022061222/548c9d3bb47959776d8b491a/html5/thumbnails/20.jpg)
APC - Alternative PHP Cache opcode кэшер умеет ttl от 20К до 100K ops
![Page 21: Cache in web (Secon 2008)](https://reader033.vdocuments.mx/reader033/viewer/2022061222/548c9d3bb47959776d8b491a/html5/thumbnails/21.jpg)
memcached
• умеет ttl
• O(1)
• session handler для PHP
• incr/decr
• мульти-get
• slab-алокатор
• медленнее APC в 3-20 раз
![Page 22: Cache in web (Secon 2008)](https://reader033.vdocuments.mx/reader033/viewer/2022061222/548c9d3bb47959776d8b491a/html5/thumbnails/22.jpg)
memcacheDB
• гарантированный диск - Berkeley DB
• интерфейс, как у memcached
![Page 23: Cache in web (Secon 2008)](https://reader033.vdocuments.mx/reader033/viewer/2022061222/548c9d3bb47959776d8b491a/html5/thumbnails/23.jpg)
Часть 3. Побочные эффекты лечения
![Page 24: Cache in web (Secon 2008)](https://reader033.vdocuments.mx/reader033/viewer/2022061222/548c9d3bb47959776d8b491a/html5/thumbnails/24.jpg)
Грабли на любой вкус
• завышенный уровень доверия
• dog-pile эффект
• определение момента изменения данных в кластере, в коллекциях
• фрагментация
• LRU + извращенцы = мусор в кэше
![Page 25: Cache in web (Secon 2008)](https://reader033.vdocuments.mx/reader033/viewer/2022061222/548c9d3bb47959776d8b491a/html5/thumbnails/25.jpg)
Излишнее доверие кэшам
• к данным–может и не быть–кэш только для отображения–структура меняется
• к доступности–даже демоны не вечны
![Page 26: Cache in web (Secon 2008)](https://reader033.vdocuments.mx/reader033/viewer/2022061222/548c9d3bb47959776d8b491a/html5/thumbnails/26.jpg)
Dog-pile эффект
• прегенерация
• лок на генерацию - эволюция решения до mint cache
• окно генерации - mint cache
![Page 27: Cache in web (Secon 2008)](https://reader033.vdocuments.mx/reader033/viewer/2022061222/548c9d3bb47959776d8b491a/html5/thumbnails/27.jpg)
Определение момента изменения данных в кластере
Проблема: для кластера create/update это не точка, а отрезок = race condition при отсутствии кэша.
Решения:
• генерируем кэш только с master
• не генерируем кэш в течение времени репликации
• управление кэшом из sql-запросов
• триггеры + хранимые процедуры
![Page 28: Cache in web (Secon 2008)](https://reader033.vdocuments.mx/reader033/viewer/2022061222/548c9d3bb47959776d8b491a/html5/thumbnails/28.jpg)
Определение моментаизменения данных в коллекцииПроблема: как узнать что изменилось содержимое коллекции?
Решение:
• обратные ссылки - сразу
• тэгирование объектами - по требованию
![Page 29: Cache in web (Secon 2008)](https://reader033.vdocuments.mx/reader033/viewer/2022061222/548c9d3bb47959776d8b491a/html5/thumbnails/29.jpg)
Не все пользователи одинаково полезли
Проблема: большинство смотрит новый контент, но извращенцы забивают кэш ненужными данным.
Решение:
• отказывается от LRU в пользу LFU
• отключаем on-demand кэши для извращенцев
![Page 30: Cache in web (Secon 2008)](https://reader033.vdocuments.mx/reader033/viewer/2022061222/548c9d3bb47959776d8b491a/html5/thumbnails/30.jpg)
Мониторинг
• доступность
• свободное место
• соотношение операций
• количество вытесненных значений (для LRU)
![Page 31: Cache in web (Secon 2008)](https://reader033.vdocuments.mx/reader033/viewer/2022061222/548c9d3bb47959776d8b491a/html5/thumbnails/31.jpg)
Что почитать? Где посмотреть?• APC - http://pecl.php.net/package/apc
• memcached:
– официальный сайт -http://www.danga.com/memcached/
– серия статей http://www.smira.ru/
– доклады с highload++
• MemcacheDB - http://memcachedb.org/