Веб-страницы
<<  Совместный проект SkyWave и Web-telemetry Nativne, Web ili Hibridne  >>
Web, кэширование и memcached
Web, кэширование и memcached
Кэширование
Кэширование
Кэш
Кэш
memcached
memcached
Общая схема кэширования
Общая схема кэширования
Архитектура memcached
Архитектура memcached
Потеря ключей
Потеря ключей
Применение memcached
Применение memcached
Задачи
Задачи
Ключ кэширования
Ключ кэширования
Кластеризация memcached
Кластеризация memcached
Распределение ключей
Распределение ключей
Атомарность операций
Атомарность операций
Счетчики в memcached
Счетчики в memcached
Счетчик онлайнеров
Счетчик онлайнеров
Одновременное перестроение кэшей
Одновременное перестроение кэшей
Решение проблемы
Решение проблемы
Пример
Пример
Пример
Пример
Блокировки в memcached
Блокировки в memcached
Сброс группы кэшей
Сброс группы кэшей
Тэгирование кэшей
Тэгирование кэшей
Тэгирование кэшей
Тэгирование кэшей
Пример
Пример
tag2++
tag2++
Пример
Пример
Версия тэга и слейвы БД
Версия тэга и слейвы БД
Статистика memcached
Статистика memcached
Slab-аллокатор
Slab-аллокатор
Статистика slab-аллокатора
Статистика slab-аллокатора
Отладка memcached
Отладка memcached
Дополнительные вопросы
Дополнительные вопросы
Всё!
Всё!

Презентация: «Добавить в текущее время». Автор: 111. Файл: «Добавить в текущее время.ppt». Размер zip-архива: 779 КБ.

Добавить в текущее время

содержание презентации «Добавить в текущее время.ppt»
СлайдТекст
1 Web, кэширование и memcached

Web, кэширование и memcached

Андрей Смирнов (НетСтрим)

2 Кэширование

Кэширование

Время отклика сервера – важный фактор для пользователей. Для сложного сайта генерация одной страницы ~ 20-50 запросов к БД. Вычислительно сложные задачи (запросы) ~ 1-? секунд. Кэширование как способ минимизации времени отклика и снижения нагрузки на сервер.

3 Кэш

Кэш

Кэш встречается везде: ЦП, жесткий диск, магнитола в машине, буферы ОС, … Успех кэша в принципе локальности.

4 memcached

memcached

Большая хэш-таблица в памяти, доступная через сетевой протокол. Операции: get/set/del «Атомарность» incr/decr cas/add/replace append/prepend

Brad Fitzpatrick

5 Общая схема кэширования

Общая схема кэширования

6 Архитектура memcached

Архитектура memcached

Никаких вычислительно сложных операций. Все операции – O(1). Никаких нитей – асинхронный ввод/вывод. Время отклика сервера – почти RTT.

7 Потеря ключей

Потеря ключей

Ограниченность объема памяти, выделенного memcached. Истек срок жизни ключа. Отказ сервера или процесса memcached.

8 Применение memcached

Применение memcached

«Можно потерять»: кэширование выборок БД; вычислительно сложные значения. «Не хотелось бы потерять»: счетчики посетителей, просмотров и т.п. «Совсем не должны терять»: сессии пользователей.

9 Задачи

Задачи

Формирование ключа кэширования. Кластеризация memcached. Счетчики и атомарность. Как избежать одновременного перестроения кэшей. Сброс группы кэшей. Анализ статистики memcached, slab-аллокатор. Отладка memcached, дополнительные вопросы.

10 Ключ кэширования

Ключ кэширования

Ключ – строка ограниченной длины. По параметрам выборки должен однозначно определяться ключ. При изменении параметров выборки ключ должен изменяться. Вариант: ключ = md5(serialize(параметры))

11 Кластеризация memcached

Кластеризация memcached

Зачем: увеличение объема кэша; обеспечение некоторой отказоустойчивости; распределение нагрузки. Как распределить ключи?

12 Распределение ключей

Распределение ключей

Необходима функция: f(ключ)=номер_сервера «Стандартный вариант» по модулю: f(ключ)=crc32(ключ)%кол-во_серверов Consistent hashing:

13 Атомарность операций

Атомарность операций

memcached не обеспечивает операций блокировки. Обычные операции get/set не обеспечивают атомарности. Самые простые атомарные операции: инкремент/декремент (incr/decr).

14 Счетчики в memcached

Счетчики в memcached

Пример: счетчик просмотров в реальном времени. число просмотров аккумулируется и сохраняется в БД; после просмотра увеличиваем (incr) счетчик в memcached; если получили ошибку, выбираем начальное значение из БД (set). Наличие race condition.

15 Счетчик онлайнеров

Счетчик онлайнеров

Онлайнеры – кол-во уникальных сессий за последние 5 минут

Значение счетчика = ? (5,0,1,2,3)

Текущий изменяемый ключ

450

580

434

497

101

503

5

1

2

3

4

0

Время жизни каждого ключа – 5 минут

16 Одновременное перестроение кэшей

Одновременное перестроение кэшей

Пусть есть кэш с большим количеством обращений на чтение. В какой-то момент истекает срок жизни кэша. Большое число frontendов пытаются одновременно перестроить кеш. Получаем огромную нагрузку на backend в один момент времени.

17 Решение проблемы

Решение проблемы

Храним ключи кэшей без ограничения по времени. В значение кэша записываем реальное время жизни кэша. Если получили устаревший кэш, предпринимаем попытку перестроения с блокировкой. Если кто-то уже перестраивает кэш, подождем или вернём старое значение.

18 Пример

Пример

Обращаемся за кэшем, например ‘user_info_id_159’ Сравниваем срок годности с текущим временем. Кэш «протух» ? необходимо его построить заново.

Срок годности: 2008-10-07 21:00 данные кэша: [ id: 159 login: ‘user’ nick: ‘hello’ … ]

Ключ user_info_id_159:

19 Пример

Пример

Пытаемся заблокироваться по ключу user_info_id_159_lock. Не удалось получить блокировку: ждём снятия блокировки; не дождались: возвращаем старые данные кэша; дождались: выбираем значения ключа заново, возвращаем новые данные (построенный кэш другим процессом). Удалось получить блокировку: строим кэш самостоятельно.

20 Блокировки в memcached

Блокировки в memcached

Первый вариант: get/set блокировка get(lock) ? 1 ? locked set(lock, 1, small_timeout) … delete(lock) неатомарная, простая, работоспособна для нас. Корректная блокировка: gets/cas блокировка gets(lock) ? значение, unique cas(lock, 1, unique, small_timeout) атомарна, корректна.

21 Сброс группы кэшей

Сброс группы кэшей

Один и тот же объект часто входит в несколько разных выборок, а значит и кэшей, т.е. изменение объекта должно приводить к инвалидации группы кэшей. memcached не поддерживает «папки», т.к. это противоречит сложности О(1) для всех операций. Что делать?

22 Тэгирование кэшей

Тэгирование кэшей

Тэг – это имя и версия группы кэшей. Версия – монотонно увеличивающееся число. Сброс группы кэшей – увеличение версии тэга группы.

23 Тэгирование кэшей

Тэгирование кэшей

В memcached вместе с данными кэша отправляем номера версий всех тэгов, которые были актуальны на момент создания кэша. При получении кэша, он считается валидным, если: у него не истекло собственное «время жизни»; текущая версия всех тэгов, с которыми связан кэш, равна версиям, записанным в кэше.

24 Пример

Пример

Записали в кэш:

Было:

Срок годности: 2008-10-07 21:00 данные кэша: [ … ] тэги: [ tag1 : 25 tag2 : 63 ]

tag1 ? 25

tag2 ? 63

25 tag2++

tag2++

Пример

26 Пример

Пример

Лежит в кэше:

Стало:

Срок годности: 2008-10-07 21:00 данные кэша: [ … ] тэги: [ tag1 : 25 tag2 : 63 ]

tag1 ? 25

tag2 ? 64

Кэш устарел!

27 Версия тэга и слейвы БД

Версия тэга и слейвы БД

Удачный вариант версии – текущее время: монотонно увеличивается; при потере значения тэга в memcached корректно восстанавливается. Версия в виде времени может использоваться для компенсации задержки в синхронизации слейвов БД: если (текущее время – версия) < 10 сек., используем для выборки мастера.

28 Статистика memcached

Статистика memcached

Команда stats позволяет получить различную статистику по работе memcached. «Обычная статистика»: процент хитов по отношению к общему числу «get» (эффективность кэша); ключи, удаленные раньше времени из кэша (достаточность объема памяти); объем памяти процесса, uptime и т.п.

29 Slab-аллокатор

Slab-аллокатор

Баланс между внутренней фрагментацией и эффективностью использования памяти. Эффективные O(1) алгоритмы. Набор slab’ов под блоки предопределенного размера: 64, 128, 256, …, 210. Каждый slab: использовано кусков, занято кусков, список свободных кусков, очередь LRU.

30 Статистика slab-аллокатора

Статистика slab-аллокатора

31 Отладка memcached

Отладка memcached

Проблемы плохо воспроизводятся в локальном/тестовом окружении. Отладка возможна только в реальном времени (без остановок). Вариант решения: одно действие – один символ в лог: MLWUHHHHHHHHHHHHHHHMLLHHHHHHHHHH

32 Дополнительные вопросы

Дополнительные вопросы

memcached как способ межпроцессного/межъязыкового взаимодействия; Кэширование memcached («кэширование кэша»): в теле процесса, в локальном кэше (eAccelerator и т.п.) Другая семантика: memcachedb, memcacheq, и т.п.

33 Всё!

Всё!

Вопросы? Контакты: smira@netstream.ru http://smira.ru/

«Добавить в текущее время»
http://900igr.net/prezentacija/informatika/dobavit-v-tekuschee-vremja-234303.html
cсылка на страницу
Урок

Информатика

130 тем
Слайды