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

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

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

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

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

diagram_cachingmicrosite
Уровень Клиентская часть 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 – это веб-сервис, упрощающий развертывание и масштабирование в облаке хранилища или кэша данных в памяти, а также управление ими. Сервис повышает производительность интернет-приложений, позволяя получать информацию из быстрых управляемых хранилищ данных, размещенных в памяти, а не из более медленных баз данных на жестких дисках.

Информацию о том, как реализовать эффективную стратегию кэширования, см. в этом техническом описании по кэшированию в памяти.

ElastiCache_Deep_Dive_2016
ElastiCache Deep Dive: Best Practices and Usage Patterns
15
Повышение производительности приложений

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

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

Один инстанс кэша выполняет сотни тысяч 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. Такие сервисы берут на себя все вопросы по настройке и администрированию кэша, а также управлению им, чтобы у клиента было больше времени на решение основных задач организации. Зарегистрируйтесь сегодня и начните использовать Amazon ElastiCache.

Начало работы с Amazon ElastiCache