34
Кэширование данных в web приложениях. Использование memcached Краснощёк Юрий

Кэширование данных в web приложениях. Использование memcached / Юрий Краснощек (Delphi LLC, Dell)

  • Upload
    ontico

  • View
    6.968

  • Download
    0

Embed Size (px)

Citation preview

Кэширование данных в web приложениях. Использование memcachedКраснощёк Юрий

Омнониевые торсиометрыКаждый разработчик web приложений рано или поздно сталкивается с довольно типичной проблемой: перед ним стоит задача построить фабрику по производству омнониевых торсиометров.

Что делать?Нужно применить типовую схему фабрики по производству торсиометров

Калибровкадля калибровки прибора необходим чистый омноний, за которым приходится летать

Склад омнониумаСамое очевидное решение проблемы - построить склад рядом с фабрикой

Это не бесплатно• Вырастает сложность предприятия

• Нужно организовать логистику

• Вести складской учет

Терминология• Источник чистого омнония - origin

• Cклад ограничен по объему - cache size

• Поиск образца нужной формы и породы - cache hit / cache miss

Терминология• Омнониум быстро портится - freshness

• испорченным омнониумом торсиометры калибровать нельзя - stale data

Терминология• нужно проверить пригодность - validation

• выбросить просроченный омнониум со склада -invalidation

Терминология• Иногда случается обидная ситуация: cклад переполняется, и приходится выбрасывать ещё годный омнониум - eviction

Браузер HTTP сервер

БэкендПрокси

Где кэшировать?

“Хорошие” данные• Не кэшировать часто изменяющиеся данные

• Кэшировать 20% данных, которые используются 80% времени

• размер данных имеет значение

Кандидаты на кэширование • Статика, картинки и медиа

• Java script / CSS / HTML • Объекты бизнес-логики • Временные данные: сессии, статистика

HTTP Headers• Expires: • Cache-Control: • Last-Modified: • Etag: • Content-Length: • Vary:

ExpiresВремя в формате HTTP-date, до которого контент валиден

Expires: Fri, 30 Oct 1998 14:19:41 GMT

Нужно использовать, как fallback

Cache-ControlНовый механизм управления кэшем

Cache-Control: max-age=3600, must-revalidate, public

Cache-Control: no-cache

Cache-Control• no-store указывает на то, что данные нельзя кэшировать ни при каких обстоятельствах

HTTP Headers• Expires: • Cache-Control: • Last-Modified: • Etag: • Content-Length: • Vary:

Кэш на стороне бэкенда

• Бэкенд хранит копии объектов из базы прямо в коде

• Используется библиотека, или компонент для кэширования

Где хранить?

• Используется отдельный кэширующий сервер, или хранилище: memcached, redis, hazelcast, etc.

• http://db-engines.com

Где хранить?

Когда нужен кэширующий сервер• доступ к данным из разных мест

• availability • масштабирование

noSQL - это хорошо• Низкий latency • Легко хранить плохо структурированные, разнородные данные

• Упрощается код хранилища (уменьшается риск порчи данных)

Memcached• key value, поддерживает

freshness • Фиксированный объем памяти (-m)

• 16-тибитные флаги • Работает в режиме LRU, или консистентного кэша

MemcachedЛучшая документация - это описание протокола

https://github.com/memcached/memcached/blob/master/doc/protocol.txt

Memcached• get • set / add / delete / replace • prepend / append • touch • incr / decr

Memcached• gets / cas • ключ -C

Эффективное использование memcahed• Много сессий • Batch запросов • Настройка потоков (-t) • UDP

Статистика memcached• Команда stats • hits / misses • evictions • conn_yields прерывание батча и ключ (-R)

Memcached slabs и LRU

96

120

1M

Head … Tail

Per-slab stats• stats slabs • stats items

Кластер memcached• Клиент выбирает инстанс

(например libketama) • Используется брокер

(например mcrouter)

Кластер memcached• Выбор ноды для чтения, или записи (hash % num_nodes не работает)

• Consistent hashing ring

СпасибоКраснощек Юрий

www.cachelot.io [email protected] @cachelot_io

Для презентации использованы иконки http://www.flaticon.com/