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

Cache in web (Secon 2008)

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Cache in web (Secon 2008)

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

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

BIT Creative

Page 2: Cache in web (Secon 2008)

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

Page 3: Cache in web (Secon 2008)

Кэш? Кто это?

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

Page 4: Cache in web (Secon 2008)

Кого экономим? Операции!

• физика (винчестер)

• сеть

• процессор

Page 5: Cache in web (Secon 2008)

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

Page 6: Cache in web (Secon 2008)

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

плохо?

• профайлинг

• профайлинг

• профайлинг

Page 7: Cache in web (Secon 2008)

Профайлинг на лету

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

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

• память

Page 8: Cache in web (Secon 2008)
Page 9: Cache in web (Secon 2008)

Анализ логов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)

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

Page 11: Cache in web (Secon 2008)

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

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

Page 12: Cache in web (Secon 2008)

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

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

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

Page 13: Cache in web (Secon 2008)

Типы пользователей

• поисковики

• гости

• пользователи

• модераторы/администраторы

Page 14: Cache in web (Secon 2008)

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

• что кэшировать?

• где хранить?

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

Page 15: Cache in web (Secon 2008)

Что?

cтраницы

■ куски страниц

■ коллекции

■ объекты

■ свойства

■ ссылки

Page 16: Cache in web (Secon 2008)

Где?

инстанс скрипта сервер сеть

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

память memcached

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

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

memcacheDB

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

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

Page 17: Cache in web (Secon 2008)

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

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

удаление:

– по времени

– по действию

- Синхронно?

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

Page 18: Cache in web (Secon 2008)

Как?

• прозрачные кэши– отсутствие дублирования– неизвестная стоимость операции

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

Page 19: Cache in web (Secon 2008)

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

• memcached

• memcacheDB

Page 20: Cache in web (Secon 2008)

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

Page 21: Cache in web (Secon 2008)

memcached

• умеет ttl

• O(1)

• session handler для PHP

• incr/decr

• мульти-get

• slab-алокатор

• медленнее APC в 3-20 раз

Page 22: Cache in web (Secon 2008)

memcacheDB

• гарантированный диск - Berkeley DB

• интерфейс, как у memcached

Page 23: Cache in web (Secon 2008)

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

Page 24: Cache in web (Secon 2008)

Грабли на любой вкус

• завышенный уровень доверия

• dog-pile эффект

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

• фрагментация

• LRU + извращенцы = мусор в кэше

Page 25: Cache in web (Secon 2008)

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

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

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

Page 26: Cache in web (Secon 2008)

Dog-pile эффект

• прегенерация

• лок на генерацию - эволюция решения до mint cache

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

Page 27: Cache in web (Secon 2008)

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

Проблема: для кластера create/update это не точка, а отрезок = race condition при отсутствии кэша.

Решения:

• генерируем кэш только с master

• не генерируем кэш в течение времени репликации

• управление кэшом из sql-запросов

• триггеры + хранимые процедуры

Page 28: Cache in web (Secon 2008)

Определение моментаизменения данных в коллекцииПроблема: как узнать что изменилось содержимое коллекции?

Решение:

• обратные ссылки - сразу

• тэгирование объектами - по требованию

Page 29: Cache in web (Secon 2008)

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

Проблема: большинство смотрит новый контент, но извращенцы забивают кэш ненужными данным.

Решение:

• отказывается от LRU в пользу LFU

• отключаем on-demand кэши для извращенцев

Page 30: Cache in web (Secon 2008)

Мониторинг

• доступность

• свободное место

• соотношение операций

• количество вытесненных значений (для LRU)

Page 31: Cache in web (Secon 2008)

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

• memcached:

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

– серия статей http://www.smira.ru/

– доклады с highload++

• MemcacheDB - http://memcachedb.org/

Page 32: Cache in web (Secon 2008)

Вопросы?

• Можно задать в зале

• А можно связаться со мной: http://korchasa.ru/ [email protected]