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

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

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

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

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

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

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

В чем преимущества слоев кэшей? И что такое Redis?

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

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

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

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

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

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

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

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

Кэш со сквозным чтением и сквозной записью

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

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

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

Кэш с отложенной записью

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

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

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

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

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

Чем использование хранилища сеансов отличается от кэширования базы данных?

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

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

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

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

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

Снижение нагрузки и затрат на базу данных

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

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

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

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

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

Кэширование вывода помогает повысить производительность веб-страниц за счет хранения их полного исходного кода, например, 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.