Значение термина "кэширование"
Кэширование сохраняет в памяти копии часто запрашиваемых данных, что позволяет приложениям избегать повторных обращений к базе данных и быстрее выдавать результаты.
Кэширование сохраняет в памяти копии часто запрашиваемых данных, что позволяет приложениям избегать повторных обращений к базе данных и быстрее выдавать результаты.
Кэширование — это практика хранения данных в формате "ключ-значение" во временной памяти (например, в нереляционной базе данных NoSQL), благодаря чему приложения могут извлекать их быстрее, чем из обычных хранилищ. В архитектурах облачных хранилищ, где запросы часто передаются между сетями и взаимодействуют с общими сервисами, кэширование помогает поддерживать низкое время отклика и сокращать объем повторяющихся операций.
Большинство систем хранят надежный "источник истины»" (базу данных) для полных наборов данных, а также используют кэш для временных подмножеств, к которым часто обращаются при чтении. При поступлении запроса приложение сначала проверяет кэш; если данные там есть, оно быстро возвращает их, не обращаясь повторно к серверной части. Разработчики также кэшируют обработанные данные и повторно используют их для более быстрой обработки запросов по сравнению со стандартными запросами к реляционным базам данных, SQL-базам данных или базам данных PostgreSQL с открытым кодом.
К числу подходящих вариантов относятся данные, которые часто считываются, а также данные, изменяющиеся редко (например, сведения о товарах и ценах или общие статические ресурсы, создание которых требует значительных затрат).
Если операция преобразует данные или выполняет сложные вычисления, кэширование результата позволяет избежать повторного выполнения вычислений при последующих запросах.
Разработчики используют многоуровневые кэши ("слои кэширования") для хранения различных типов данных в отдельных кэшах в зависимости от востребованности. Добавление одного или нескольких уровней кэширования может повысить пропускную способность и снизить задержки на уровне данных.
Хранилища, работающие в оперативной памяти, часто используются для временного хранения больших объемов данных сеанса — например, пользовательского ввода, содержимого корзины или настроек персонализации. Для приложений с сохранением состояния команды также хранят состояние сеанса в кэше, чтобы само приложение могло оставаться без сохранения состояния.
Кэширование может повысить производительность несколькими конкретными способами:
Во многих облачных архитектурах кэш располагается рядом с основным хранилищем данных (например, базой данных). В основном хранилище на облачном сервере размещается полный и надежный набор данных, тогда как в кэше хранится меньшее временное подмножество, доступное для более быстрого чтения.
Распространенный вариант конфигурации — это отдельный уровень кэширования или кэш, встроенный в уровень приложения или базы данных. Выбор зависит от того, где именно требуется высокая скорость чтения.
В некоторых системах используется многоуровневое кэширование ("уровни кэша"), благодаря чему различные типы данных размещаются в разных кэшах в зависимости от востребованности. Добавление одного или нескольких уровней кэширования позволяет повысить пропускную способность и снизить задержки на уровне данных, а также уменьшить общие затраты за счет снижения нагрузки на серверную часть.
Команды обычно кэшируют данные, относящиеся к нескольким категориям:
Существует несколько стандартных способов чтения данных из кэша и записи в него для приложений. Вот наиболее распространенные модели и их практическое значение.
Использование уровней кэширования позволяет повысить пропускную способность и снизить задержки за счет обработки часто повторяющихся запросов из кэша, вместо того чтобы каждый раз обращаться к основному хранилищу. Это позволяет снизить потребность в масштабировании инфраструктуры баз данных, поскольку до самой базы данных изначально доходит меньше запросов.
Для приложений, характеризующихся резкими всплесками активности, кэши в оперативной памяти помогают снизить задержки, сохраняя часто запрашиваемые данные в непосредственной близости от места их использования.
Используйте их в качестве отправной точки при выборе рабочего процесса:
Кэширование повышает производительность приложения, поскольку чтение из кэша в оперативной памяти происходит быстрее, чем чтение из хранилища данных на диске. Когда больше запросов обслуживается из кэша, системы отправляют меньше запросов к серверным базам данных, что позволяет снизить потребность в масштабировании инфраструктуры баз данных и уменьшить сопутствующие расходы.
Кэширование помогает избежать повторной работы. Данные, которые считываются многократно или создание которых требует значительных затрат, можно сохранить один раз и использовать повторно. Если операция выполняет сложные вычисления или преобразует данные, кэширование результата позволяет избежать повторных вычислений при последующих запросах.
Многие сайты кэшируют результаты формирования страниц (например, HTML и клиентские сценарии), чтобы сервер мог отдавать кэшированные данные вместо того, чтобы каждый раз заново выполнять код страницы. Кэширование также поддерживает сценарии использования веб-мультимедиа посредством веб-кэшей и сетевого кэширования, например, сетей доставки контента (CDN).
Приложения часто хранят временные подмножества данных в кэше для быстрого доступа, в то время как основная база данных содержит полный набор постоянных данных. Кэширование и повторное использование обработанных данных позволяют выполнять запросы быстрее, чем стандартные запросы к базе данных.
Команды часто добавляют один или несколько уровней кэширования для повышения пропускной способности и снижения задержек, обслуживая частые запросы из кэша и уменьшая нагрузку на базу данных. Кэши, работающие в оперативной памяти, могут помочь при резком росте интенсивности использования и потребности в высокой пропускной способности, снижая задержки в такие периоды.
Кэширование часто используется для хранения больших объемов кратковременных данных сеанса (например, введенных пользователем сведений или настроек персонализации) в оперативной памяти. Некоторые команды также хранят состояние сеанса в кэше, чтобы приложения с поддержкой состояния могли сохранять уровень приложения без состояния. В операционных системах данные, которые изменяются редко (например, сведения о товарах и ценах), часто становятся объектами кэширования.
Кэш браузера сохраняет копии статических ресурсов на устройстве пользователя, благодаря чему при повторных посещениях эти файлы можно использовать повторно, а не загружать их заново.
Кэширование на стороне сервера происходит в процессах, выполняющих бизнес-сервисы удаленно, а не на устройстве конечного пользователя. Серверные кэши часто бывают личными (локальными для одного экземпляра приложения) или общими (используемыми множеством экземпляров приложения).
CDN кэширует контент на пограничных серверах, расположенных ближе к конечным пользователям, поэтому запросы не всегда отправляются к исходному серверу. В отличие от кэша браузера (предназначенного для одного пользователя), кэш CDN является общим: запрос одного пользователя может привести к наполнению кэша контентом, который впоследствии получит другой пользователь.
Кэширование — это не только шаблон облачных вычислений, оно также применяется на уровнях аппаратного обеспечения и памяти.
Кэш ЦП — это небольшая область высокоскоростной памяти, расположенная рядом с процессором (или непосредственно на нем), в которой хранятся копии часто используемых данных и инструкций, что позволяет сократить время ожидания при обращении к основной памяти.
Кэш памяти (в оперативной памяти) — это простейший тип программного кэша: хранилище данных, размещенное в адресном пространстве одного процесса и доступное этому процессу напрямую.
Распределенный кэш охватывает несколько серверов, что позволяет ему увеличиваться в объеме и обеспечивать транзакционную производительность, превышающую возможности одного сервера. Многие сервисы общего кэширования используют кластер серверов и распределяют кэшированные данные по всему кластеру; масштабирование кэша может сводиться к простой установке дополнительных серверов. В некоторых распределенных системах используется многоуровневое кэширование: при промахе на одном уровне данные запрашиваются у вышестоящего источника, а полученный результат сохраняется локально для последующих запросов.
Кэширование позволяет хранить часто используемые данные ближе к месту их применения, что может сократить время отклика и помочь системе обрабатывать больше одновременных запросов. Это также позволяет снизить конкуренцию за ресурсы в исходном хранилище данных — например, в ситуациях, когда база данных имеет ограничения по числу подключений.
В распределенных приложениях кэширование часто происходит на нескольких уровнях: на стороне клиента (например, в браузере) и на стороне сервера (в самом приложении или в службе общего кэширования).
Начните с малого и сосредоточьтесь на данных, которые приносят наиболее очевидную отдачу:
Кэш обычно хранит копии данных из основного хранилища, поэтому необходимо уделять внимание их актуальности:
Кэширование — это фундаментальный элемент современных систем, поскольку оно подходит для множества архитектур: от отдельных сервисов до распределенных приложений и систем доставки контента на границе сети. В качестве управляемого кэша в памяти у поставщика облачных служб можно рассмотреть Azure.