Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

8,783 views

Published on

Каждый разработчик web приложений рано или поздно сталкивается с довольно типичной проблемой: перед ним стоит задача построить фабрику по производству омнониевых торсиометров.
Фабрика производит омнониевые торсиометры очень быстро, но для калибровки прибора (как известно) необходим омноний, за которым приходится летать на Андромеду.
Пока корабль летит до Андромеды, фабрика простаивает.
Самый очевидный выход из ситуации - построить склад омнониума прямо рядом с фабрикой.

Терминология кэширования

Выбор места для кэширования в WEB

Выбор данных для кэширования

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

Отдельный кэширующий сервис

Пара слов о memcached

Пара слов о Redis

Published in: Engineering
  • Be the first to comment

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

  1. 1. Кэширование данных в web приложениях. Использование memcached Краснощёк Юрий
  2. 2. Омнониевые торсиометры Каждый разработчик web приложений рано или поздно сталкивается с довольно типичной проблемой: перед ним стоит задача построить фабрику по производству омнониевых торсиометров.
  3. 3. Что делать? Нужно применить типовую схему фабрики по производству торсиометров
  4. 4. Калибровка для калибровки прибора необходим чистый омноний, за которым приходится летать
  5. 5. Склад омнониума Самое очевидное решение проблемы - построить склад рядом с фабрикой
  6. 6. Это не бесплатно • Вырастает сложность предприятия • Нужно организовать логистику • Вести складской учет
  7. 7. Терминология • Источник чистого омнония - origin • Cклад ограничен по объему - cache size • Поиск образца нужной формы и породы - cache hit / cache miss
  8. 8. Терминология • Омнониум быстро портится - freshness • испорченным омнониумом торсиометры калибровать нельзя - stale data
  9. 9. Терминология • нужно проверить пригодность - validation • выбросить просроченный омнониум со склада - invalidation
  10. 10. Терминология • Иногда случается обидная ситуация: cклад переполняется, и приходится выбрасывать ещё годный омнониум - eviction
  11. 11. Браузер HTTP сервер БэкендПрокси Где кэшировать?
  12. 12. “Хорошие” данные • Не кэшировать часто изменяющиеся данные • Кэшировать 20% данных, которые используются 80% времени • размер данных имеет значение
  13. 13. Кандидаты на кэширование • Статика, картинки и медиа • Java script / CSS / HTML • Объекты бизнес-логики • Временные данные: сессии, статистика
  14. 14. HTTP Headers • Expires: • Cache-Control: • Last-Modified: • Etag: • Content-Length: • Vary:
  15. 15. Expires Время в формате HTTP-date, до которого контент валиден Expires: Fri, 30 Oct 1998 14:19:41 GMT Нужно использовать, как fallback
  16. 16. Cache-Control Новый механизм управления кэшем Cache-Control: max-age=3600, must-revalidate, public Cache-Control: no-cache
  17. 17. Cache-Control • no-store указывает на то, что данные нельзя кэшировать ни при каких обстоятельствах
  18. 18. HTTP Headers • Expires: • Cache-Control: • Last-Modified: • Etag: • Content-Length: • Vary:
  19. 19. Кэш на стороне бэкенда
  20. 20. • Бэкенд хранит копии объектов из базы прямо в коде • Используется библиотека, или компонент для кэширования Где хранить?
  21. 21. • Используется отдельный кэширующий сервер, или хранилище: memcached, redis, hazelcast, etc. • http://db-engines.com Где хранить?
  22. 22. Когда нужен кэширующий сервер • доступ к данным из разных мест • availability • масштабирование
  23. 23. noSQL - это хорошо • Низкий latency • Легко хранить плохо структурированные, разнородные данные • Упрощается код хранилища (уменьшается риск порчи данных)
  24. 24. Memcached • key value, поддерживает freshness • Фиксированный объем памяти (-m) • 16-тибитные флаги • Работает в режиме LRU, или консистентного кэша
  25. 25. Memcached Лучшая документация - это описание протокола https://github.com/ memcached/memcached/ blob/master/doc/protocol.txt
  26. 26. Memcached • get • set / add / delete / replace • prepend / append • touch • incr / decr
  27. 27. Memcached • gets / cas • ключ -C
  28. 28. Эффективное использование memcahed • Много сессий • Batch запросов • Настройка потоков (-t) • UDP
  29. 29. Статистика memcached • Команда stats • hits / misses • evictions • conn_yields прерывание батча и ключ (-R)
  30. 30. Memcached slabs и LRU 96 120 … 1M Head … Tail
  31. 31. Per-slab stats • stats slabs • stats items
  32. 32. Кластер memcached • Клиент выбирает инстанс (например libketama) • Используется брокер (например mcrouter)
  33. 33. Кластер memcached • Выбор ноды для чтения, или записи (hash % num_nodes не работает) • Consistent hashing ring
  34. 34. Спасибо Краснощек Юрий www.cachelot.io cachelot@cachelot.io @cachelot_io Для презентации использованы иконки http://www.flaticon.com/

×