Обзор кэширования

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

Что такое кэширование?

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

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

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

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

ElastiCache Deep Dive: Best Practices and Usage Patterns

Обзор кэширования

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

Области применения. Кэш используется на разных технологических уровнях, включая операционные системы, сетевые уровни, в том числе сети доставки контента (CDN) и DNS, интернет-приложения и базы данных. С помощью кэширования можно значительно сократить задержку и увеличить количество операций ввода-вывода в секунду для рабочей нагрузки многих приложений с большим количеством операций чтения, таких как порталы вопросов и ответов, игры, сервисы обмена мультимедийными материалами и социальные сети. Информация в кэше может включать результаты запросов к базе данных, сложных вычислений, запросы и ответы API, а также интернет-артефакты, такие как HTML, JavaScript и файлы изображений. Рабочие нагрузки, требующие больших вычислительных мощностей для обработки наборов данных, например сервисы рекомендаций и высокопроизводительное вычислительное моделирование, тоже могут эффективно использовать уровень данных в памяти в качестве кэша. В приложениях такого рода доступ к огромным наборам данных осуществляется в реальном времени на кластерах машин, которые могут охватывать сотни узлов. Скорость работы базового оборудования, осуществляющего обработку данных в дисковом хранилище, представляет собой серьезное препятствие для таких приложений.

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

Рекомендации по кэшированию. При реализации уровня кэша необходимо принимать во внимание достоверность кэшируемых данных. Эффективный кэш обеспечивает высокую частоту попаданий, то есть наличия в кэше запрашиваемых данных. Промах кэша происходит, когда запрашиваемых данных в кэше нет. Для удаления из кэша неактуальных данных применяются такие механизмы, как TTL (время жизни). Следует также понимать, требуется ли для среды кэширования высокая доступность. Если она необходима, можно использовать сервисы в памяти, такие как Redis. В ряде случаев уровень в памяти можно использовать как отдельный уровень хранения данных, в отличие от кэширования из основного хранилища. Чтобы решить, подходит ли такой вариант, необходимо определить для данных в сервисе в памяти соответствующие значения RTO (требуемое время восстановления, то есть сколько времени требуется системе на восстановление после сбоя) и RPO (требуемая точка восстановления, то есть последняя восстанавливаемая точка или транзакция). Для соответствия большинству требований RTO и RPO можно применять характеристики и проектные стратегии разных сервисов в памяти.

diagram_cachingmicrosite
Уровень Клиентская часть DNS Интернет Приложение База данных
Пример использования

Ускорение загрузки контента с веб-сайтов (для браузеров или мобильных устройств)

Разрешение доменных имен в IP-адреса Ускорение загрузки контента с веб-серверов и серверов приложений. Управление веб-сессиями (на стороне сервера) Повышение производительности приложений и скорости доступа к данным Сокращение задержек, связанных с обработкой запросов к базе данных
Технологии Управление кэшированием с помощью HTTP-заголовков (браузеры) DNS-серверы Управление кэшированием с помощью HTTP-заголовков (CDN, обратные прокси-серверы, интернет-ускорители, хранилища пар «ключ-значение») Хранилища пар «ключ-значение», локальный кэш Буфер базы данных, хранилища пар «ключ-значение»
Решения В зависимости от браузера Amazon Route 53 Amazon CloudFrontElastiCache для RedisElastiCache для Memcachedрешения партнеров Инфраструктуры приложений, ElastiCache для RedisElastiCache для Memcachedрешения партнеров  ElastiCache для RedisElastiCache для Memcached

Кэширование с помощью Amazon ElastiCache

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

Преимущества кэширования

Повышение производительности приложений

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

Сокращение стоимости базы данных

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

Сокращение нагрузки на серверную часть

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

Прогнозируемая производительность

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

Устранение «горячих точек» базы данных

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

Повышение пропускной способности чтения (IOPS)

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

Примеры использования и отрасли

  • Примеры использования
  • Отрасли
  • Примеры использования
  • Узнайте о различных примерах использования кэширования

    Кэширование баз данных

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

    Сеть доставки контента (CDN)

    Когда сетевой трафик распределен по всему земному шару, дублировать инфраструктуру по всей планете довольно сложно и невыгодно. Сеть доставки контента (CDN) позволяет осуществлять пользователям доставку кэшированного контента, например видеозаписей, веб-страниц, изображений и т. д., через всемирную сеть периферийных местоположений. Чтобы сократить время ответа, CDN использует периферийное местоположение, ближайшее к пользователю или к точке отправления запроса. Таким образом, когда сетевые ресурсы передаются из кэша, пропускная способность значительно возрастает. В случае использования динамических данных многие CDN можно настроить на получение информации с исходных серверов.

    Amazon CloudFront – это глобальная сеть доставки контента (CDN), ускоряющая передачу веб-сайтов, API, видеоконтента или других сетевых материалов. Он интегрирован с другими продуктами Amazon Web Services и позволяет разработчикам и компаниям обеспечивать ускоренную доставку контента конечным пользователям просто и без каких-либо обязательств по минимальному объему использования. Подробнее о CDN см. здесь.

    Кэширование систем доменных имен (DNS)

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

    Amazon Route 53 – это высокодоступный и масштабируемый облачный веб-сервис системы доменных имен (DNS).

    Управление сессиями

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

    Подробнее см. здесь.

    Интерфейсы API

    Большинство современных интернет-приложений создается с помощью API. Как правило, API представляет собой веб-сервис RESTful с доступом по HTTP и выделенными ресурсами, с помощью которых пользователь взаимодействует с приложением. При разработке API, помимо прочего, важно учитывать такие факторы, как ожидаемая нагрузка на API, авторизация для его использования, влияние смены версий на пользователей API и прежде всего простота использования выбранного API. Но API не всегда реализует бизнес-логику и/или обращается к серверной базе данных в ответ на каждый запрос. Иногда самым экономным и оптимальным решением является передача кэшированного результата работы API. Это особенно актуально при возможности синхронизации кэширования ответа API с внесением изменений в базовые данные. К примеру, пользователям предоставлен API обращения к списку товаров, при этом категории товаров меняются один раз в день. Поскольку каждый ответ на запрос списка категорий продуктов при каждом обращении к API будет одинаковым в течение всего дня, достаточно сохранить в кэше один ответ API на один день. Кэширование ответа API снимает нагрузку с инфраструктуры, включая серверы приложений и базы данных. Кроме того, скорость ответа становится выше, а работа API – эффективнее.

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

    Кэширование в гибридных средах

    В гибридных облачных средах могут использоваться приложения, которые работают в облаке, но требуют частого обращения к локальной базе данных. Существует множество сетевых топологий, с помощью которых можно связать облачную и локальную среды, например VPN или Direct Connect. Несмотря на то, что задержка между виртуальным частным облаком и локальным ЦОД может быть небольшой, оптимальным решением может стать кэширование локальных данных в облачную среду для ускорения извлечения данных в целом.

    Интернет-кэширование

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

    Общий кэш

    Доступ к данным в оперативной памяти происходит намного быстрее, чем при чтении с магнитного диска или SSD, поэтому использование кэша предоставляет множество преимуществ. В различных примерах использования, когда нет необходимости в поддержке транзакционных данных и в обеспечении надежности данных на диске, применение работающего в памяти хранилища данных типа «ключ-значение» в качестве отдельной базы данных – отличный способ создавать высокоэффективные приложения. Помимо скорости вырастает и пропускная способность приложений – и все это по выгодной цене. Справочные данные, например группы продуктов, списки категорий, данные профилей и т. д., представляют собой оптимальные примеры использования общего кэша. Подробнее об общем кэше см. здесь.

    Интегрированный кэш

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

  • Отрасли
  • Узнайте о различных отраслях и примерах использования кэширования

    Мобильные приложения

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

    AWS Mobile Hub – это объединенная консоль для удобного поиска, настройки и использования облачных сервисов AWS, предназначенных для разработки и тестирования мобильных приложений, а также мониторинга их использования.

    Интернет вещей (IoT)

    Интернет вещей (IoT) – это концепция сбора и передачи информации с удаленных устройств и сенсоров на физических объектах в Интернет или в приложения, которые эти данные обрабатывают. Ценность IoT состоит в том, что с его помощью можно анализировать полученные данные практически в режиме реального времени, что позволяет системе-потребителю и приложениям оперативно реагировать на результаты обработки. Например, представим устройство, передающее координаты GPS. Приложение IoT может реагировать на получаемые данные, предлагая пользователю интересные места относительно указанных координат. Более того, если в сервисе хранятся предпочтения пользователя устройства, такие рекомендации можно индивидуально настраивать. В этом конкретном примере скорость ответа приложения на входящие данные о координатах – это важнейший фактор в обеспечении высокого уровня взаимодействия с пользователем. Здесь важную роль может играть кэширование. Например, в сервисах типа Redis информацию о достопримечательностях и координаты можно хранить в виде пар «ключ-значение» и оперативно передавать их пользователю. С точки зрения разработки приложение IoT можно заставить реагировать на любые события, если для этого существуют программные средства. При создании архитектуры IoT следует учитывать ряд важных факторов, таких как время ответа, включая время анализа переданных данных, возможности масштабирования до определенного количества устройств и общая экономичность решения.

    AWS IoT – это автоматизированная облачная платформа, которая позволяет подключенным устройствам просто и безопасно взаимодействовать с облачными приложениями и другими устройствами.

    Дополнительные материалы по теме: Managing IoT and Time Series Data with Amazon ElastiCache for Redis

    Рекламные технологии

    Современные рекламные приложения особенно требовательны к производительности. Возьмем, к примеру, одну из наиболее активно развивающихся областей рекламных технологий: торги в режиме реального времени (RTB), т. е. аукционы рекламных объявлений в режиме реального времени с максимальной точностью подбора параметров. RTB стал основным методом продажи рекламных мест в 2015 году, когда на его долю пришлось 74 % всей онлайн-рекламы общей стоимостью 11 млрд USD (по данным eMarketer Analytics). При разработке приложения для торгов в режиме реального времени нельзя забывать, что одна миллисекунда может определить разницу между сделанной вовремя ставкой и закрытием аукциона. Следовательно, получение информации о лоте из базы данных должно происходить очень быстро. Кэширование баз данных обеспечивает необходимую производительность, поскольку может обеспечить доступ к информации о лоте за доли миллисекунды.

    Игры

    Основное требование практически к любой современной игре – интерактивность. Ничто так не раздражает пользователей и не подрывает надежды на успех, как медленная и зависающая игра. А к мобильным многопользовательским играм требования еще выше, потому что действия каждого игрока необходимо передавать другим участникам в режиме реального времени. Кэширование помогает устранить задержки в играх за счет обработки запросов к часто используемым данным за доли миллисекунды. Кроме того, кэширование помогает решить проблему «горячих точек» – ситуаций, когда к одному и тому же набору данных, например к списку 10 лучших игроков, регулярно приходит много запросов.

    Подробнее о разработке игр на AWS см. здесь.

    Медиакомпании

    Медиакомпании часто сталкиваются с проблемой передачи большого объема статического контента постоянно меняющемуся количеству читателей или зрителей. В качестве примера можно привести сервисы потокового видео, такие как Netflix и Amazon Video, которые передают пользователям огромное количество видеоконтента. Для решения таких задач и была создана сеть доставки контента, в которой данные хранятся в глобально распределенной системе серверов кэширования. Другой проблемой приложений мультимедиа является непредсказуемость и неоднородность нагрузки. Например, возьмем блог или веб-сайт, о котором какая-нибудь знаменитость только что написала в Twitter, или сайт футбольной команды во время матча за престижный кубок. Такой пик нагрузки, направленный на небольшую подгруппу данных, – непростая задача для большинства баз данных из-за ограниченной пропускной способности по ключам. Поскольку пропускная способность оперативной памяти гораздо выше, чем у дисков, кэш базы данных помогает решить эту проблему путем перенаправления запросов чтения в кэш в памяти.

    Интернет-коммерция

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

    Загрузить образец архитектуры приложения для интернет-коммерции можно здесь.

    Социальные сети

    Приложения для социальных сетей уже завоевали весь мир. Социальными сетями, такими как Facebook, Twitter, Instagram и Snapchat, пользуются миллионы человек, и объемы потребляемого ими контента непрерывно растут. Когда пользователь открывает новостную ленту, он ожидает увидеть подобранный специально для него свежий контент практически в режиме реального времени. И это не статический контент – у каждого пользователя свои друзья, фотографии, интересы и т. д. Все это значительно повышает сложность задач, стоящих перед платформой. Приложения для социальных сетей также сталкиваются с проблемами, связанными с пиковыми нагрузками в периоды крупных развлекательных, спортивных и политических событий. Устойчивость к пиковым нагрузкам и высокая производительность в режиме реального времени возможны благодаря использованию нескольких уровней кэширования, включая сети доставки контента для статического контента, например изображений, кэш сессий для учета данных текущих сессий пользователей и кэш баз данных для ускорения доступа к часто запрашиваемому контенту, например последним фотографиям и свежим новостям от близких друзей.

    Здравоохранение

    Отрасль здравоохранения сейчас переживает цифровую революцию, а медицинские услуги становятся все более доступными для пациентов по всему миру. Некоторые приложения позволяют пациентам общаются с врачами по видеосвязи, а многие крупные клиники предлагают своим клиентам приложения, в которых можно посмотреть результаты анализов и связаться с медицинским персоналом. Программы для мониторинга здоровья также предлагают широкий набор функций, от отслеживания определенных показателей пользователя (как в приложениях FitBit и Jawbone) до всестороннего сбора данных и составления рекомендаций. Учитывая заложенную в эти приложения интерактивность, необходимо обеспечить их быструю работу на уровне интерфейса, уровне бизнес-логики и уровне данных. Эффективная стратегия кэширования помогает добиться высокой производительности, сократить расходы на инфраструктуру и выполнить масштабирование по мере увеличения нагрузки.

    Подробнее о разработке приложений для сферы здравоохранения на AWS см. здесь.

    Финансы и финансовые технологии

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

    Подробнее о финансовых приложениях на AWS см. здесь.

Начать работу с Amazon ElastiCache

icon1

Зарегистрировать аккаунт AWS

Получите мгновенный доступ к уровню бесплатного пользования AWS.
icon2

Обучение с помощью простых учебных пособий

Узнайте, как создать кластер Redis.

icon3

Приступить

Начните разработку с помощью руководства пользователя.