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

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

Jan 06, 2017

Download

Engineering

Ontico
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Кэширование данных в web приложениях. Использование memcached / Юрий Краснощек (Delphi LLC, Dell)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Cache-Control: no-cache

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

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

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

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

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

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

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

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

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

Где хранить?

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

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

• http://db-engines.com

Где хранить?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Memcached slabs и LRU

96

120

1M

Head … Tail

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

Per-slab stats• stats slabs • stats items

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

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

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

(например mcrouter)

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

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

• Consistent hashing ring

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

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

www.cachelot.io [email protected] @cachelot_io

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