В сфере вычислительной обработки данных кэш – это высокоскоростной уровень хранения, на котором находятся преимущественно транзитные данные. Доступ к данным на этом уровне осуществляется значительно быстрее, чем к основному месту их хранения. С помощью кэширования становится возможным эффективное повторное использование ранее полученных или вычисленных данных. Данные в кэше обычно хранятся на устройстве с быстрым доступом, таком как RAM (Random-access memory, или оперативное запоминающее устройство, ОЗУ), и могут использоваться совместно с программными компонентами. Основная функция кэша – ускорение процесса извлечения данных за счет устранения необходимости обращаться к менее скоростному базовому уровню хранения. Кэш жертвует объемом памяти ради скорости доступа и сохраняет набор данных временно, в отличие от баз данных, где данные обычно хранятся полностью и постоянно.
Кэш используется на разных технологических уровнях, включая операционные системы, сетевые уровни, в том числе сети доставки контента (CDN) и DNS, интернет-приложения и базы данных.
Поскольку ОЗУ и работающие в памяти сервисы обеспечивают высокие показатели скорости обработки запросов, или IOPS (количество операций ввода-вывода в секунду), кэширование повышает скорость извлечения данных и сокращает расходы при работе в больших масштабах. Чтобы обеспечить аналогичный масштаб работы с помощью традиционных баз данных и оборудования на базе жестких дисков, требуются дополнительные ресурсы. Эти ресурсы приводят к повышению расходов, но все равно не позволяют достигнуть такой низкой задержки, какую обеспечивает кэш в памяти.
С помощью кэширования можно значительно сократить задержку и увеличить количество операций ввода-вывода в секунду для рабочей нагрузки многих приложений с большим количеством операций чтения, таких как порталы вопросов и ответов, игры, сервисы обмена мультимедийными материалами и социальные сети. Информация в кэше может включать результаты запросов к базе данных, сложных вычислений, запросы и ответы API, а также интернет-артефакты, такие как HTML, JavaScript и файлы изображений. Интенсивные вычислительные процессы, обрабатывающие массивы данных, например сервисы рекомендаций и высокопроизводительные вычислительные модели, также могут эффективно использовать уровень данных в памяти в качестве кэша. В приложениях такого рода доступ к огромным наборам данных осуществляется в реальном времени на кластерах машин, которые могут охватывать сотни узлов. Скорость работы базового оборудования, осуществляющего обработку данных в дисковом хранилище, представляет собой серьезное препятствие для таких приложений.
В среде распределенных вычислений выделенный уровень кэширования позволяет системам и приложениям работать независимо от кэша, при этом их жизненные циклы на кэш не влияют. В этом случае кэш выступает в роли центрального уровня со своим жизненным циклом и архитектурной топологией, и к нему могут обращаться разноплановые системы. Это особенно актуально для систем, в которых узлы приложения можно динамически масштабировать в обоих направлениях. Если кэш расположен на том же узле, что и использующие его приложения или системы, масштабирование может негативно сказаться на целостности кэша. Кроме того, преимущества от использования локального кэша может получить только локальное приложение, использующее его данные. В среде распределенного кэширования для удобства всех потребителей данные могут распределяться по множеству кэш-серверов и храниться в централизованном хранилище.

| Уровень | Клиентская часть | DNS | Интернет | Приложение | База данных |
| Пример использования | Ускорение загрузки контента с веб-сайтов (для браузеров или мобильных устройств) | Разрешение доменных имен в IP-адреса | Ускорение загрузки контента с веб-серверов и серверов приложений. Управление веб-сессиями (на стороне сервера) | Повышение производительности приложений и скорости доступа к данным | Сокращение задержек, связанных с обработкой запросов к базе данных |
| Технологии | Управление кэшированием с помощью HTTP-заголовков (браузеры) | DNS-серверы | Управление кэшированием с помощью HTTP-заголовков (CDN, обратные прокси-серверы, интернет-ускорители, хранилища пар «ключ-значение») | Хранилища пар «ключ-значение», локальный кэш | Буфер базы данных, хранилища пар «ключ-значение» |
| Решения | В зависимости от браузера | Amazon Route 53 | Amazon CloudFront, ElastiCache для Redis, ElastiCache для Memcached, решения партнеров | Инфраструктуры приложений, ElastiCache для Redis, ElastiCache для Memcached, решения партнеров | ElastiCache для Redis, ElastiCache для Memcached |
При реализации уровня кэша необходимо принимать во внимание достоверность кэшируемых данных. Эффективный кэш обеспечивает высокую частоту попаданий – наличия в кэше запрашиваемых данных. Промах кэша происходит, когда запрашиваемых данных в кэше нет. Для удаления из кэша неактуальных данных применяются такие системы управления, как TTL (время жизни). Следует также понимать, требуется ли для среды кэширования высокая доступность. Если она необходима, можно использовать сервисы в памяти, такие как Redis. В ряде случаев уровень в памяти можно использовать как отдельный уровень хранения данных, в отличие от кэширования из основного хранилища. Чтобы решить, подходит ли такой вариант, необходимо задать соответствующие значения RTO (требуемое время восстановления, т. е. сколько времени требуется системе на восстановление после сбоя) и RPO (требуемая точка восстановления, т. е. последняя восстанавливаемая точка или транзакция) для данных в сервисе в памяти. Для соответствия требованиям RTO и RPO можно применять характеристики и проектные стратегии разных сервисов в памяти.
Amazon ElastiCache – это веб-сервис, упрощающий развертывание и масштабирование в облаке хранилища или кэша данных в памяти, а также управление ими. Сервис повышает производительность интернет-приложений, позволяя получать информацию из быстрых управляемых хранилищ данных, размещенных в памяти, а не из более медленных баз данных на жестких дисках.
Информацию о том, как реализовать эффективную стратегию кэширования, см. в этом техническом описании по кэшированию в памяти.


Оперативная память работает во много раз быстрее, чем жесткие диски (как магнитные, так и SSD), поэтому чтение данных из кэша в памяти занимает доли миллисекунды. Значительно ускоренный таким образом доступ к данным повышает общую производительность приложения.

Один инстанс кэша выполняет сотни тысяч IOPS (операций ввода-вывода в секунду) и способен заменить несколько инстансов базы данных, сокращая общие расходы. Это особенно актуально, если стоимость основной базы данных рассчитывается на основе пропускной способности. В этом случае экономия может составить несколько десятков процентов.

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

Распространенной проблемой современных приложений является необходимость справляться с периодами пиковой нагрузки. С этим сталкиваются социальные приложения в дни крупных спортивных соревнований или выборов, интернет-магазины в дни распродаж и т. д. Рост нагрузки на базу данных приводит к увеличенной задержке при получении ответа на запрос, что негативно сказывается на общей производительности приложения. Эта проблема эффективно решается за счет высокой пропускной способности кэша в памяти.

Во многих приложениях бывают ситуации, когда небольшая часть массива данных, например страница знаменитости или популярный продукт, получает больше запросов, чем другие элементы массива. Это может привести к появлению в базе данных «горячих точек» и избыточному выделению ресурсов сервера на основании установленных требований к пропускной способности для наиболее часто запрашиваемых данных. Если хранить часто используемые ключи в кэше в памяти, исчезает необходимость в выделении лишних ресурсов, а доступ к часто запрашиваемым данным остается быстрым и надежным.

Помимо более низкой задержки, системы хранения данных в памяти обеспечивают гораздо более высокую скорость выполнения запросов (IOPS) по сравнению с аналогичными базами данных на основе жестких дисков. Один инстанс, используемый в качестве распределенного дополнительного кэша, может обрабатывать сотни тысяч запросов в секунду.
Начните работу с кэшированием в облаке с полностью управляемыми сервисами, такими как Amazon ElastiCache. Такие сервисы берут на себя все вопросы по настройке и администрированию кэша, а также управлению им, чтобы у клиента было больше времени на решение основных задач организации. Зарегистрируйтесь сегодня и начните использовать Amazon ElastiCache.




















