Содержание

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

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

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

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

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

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

Попробовать Azure бесплатно

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

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

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

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

Начать

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

Azure HPC Cache

Кэширование: определение, проверка, настройка, и как оно вообще работает

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

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

Однако размер кэша не безграничен. Кэшированные данные занимают память, а это значит, что если не ставить ограничения на объем кэша и не проводить периодическую «чистку», тогда есть риск, что память переполнится. Переполнение памяти грозит аварийным завершением работы устройства или программы.

Кэширование — что это?

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

Кэширование — это многоуровневый процесс. Рядовой пользователь знаком с кэшированием на уровне браузера, когда проводится чистка кэша и его истории, или на уровне устройства, когда чистится кэш и «мусорные файлы» телефона или компьютера. Однако это не все уровни кэширования. Между пользователем и сервером-источником информации различают следующие уровни кэширования:

  • общие кэшированные данные веб-сервера — обычно это информация сразу для нескольких пользователей;

  • кэшированные данные сети доставки информации — это также информация сразу о нескольких пользователях;

  • кэширование интернет-провайдера — это также кэш сразу о нескольких пользователях;

  • кэшированные данные устройства — это информация о запускаемых программах;

  • кэширование веб-браузера — информация о посещенных веб-страницах.

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

Что такое кэшированные данные и их актуальность

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

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

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

Кэширование и его преимущества

Для разных уровней кэширования этот процесс несет свои преимущества. Например:

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

  2. Повышает отзывчивость. Потому что пользователь быстрее получает кэшированный контент, например, из браузера — практически мгновенный процесс. А это значит, что пользователь может быстрее взаимодействовать с контентом.

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

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

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

Стратегии кэширования

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

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

Нет единой стратегии кэширования. Для каждого отдельного ресурса этот процесс будет иметь собственное значение. Важно помнить, что при создании кэша нужно соблюдать баланс. Поэтому нужно брать во внимание, что на каждом веб-ресурсе будут:

  • компоненты, которые можно надолго кэшировать;

  • компоненты, у которых срок кэширования будет коротким;

  • компоненты, которые нельзя кэшировать.

Заключение

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

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

Часто задаваемые вопросы о кэшировании баз данных

Типы баз данных кэширования

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

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

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

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

Сравнение подходов к кэшированию базы данных

Предварительное кэширование и кэширование

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

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

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

Боковой кэш и прозрачный кэш

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

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

Недостатки кэширования базы данных

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

Внешний кеш увеличивает задержку

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

Внешний кэш оплачивается дополнительно

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

Внешнее кэширование снижает доступность

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

Сложность приложения — ваше приложение должно обрабатывать больше случаев

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

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

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

Внешнее кэширование не защищено

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

Внешнее кэширование игнорирует знания базы данных и ресурсы базы данных

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

Как Apache Cassandra подходит к кэшированию

Apache Cassandra использует несколько отдельных конкурирующих кэшей (кэш ключей, кэш строк, кэш в куче и вне кучи и кэш страниц ОС Linux), для анализа и настройки которых требуется оператор — ручной процесс, который никогда не будет в состоянии идти в ногу с динамическими рабочими нагрузками пользователей.

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

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

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

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

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

Основы кэширования. Что такое кэшированные данные

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

Для медийной компании это может означать просмотр большего количества статей и рекламы, а для сайта электронной коммерции это означает, что клиенты просматривают больше продуктов. На самом деле было даже показано, что более быстрые веб-страницы приводят к увеличению конверсии и дохода, а задержка веб-страницы всего на 1 секунду приводит к потере дохода в среднем на 7%. Более быстрые веб-страницы также означают, что поисковые системы более благосклонно относятся к вашему веб-сайту, что повышает его ценность для SEO и означает, что больше людей находят ваш сайт.

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

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

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

Кэш браузера: зачем мне очищать кеш?

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

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

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

Что такое попадание в кеш и промах в кеше?:

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

Как вступает в игру сеть доставки контента?

Теперь, когда вы знакомы с основами кэширования, вас может заинтересовать, какой тип контента веб-сайты выбирают для кэширования и почему, как настроить кэширование для собственного веб-сайта и как связаны сети доставки контента или CDN. к кэшированию. Мы расскажем обо всем этом во второй части книги «Основы кэширования»: ищите ее в блоге раздела на следующей неделе.