Пропустить и перейти к основному содержимому

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

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

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

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

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

Кэширование можно использовать со всеми типами хранилищ данных, включая базы данных NoSQL, а также реляционные базы данных, такие как SQL Server, MySQL и MariaDB. Кэширование также хорошо работает со многими специфическими платформами обработки данных, такими как База данных Azure для PostgreSQL, База данных SQL Azure и Управляемый экземпляр SQL Azure. Прежде чем приступать к настройке архитектуры данных, рекомендуется изучить, какой тип хранилища данных будет соответствовать вашим требованиям наилучшим образом. Например, вам необходимо понять, что представляет собой база данных PostgreSQL, прежде чем использовать ее для объединения реляционных и неструктурированных хранилищ данных.

Каковы преимущества многоуровневого кэша? И что такое Redis?

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

Redis — это популярное хранилище данных в памяти с открытым исходным кодом, используемое для создания высокопроизводительных многоуровневых кэшей и других хранилищ данных. Недавнее исследование показало, что использование образца приложения совместно с Кэшем Azure для Redis увеличивает пропускную способность данных более чем на 800 % и уменьшает время задержки более чем на 1000 %1.

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

Типы кэширования

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

Кэш на стороне

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

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

Кэш сквозного чтения и сквозной записи

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

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

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

Кэш отложенной или обратной записи

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

Распределенный кэш и хранилище сеансов

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

Что такое хранилище сеансов?

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

В чем различия между хранилищем сеансов и кэшем базы данных?

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

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

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

Улучшение производительности приложений

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

Уменьшение нагрузки на базу данных и сокращение затрат

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

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

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

Для чего используется кэширование?

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

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

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

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

Хранение данных сеансов пользователей

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

Брокеры сообщений и архитектуры типа "издатель-подписчик"

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

Приложения и API

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

1Утверждения о производительности основаны на данных исследования, проведенного компанией GigaOm в октябре 2020 г. по заказу корпорации Майкрософт. В исследовании сравнивается производительность тестового приложения, использующего базу данных Azure с реализацией Кэша Azure для Redis в качестве решения для кэширования и без нее. В качестве элемента базы данных в исследовании использовались База данных SQL Azure и База данных Azure для PostgreSQL. Использовался экземпляр Базы данных SQL Azure общего назначения 5-го поколения с 2 виртуальными ядрами и экземпляр Базы данных Azure для PostgreSQL общего назначения с 2 виртуальными ядрами в сочетании с экземпляром Azure для Redis уровня P1 Premium на 6 ГБ. Эти результаты сравнивались с результатами экземпляров Базы данных SQL Azure общего назначения 5-го поколения с 8, 16, 24 и 32 виртуальными ядрами и Базы данных Azure для PostgreSQL общего назначения с 8, 16, 24 и 32 виртуальными ядрами без реализации Кэша Azure для Redis. Контрольные данные были получены с помощью нагрузочного теста базы данных веб-приложения GigaOm, который имитирует отправку увеличивающегося числа HTTP-запросов к обычному веб-приложению и серверной базе данных. Фактические результаты могут отличаться в зависимости от конфигурации и региона. См. полное исследование.

Бесплатная учетная запись

Попробуйте службы облачных вычислений Azure бесплатно в течение 30 дней.

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

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

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

Если вы хотите реализовать гибкое кэширование на основе файлов для высокопроизводительных приложений, ознакомьтесь со сведениями об Azure HPC Cache.