В чем хранить кэш
Перейти к содержимому

В чем хранить кэш

  • автор:

Где лучше хранить кэш?

где лучше хранить кэш больших размеров 4 000 000 по 50-400 кб данных. В бд или в файловой системе? как разделить файлы? Бд майэскьель. Называю это кешем, потому что все данные меняются полностью каждые 24 часа. То есть полностью удаляются. И добавляются совсем другие данные возможно. Может быть меньше может быть больше. База данных не подходит потому что в ней медленно обратабываются данные больших размеров в поле. То есть если кечить хтмл получится 400 кб в одном поле таблица на 4 млн действительно медленно, будет обрабатывать эти запросы. Но вот елси будет 4 000 000 файлов не известно, будет ли быстрее.

На сайте с 25.11.2006
18 июня 2011, 20:57
а мне кажется, что систему кэша менять нужно. у вас 4 млн записей не используются же каждый день?

✅ Трастовых площадок под размещение статей и ссылок. Опыт 15 лет! ( https://searchengines.guru/ru/forum/675690 ) ⭐ Купить вечные трастовые ссылки для сайта ( https://getmanylinks.ru/?srh ) ⭐ Новый аналог AllSubbmitter (заполнение форм) https://getmanylinks.ru/getmanysubmits.html (Бесплатное демо)

На сайте с 03.06.2011
18 июня 2011, 21:47

closeyoureyes:
База данных не подходит потому что в ней медленно обратабываются данные больших размеров в поле.

При правильеой настройке mysql сервера и базы будет работать очень быстро. Если все-таки не устраивает, тогда в memcache или на диске с файловой системой ReiserFS (Linux) / UFS (Freebsd).

18 июня 2011, 23:32

Вот рассматривается ситуация если будут использоватся 4 000 000 каждый день, если же нет, то будет меньше записей, но от этого если выбрать способ который подходит под 4000 000 при меньшем количестве не произойдет я думаю критических ситуаций с производительностью. В чем разница между ReiserFS и ext3? По поводу мемкэтч) пока, что сервер один, будет больше серверов можно будет больше хранить данных в мэмкэч, сейчас не оптимально хранить больше 2000 записей размером от 50кб в мэмкетч. В мэмкетч попадают только наимболее часто используемые. А остальные будут использовватся возможно один раз в день! Или максимум по несолько раз. Но с большим потоком.

Кэш и уровни хранения: какая разница?

Уровни хранения по технологиям, реализованным в накопителях, с оценкой типичного срока службы носителей данных на каждом уровне (источник: fortunadata.com)

Вопрос может показаться странным: понятно ведь, что кэш (caсhe) — один из уровней (tiers) хранения, на котором временно размещаются данные и к которому организован наиболее скоростной доступ. Значительно более скоростной, чем к основному массиву хранения, будь тот даже выстроен как all-flash. Тем не менее, в свете новейших технологических достижений в области хранения — 3D Xpoint, NVDIMM и пр. — граница между кэшем и прочими уровнями ощутимо размывается. Где же она проходит сегодня, и имеет ли смысл само её существование в перспективе?

Подальше положишь — поближе возьмёшь

Наиболее близкий к рядовому пользователю пример кэширования данных при записи являет самый обыкновенный жёсткий диск в составе настольного ПК или ноутбука. Диск этот располагает несколькими (или несколькими десятками, в зависимости от объёма) мегабайтами внутренней памяти DRAM: энергозависимой, зато крайне высокоскоростной. Кэш обеспечивает контроллеру HDD возможность упорядочивать запись и чтение данных, поскольку сама по себе пачка бешено вертящихся пластин, над которыми мечется коромысло с магнитными головками, не является, строго говоря, устройством прямого доступа к данным в словарном смысле этого слова. Вот в сочетании с кэшем — дело другое.

В системах хранения данных, от наиболее серьёзных NAS до виртуальных ленточных библиотек и all-flash arrays (AFA), кэш также используется в качестве промежуточного звена между внешними источниками информации и собственно средой хранения. Но располагаются в этом кэше чаще всего не только фрагменты записываемых/считываемых данных, но и метаданные: служебные сведения об организации логических томов, о реализованной в данной системе многоуровневой структуре хранения, о действующих процедурах репликации и т. п. Именно с использованием метаданных контроллер СХД имеет возможность с наивысшей возможной эффективностью управлять обменом внушительными потоками информации между высокоскоростными внешними интерфейсами и внутренними (нередко более медленными) средами хранения.

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

Кэширование хранящихся в системе данных эффективнее всего проявляет себя на операциях последовательного чтения: алгоритм микроконтроллера распознаёт их и заблаговременно размещает в кэш-памяти данные, которые клиент ещё даже не успел запросить. Если же выборка данных с СХД производится в случайном порядке (что случается на практике значительно чаще), кэш выходит едва ли не бесполезен. С одной существенной оговоркой: в случае организации даже в AFA RAID-массива с распределённой чётностью (уровни 5 и 6, 50 и 60) кэш играет чрезвычайно важную роль — даже если не ускоряет фактически ни считывание. ни запись. В отсутствие оптимизации, возможной только при наличии кэша, независимых обращений к носителям данных центральный процессор будет производить слишком много, и система заработает с заметно пониженной производительностью.

Техническая детализация

Кэш в составе СХД практически всегда предназначен для реализации такой важнейшей функции, как копирование переносимых извне на внутренние накопители данных. Принципиальная важность этой функции — в обеспечении сохранности информации, отправленной в систему хранения, в случае аварийной потери питания или иного аппаратного сбоя. Именно поэтому сквозная запись (write-through), в ходе которой информация одновременно записывается и в кэш, и на постоянный носитель уровнем ниже, с точки зрения систем хранения настолько существенна.

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

Однако в случае уже упоминавшихся массивов AFA с NVMe-oF задержки при прямой записи на SSD в составе системы хранения настолько ничтожны, что применение кэша в режиме сквозной записи повышает надёжность СХД практически безо всяких гандикапов. Для гибридных или полностью укомплектованных магнитными дисками систем более выигрышным в плане минимизации задержек оказывается режим обходной записи (write-around): данные, минуя кэш (условный нулевой уровень хранения), сразу же попадают на первый уровень. Пока информация лишь записывается на систему хранения в течение продолжительного времени, это вполне себя оправдывает. Однако если только что отправленные на запись данные вдруг снова потребовались внешнему клиенту, в скоростном кэше их не окажется, — и тогда задержка при обращении к основному уровню хранения может оказаться чрезмерно долгой.

Кэширование с отложенной записью (write-back) обеспечивает снижение латентности обращений к СХД за счёт менее надёжной сохранности сохраняемых данных. Информация попадает в высокоскоростной кэш, тот рапортует внешнему источнику об успешно завершённой операции, а затем уже переправляет полученные данные на следующей уровень хранения. Как раз на этом участке возможна потеря информации вследствие различных аппаратных сбоев — зато в плане скорости схема с отложенной записью никаких нареканий не вызывает.

Что имеем, сохраним

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

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

Считанные годы назад цена на сверхвысокоскоростные флэш-накопители с интерфейсами PCIe или NVMe была настолько высока, что вопрос о формировании из них сколько-нибудь значимого по объёму уровня хранения даже не поднимался. Сегодня ситуация принципиально иная, и в этой связи вопрос, вынесенный в заголовок статьи, становится по-настоящему актуальным. Если накопитель, по своим скоростным характеристикам прежде использовавшийся лишь для кэширования данных, теперь может послужить основой для построения верхнего уровня системы хранения — есть ли тогда смысл вообще проводить границу между кэшем и прочими уровнями?

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

Однако в последнее время всё большее распространение получает «память класса СХД», или же «хранилище как класс памяти» (Storage Class Memory, SCM). Решения такого класса на базе технологий постоянной памяти (persistent memory, PM) сочетают в себе атрибуты как накопителя данных, так и оперативной памяти. По латентности они вплотную приближаются к модулям DRAM, они допускают побайтную адресацию (один из основных признаков как ОЗУ, так и кэша) и даже подключение по шине DDR, но остаются при этом энергонезависимыми на манер флэш-накопителей.

Фактически, SCM располагается между средами хранения на основе DRAM и NAND по таким показателям, как цена, долговечность и производительность. Память этого типа исходно рассматривалась как кэш для высокопроизводительных СХД, но в перспективе, и особенно с развитием операционных систем нового поколения, явные преимущества побайтовой адресации PM могут вовсе привести к отказу от выделенных подсистем ОЗУ/ПЗУ и к переходу на единый (пусть и дополненный на периферии более медленными уровнями хранения) массив рабочей памяти, с которым ОС и приложения будут взаимодействовать напрямую.

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

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

Обзор кэширования

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

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

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

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

Ускорение получения веб-контента от веб-сайтов (браузеры или устройства)

Кэширование с помощью Amazon ElastiCache

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

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

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

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

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

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

Снижение нагрузки на серверную часть

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

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

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

Устранение проблемных мест в базах данных

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

Повышение пропускной способности операций чтения (количество операций ввода-вывода в секунду)

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

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

Примеры использования
Примеры использования
Узнайте о различных примерах использования кэширования

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

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

Кэширование для гибридных сред

В гибридных облачных средах могут встречаться облачные приложения, которым необходимо часто обращаться к локальной базе данных. Для взаимодействия между облачной и локальной средой можно использовать многие сетевые топологии, в том числе VPN и Direct Connect. А поскольку задержка при взаимодействии VPC с локальным центром обработки данных может быть малой, лучше всего кэшировать локальные данные в облачной среде, чтобы повысить скорость их получения.

Веб-кэширование

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

Общий кэш

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

Интегрированный кэш

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

Узнайте о различных отраслях и примерах использования кэширования

Мобильные технологии

Мобильные приложения – это сегмент рынка, который растет с невообразимой скоростью, учитывая быстрое освоение устройств потребителем и спад в использовании традиционного компьютерного оборудования. Практически для каждого сегмента на рынке, будь то игры, коммерческие приложения, медицинские программы и т. д., есть приложения с поддержкой мобильных устройств. С точки зрения разработки создание мобильных приложений очень похоже на создание любых других приложений. Вы сталкиваетесь с теми же вопросами на уровнях представления, бизнеса и данных. Несмотря на разницу в пространстве экрана и инструментах для разработчиков, общей целью является обеспечение качественного взаимодействия с клиентом. Благодаря эффективным стратегиям кэширования ваши мобильные приложения могут обеспечивать такой уровень производительности, которого ожидают ваши пользователи, масштабироваться до любых размеров и сокращать общие затраты. AWS Mobile Hub – это объединенная консоль для удобного поиска, настройки и использования облачных сервисов AWS, предназначенных для разработки и тестирования мобильных приложений, а также мониторинга их использования.

Интернет вещей (IoT)

Интернет вещей – это концепция сбора информации с устройств и из физического мира с помощью датчиков и ее передачи в Интернет или в приложения, которые принимают эти данные. Ценность IoT заключается в способности понимать собранные данные в режиме, близком к реальному времени, что в конечном счете позволяет системе и приложениям, принимающим эти данные, быстро реагировать на них. Возьмем, к примеру, устройство, которое передает свои GPS-координаты. Ваше приложение IoT может предложить интересные места, которые находятся поблизости от этих координат. Кроме того, если вы сохранили предпочтения пользователя устройства, то можете подобрать наиболее подходящие рекомендации для этого пользователя. В этом отдельном примере скорость ответа приложения на полученные координаты критически важна для достижения качественного взаимодействия с пользователем. Кэширование может сыграть в нем важную роль. Интересные места и их координаты можно хранить в хранилище пар «ключ – значение», например в Redis, чтобы обеспечить их быстрое получение. С точки зрения разработки вы можете запрограммировать свое приложение IoT, чтобы оно реагировало на любое событие, если для этого существуют программные средства. При создании архитектуры IoT необходимо рассмотреть некоторые очень важные вопросы, в том числе время ответа при анализе полученных данных, создание архитектуры решения, масштаб которого охватывает N устройств, и экономичность архитектуры. AWS IoT – это управляемая облачная платформа, которая позволяет подключенным устройствам просто и безопасно взаимодействовать с облачными приложениями и другими устройствами. Дополнительные сведения: Managing IoT and Time Series Data with Amazon ElastiCache for Redis

Рекламные технологии

Современные приложения в сфере рекламных технологий особо требовательны к производительности. Примером важной области развития в этой сфере является торг в режиме реального времени (RTB). Это подход к трансляции рекламы на цифровых экранах в режиме реального времени, основанный на принципе аукциона и работающий со впечатлениями на самом подробном уровне. RTB был преобладающим способом проведения транзакций в 2015 году, учитывая то, что 74,0 процента рекламы было куплено программными средствами, что в США соответствует 11 миллиардам долларов (согласно eMarketer Analysis). При создании приложения для торгов в режиме реального времени важно учитывать то, что одна миллисекунда может решать, было ли предложение предоставлено вовремя, или оно уже стало ненужным. Это значит, что нужно крайне быстро получать данные из базы. Кэширование баз данных, при использовании которого можно получать данные о торгах за считанные доли миллисекунды, – это отличное решение для достижения такой высокой производительности.

Игровые технологии

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

Мультимедиа

Мультимедийным компаниям часто требуется передавать клиентам большое количество статического контента при постоянном изменении количества читателей или зрителей. Примером является сервис потоковой передачи видео, например Netflix или Amazon Video, которые передают пользователям большой объем видеоконтента. Это идеальный случай для использования сети доставки контента, в которой данные хранятся на серверах кэширования, расположенных во всем мире. Еще одним аспектом медиаприложений является пикообразная и непредсказуемая нагрузка. Возьмем, к примеру, публикацию в блоге на веб-сайте, о которой некоторая знаменитость только что отправила сообщение в Twitter, или веб-сайт футбольной команды во время Суперкубка. Такой высокий пик спроса на маленькое подмножество контента – вызов для многих баз данных, потому их пропускная способность для отдельных ключей ограничена. Поскольку пропускная способность оперативной памяти гораздо выше, чем у дисков, кэш базы данных помогает решить эту проблему путем перенаправления запросов чтения в кэш в памяти.

Интернет-коммерция

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

Социальные сети

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

Здравоохранение и здоровый образ жизни

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

Финансы и финансовые технологии

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

В чем хранить кэш

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

«IT-специалист с нуля» наш лучший курс для старта в IT

Процесс помещения информации в кэш называется кэшированием.

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

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

Профессия / 8 месяцев
IT-специалист с нуля

Попробуйте 9 профессий за 2 месяца и выберите подходящую вам

vsrat_7 1 (1)

Кто пользуется кэшем

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

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

Для чего нужен кэш

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

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

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

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

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

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

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

Виды кэша

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

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

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

Устройство аппаратного кэша

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

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

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

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

Устройство программного кэша

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

Особенности записи данных. Информацию в программный кэш записывают одним из двух способов:

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

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

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

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

Алгоритмов, которые описывают добавление и вытеснение, несколько. Наиболее известных — четыре:

  • MRU — убираются данные, которые испольовались последними;
  • LFU — вытесняются данные, которые используются реже всего;
  • LRU — вытесняются данные, к которым не обращались дольше всего;
  • ARC — комбинация двух предыдущих типов.

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

Курс для новичков «IT-специалист
с нуля» – разберемся, какая профессия вам подходит, и поможем вам ее освоить

Примеры программного кэша

Это только несколько примеров. Сфера использования кэш-памяти как концепта намного шире, мы только привели несколько наглядных вариантов.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Недостатки кэша

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

Это не минусы в классическом понимании: кэшем все равно пользуются все. Просто надо понимать, что это специализированный инструмент со своей сферой использования.

Как реализован кэш

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

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

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

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

Как начать работать с кэшем

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

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

IT-специалист с нуля

Наш лучший курс для старта в IT. За 2 месяца вы пробуете себя в девяти разных профессиях: мобильной и веб-разработке, тестировании, аналитике и даже Data Science — выберите подходящую и сразу освойте ее.

картинка (75)

Статьи по теме:

Добавить комментарий

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