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

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

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

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

Эта статья посвящена важной теме системного проектирования: кешированию.

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

Давайте погрузимся 👇

Кэш и некоторые его определения

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

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

Задержка — это задержка между запросом и ответом, а пропускная способность — это объем данных, которые могут быть переданы по системе за заданный промежуток времени.

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

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

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

Некоторые другие преимущества кэширования могут включать:

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

2. Улучшение временной сложности. Кэширование может улучшить временную сложность выполнения на несколько порядков.

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

Кэш-промах и кеш-попадание

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

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

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

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

Политики удаления кеша:

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

Существует несколько распространенных политик удаления кеша на выбор:

  1. Наименее недавно использовавшиеся (LRU): политика LRU отбрасывает наименее использовавшиеся данные, предполагая, что вероятность повторного доступа к ним в ближайшее время будет меньше.
  2. First In First Out (FIFO): в этой политике кеш ведет себя как очередь и удаляет данные, к которым обращались первыми, независимо от того, как часто к ним обращались раньше.
  3. Последний вошел первым (LIFO). Эта политика противоположна FIFO, когда кеш сначала удаляет самые последние добавленные данные, независимо от того, как часто к ним обращались.
  4. Наименее часто используемые (LFU): политика LFU удаляет наименее часто используемые данные, предполагая, что они без необходимости занимают место в кэше.
  5. Случайный выбор. Эта политика случайным образом выбирает элемент данных из кэша и удаляет его, чтобы освободить место, когда это необходимо. Однако он может удалить наиболее необходимый элемент данных, если он используется случайным образом.

Виды кэширования

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

Кэширование браузера

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

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

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

Это отличный пример кэширования на стороне клиента.

Сети доставки контента (CDN)

Сеть доставки контента (CDN) — это географически распределенная сеть серверов, в которой хранятся копии статического контента вашего сайта.

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

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

Кэширование страниц

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

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

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

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

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

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

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

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

Отличным примером кэширования на стороне сервера может быть кэш API.

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

Заключение…

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

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

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

Если вы еще не подписались, вы можете сделать это здесь: