Название доклада

32
Кэширование в вебе: зачем и как Станислав Корчагин BIT Creative

description

awk '{ gsub(/[0­9]+/, "X", $3); urls[$2" "$3] += $8; } END { for(i in urls) { print urls[i]":"i; }}' | sort ­nr

Transcript of Название доклада

Page 1: Название доклада

Кэширование в вебе: зачем и как

Станислав Корчагин BIT Creative

Page 2: Название доклада

Часть 0. Введение

Page 3: Название доклада

Кэш? Кто это?Кэш (англ. cache) - промежуточный буфер с быстрым доступом, содержащий копию информации, которая хранится в памяти с менее быстрым доступом, но с наибольшей вероятностью может быть оттуда запрошена...

Page 4: Название доклада

Кого экономим? Операции!• физика (винчестер)• сеть• процессор

Page 5: Название доклада

Часть 1. Диагноз

Page 6: Название доклада

Главный вопрос кэширования, вселенной и всего такого: Зачем? Где нам сейчас

плохо?• профайлинг• профайлинг• профайлинг

Page 7: Название доклада

Профайлинг на лету• запросы:

– БД– внешние ресурсы– запросы к кэшам

• время работы• память

Page 8: Название доклада
Page 9: Название доклада

Анализ логов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: Название доклада

Часть 2. Выбор лекарства

Page 11: Название доклада

Формула правды

Правда(t) = Истина(t-n)

Page 12: Название доклада

Нужно ли поддерживать валидность?

• пользователь догадается, что ему говорят не все?

• пользователя это сильно волнует?

Page 13: Название доклада

Типы пользователей• поисковики• гости• пользователи• модераторы/администраторы

Page 14: Название доклада

Остались сущие пустяки: Что? Где? Когда?

• что кэшировать?• где хранить?• когда и как совершать операции?

Page 15: Название доклада

Что?cтраницы■ куски страниц ■ коллекции ■ объекты■ свойства ■ ссылки

Page 16: Название доклада

Где?инстанс скрипта сервер сеть

диск файлы, BDB, SQLite

память memcached

Носитель / видимость

большинство СУБД,

memcacheDB

глобальные переменные, registry, toolkit

shared memory (IPC, обертки), VMFS

Page 17: Название доклада

Когда?создание:

экономная лень on-demand прегенерация

удаление:– по

времени– по

действию - Синхронно?

- Не обязательно!

Page 18: Название доклада

Как?• прозрачные кэши

– отсутствие дублирования– неизвестная стоимость операции

• объединение интерфейсов– Zend_Cache– lmbCache

Page 19: Название доклада

Ребятам о зверятах• APC• memcached• memcacheDB

Page 20: Название доклада

APC - Alternative PHP Cache opcode кэшер умеет ttl от 20К до 100K ops

Page 21: Название доклада

memcached• умеет ttl• O(1)• session handler для PHP• incr/decr• мульти-get• slab-алокатор • медленнее APC в 3-20 раз

Page 22: Название доклада

memcacheDB• гарантированный диск - Berkeley DB• интерфейс, как у memcached

Page 23: Название доклада

Часть 3. Побочные эффекты лечения

Page 24: Название доклада

Грабли на любой вкус• завышенный уровень доверия• dog-pile эффект• определение момента изменения

данных в кластере, в коллекциях• фрагментация• LRU + извращенцы = мусор в кэше

Page 25: Название доклада

Излишнее доверие кэшам• к данным

–может и не быть–кэш только для отображения–структура меняется

• к доступности–даже демоны не вечны

Page 26: Название доклада

Dog-pile эффект• прегенерация• лок на генерацию - эволюция решения

до mint cache• окно генерации - mint cache

Page 27: Название доклада

Определение момента изменения данных в кластере

Проблема: для кластера create/update это не точка, а отрезок = race condition при отсутствии кэша.Решения:• генерируем кэш только с master• не генерируем кэш в течение времени репликации• управление кэшом из sql-запросов• триггеры + хранимые процедуры

Page 28: Название доклада

Определение моментаизменения данных в коллекцииПроблема: как узнать что изменилось содержимое коллекции?Решение:• обратные ссылки - сразу• тэгирование объектами - по требованию

Page 29: Название доклада

Не все пользователи одинаково полезли

Проблема: большинство смотрит новый контент, но извращенцы забивают кэш ненужными данным.Решение:• отказывается от LRU в пользу LFU• отключаем on-demand кэши для извращенцев

Page 30: Название доклада

Мониторинг• доступность• свободное место • соотношение операций• количество вытесненных значений (для

LRU)

Page 31: Название доклада

Что почитать? Где посмотреть?• APC - http://pecl.php.net/package/apc• memcached:

– официальный сайт -http://www.danga.com/memcached/

– серия статей http://www.smira.ru/– доклады с highload++

• MemcacheDB - http://memcachedb.org/

Page 32: Название доклада

Вопросы?• Можно задать в зале• А можно связаться со мной:

http://korchasa.ru/ [email protected]