Содержание
- 2. Кэширование Время отклика сервера – важный фактор для пользователей. Для сложного сайта генерация одной страницы ~
- 3. Кэш Кэш встречается везде: ЦП, жесткий диск, магнитола в машине, буферы ОС, … Успех кэша в
- 4. memcached Большая хэш-таблица в памяти, доступная через сетевой протокол. Операции: get/set/del «Атомарность» incr/decr cas/add/replace append/prepend Brad
- 5. Общая схема кэширования
- 6. Архитектура memcached Никаких вычислительно сложных операций. Все операции – O(1). Никаких нитей – асинхронный ввод/вывод. Время
- 7. Потеря ключей Ограниченность объема памяти, выделенного memcached. Истек срок жизни ключа. Отказ сервера или процесса memcached.
- 8. Применение memcached «Можно потерять»: кэширование выборок БД; вычислительно сложные значения. «Не хотелось бы потерять»: счетчики посетителей,
- 9. Задачи Формирование ключа кэширования. Кластеризация memcached. Счетчики и атомарность. Как избежать одновременного перестроения кэшей. Сброс группы
- 10. Ключ кэширования Ключ – строка ограниченной длины. По параметрам выборки должен однозначно определяться ключ. При изменении
- 11. Кластеризация memcached Зачем: увеличение объема кэша; обеспечение некоторой отказоустойчивости; распределение нагрузки. Как распределить ключи?
- 12. Распределение ключей Необходима функция: f(ключ)=номер_сервера «Стандартный вариант» по модулю: f(ключ)=crc32(ключ)%кол-во_серверов Consistent hashing:
- 13. Атомарность операций memcached не обеспечивает операций блокировки. Обычные операции get/set не обеспечивают атомарности. Самые простые атомарные
- 14. Счетчики в memcached Пример: счетчик просмотров в реальном времени. число просмотров аккумулируется и сохраняется в БД;
- 15. Счетчик онлайнеров 450 580 434 497 101 503 0 1 2 3 4 5 Текущий изменяемый
- 16. Одновременное перестроение кэшей Пусть есть кэш с большим количеством обращений на чтение. В какой-то момент истекает
- 17. Решение проблемы Храним ключи кэшей без ограничения по времени. В значение кэша записываем реальное время жизни
- 18. Пример Обращаемся за кэшем, например ‘user_info_id_159’ Сравниваем срок годности с текущим временем. Кэш «протух» → необходимо
- 19. Пример Пытаемся заблокироваться по ключу user_info_id_159_lock. Не удалось получить блокировку: ждём снятия блокировки; не дождались: возвращаем
- 20. Блокировки в memcached Первый вариант: get/set блокировка get(lock) ? 1 → locked set(lock, 1, small_timeout) …
- 21. Сброс группы кэшей Один и тот же объект часто входит в несколько разных выборок, а значит
- 22. Тэгирование кэшей Тэг – это имя и версия группы кэшей. Версия – монотонно увеличивающееся число. Сброс
- 23. Тэгирование кэшей В memcached вместе с данными кэша отправляем номера версий всех тэгов, которые были актуальны
- 24. Пример Было: Записали в кэш: tag1 → 25 tag2 → 63 срок годности: 2008-10-07 21:00 данные
- 25. Пример tag2++
- 26. Пример Стало: Лежит в кэше: tag1 → 25 tag2 → 64 срок годности: 2008-10-07 21:00 данные
- 27. Версия тэга и слейвы БД Удачный вариант версии – текущее время: монотонно увеличивается; при потере значения
- 28. Статистика memcached Команда stats позволяет получить различную статистику по работе memcached. «Обычная статистика»: процент хитов по
- 29. slab-аллокатор Баланс между внутренней фрагментацией и эффективностью использования памяти. Эффективные O(1) алгоритмы. Набор slab’ов под блоки
- 30. Статистика slab-аллокатора
- 31. Отладка memcached Проблемы плохо воспроизводятся в локальном/тестовом окружении. Отладка возможна только в реальном времени (без остановок).
- 32. Дополнительные вопросы memcached как способ межпроцессного/межъязыкового взаимодействия; Кэширование memcached («кэширование кэша»): в теле процесса, в локальном
- 34. Скачать презентацию